From 218ef7df3c71e3b3c6840a28e2aae8a261156e0d Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 13:40:52 +0300 Subject: [PATCH 1/7] Add Toshiba swanky along with documentation --- toshiba/swanky/README.md | 63 ++++++++++++++++++++++++++++++++++++++ toshiba/swanky/default.nix | 30 ++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 toshiba/swanky/README.md create mode 100644 toshiba/swanky/default.nix diff --git a/toshiba/swanky/README.md b/toshiba/swanky/README.md new file mode 100644 index 0000000..6780770 --- /dev/null +++ b/toshiba/swanky/README.md @@ -0,0 +1,63 @@ +# Toshiba Chromebook (`swanky`) + +There might be a way to install NixOS without hardware modifications (via +enabled developer mode and SeaBIOS boot on Ctrl+L), however I'd highly +recommend replacing Google's Coreboot payload with Tianocore: that allows for +proper virtualization, suspend, removes annoying developer mode screen, and +generally just works much better. + +These instructions carry some risk of bricking your device, since you'll be +reflashing BIOS. Risk is rather low, but please for the love of god make a BIOS +backup and store it someplace safe. That's the only way to reinstall ChromeOS +back after this procedure (BIOS image has licensing info), and it's the easiest +way to unbrick (it's nice to be able to return to the last good state). + +If you ever get unlucky, you can unbrick your device using a makeshift programmer +based on Raspberry Pi or BeagleBone Black, some cables and a SOIC clip, see: +http://sicarul.com/how-to-un-brick-your-toshiba-chromebook-2-gandof-without-invoking-any-demons/ + +## Enable developer mode + +This will wipe all user data and settings from the laptop. + +Power off, then hold ESC + Refresh (F3) and abruptly press power button. You +should see "Chrome OS is missing or damaged" message, press Ctrl+D. Press enter +at the next screen, then press Ctrl+D again. Wait until the laptop boots into +ChromeOS, then power it off. + +## Disable hardware-backed BIOS write protection + +Follow guide at: https://github.com/brendenyule/NativeToshibaCB2Guide/wiki/Remove-Write-Protect + +Ignore 2.2, only follow the first part of the guide. I also placed some ductape +over #5 to make sure that metallic motherboard shield would not re-enable write +protection. + +## Flash Coreboot + Tianocore BIOS + +Go through installation dialogues until you have network access and are able to +log into Guest session. Open Chrome, press Ctrl+Alt+T to open `crosh`, type in +`shell` to get a real shell. Then, run: + +``` +$ cd ~ +$ curl -LO https://mrchromebox.tech/firmware-util.sh +$ sudo bash firmware-util.sh +``` + +Choose option 3. Do not skip BIOS backup! + +Documentation: https://mrchromebox.tech/#fwscript + +## Enable hardware-backed BIOS write protection + +This is a cool security feature, so after flashing Coreboot + Tianocore BIOS +and making sure new BIOS works, consider re-enabling BIOS protection. Just put +in the missing screw #5. + +## Install NixOS + +`dd` an image on a flash drive, partition the drive, etc. On some later models, +you can swap SSD with any other 2242 M.2 SATA SSD, but on `swanky`, you have +to live with what you have (16GB eMMC). I recommend `256MB` for EFI partition, +and the rest for `/`. diff --git a/toshiba/swanky/default.nix b/toshiba/swanky/default.nix new file mode 100644 index 0000000..c46ed6c --- /dev/null +++ b/toshiba/swanky/default.nix @@ -0,0 +1,30 @@ +with pkgs; + +let + ucm = fetchzip { + url = "https://github.com/plbossart/UCM/archive/2050ca78a4d1a853d1ba050b591f42e6f97adfc0.tar.gz"; + sha256 = "1rs4mpz3b965nmz0yhy6j4ga3fdz320qnpkd7d61nvpv9c3i6zwj"; + }; +in + +{ + imports = [ + ../../common/cpu/intel + ../../common/pc/laptop + ]; + + # Sound only properly works out of the box on 4.18+ kernels. + boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; + + # Required for screen brightness control: + boot.kernelParams = [ "acpi_backlight=vendor" ]; + + # Sound requires a custom UCM config: + system.replaceRuntimeDependencies = [{ + original = pkgs.alsaLib; + + replacement = pkgs.alsaLib.overrideAttrs (super: { + postFixup = "cp -r ${ucm}/chtmax98090 $out/share/alsa/ucm"; + }); + }]; +} From 80ad9d8b661c2ae9e8b72e226a82d7ecb6c40c08 Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 13:58:48 +0300 Subject: [PATCH 2/7] Add to README.md, redo the table in Markdown --- README.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.org | 47 ----------------------------------------- 2 files changed, 61 insertions(+), 47 deletions(-) create mode 100644 README.md delete mode 100644 README.org diff --git a/README.md b/README.md new file mode 100644 index 0000000..251ff0b --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +NixOS profiles covering hardware quirks. + +## Setup + +Add and update `nixos-hardware` channel: + +``` +$ sudo nix-channel --add https://github.com/NixOS/nixos-hardware/archive/master.tar.gz nixos-hardware +$ sudo nix-channel --update nixos-hardware +``` + +Then import an appropriate profile path from the table below. For example, to +enable ThinkPad X220 profile, your `imports` in `/etc/nixos/configuration.nix` +should look like: + +``` +imports = [ + + ./hardware-configuration.nix +]; +``` + +## Profiles + +| Model | Path | +| --------------------------------- | ------------------------------------------ | +| [Acer Aspire 4810T][] | `` | +| Airis N990 | `` | +| Apple MacBook Air 4,X | `` | +| Apple MacBook Air 6,X | `` | +| [Apple MacBook Pro 10,1][] | `` | +| Apple MacBook Pro 12,1 | `` | +| [Dell XPS 15 9550][] | `` | +| [Inverse Path USB armory][] | `` | +| Lenovo IdeaPad Z510 | `` | +| Lenovo ThinkPad T410 | `` | +| Lenovo ThinkPad T440p | `` | +| Lenovo ThinkPad T460s | `` | +| Lenovo ThinkPad X140e | `` | +| Lenovo ThinkPad X220 | `` | +| Lenovo ThinkPad X230 | `` | +| Lenovo ThinkPad X250 | `` | +| Lenovo ThinkPad X270 | `` | +| [Microsoft Surface Pro 3][] | `` | +| PC Engines APU | `` | +| [Raspberry Pi 2][] | `` | +| [Samsung Series 9 NP900X3C][] | `` | +| [Purism Librem 13v3][] | `` | +| Supermicro A1SRi-2758F | `` | +| Supermicro X10SLL-F | `` | +| [Toshiba Chromebook 2 `swanky`][] | `` | + +[Acer Aspire 4810T]: acer/aspire/4810t +[Apple MacBook Pro 10,1]: apple/macbook-pro/10-1 +[Dell XPS 15 9550]: dell/xps/15-9550 +[Inverse Path USB armory]: inversepath/usbarmory +[Microsoft Surface Pro 3]: microsoft/surface-pro/3 +[Raspberry Pi 2]: raspberry-pi/2 +[Samsung Series 9 NP900X3C]: samsung/np900x3c +[Purism Librem 13v3]: purism/librem/13v3 +[Toshiba Chromebook 2 `swanky`]: toshiba/swanky diff --git a/README.org b/README.org deleted file mode 100644 index 1ed22ee..0000000 --- a/README.org +++ /dev/null @@ -1,47 +0,0 @@ -NixOS profiles covering hardware quirks. - -** Setup - -Add and update ~nixos-hardware~ channel: - - : $ sudo nix-channel --add https://github.com/NixOS/nixos-hardware/archive/master.tar.gz nixos-hardware - : $ sudo nix-channel --update nixos-hardware - -Then import an appropriate profile path from the table below. For example, to -enable ThinkPad X220 profile, your ~imports~ in ~/etc/nixos/configuration.nix~ -should look like: - - : imports = [ ./hardware-configuration.nix ]; - -** Profiles - -|-----------------------------+-----------------------------------------------| -| Model | Path | -|-----------------------------+-----------------------------------------------| -| [[file:acer/aspire/4810t][Acer Aspire 4810T]] | ~~ | -| Airis N990 | ~~ | -| Apple MacBook Air 4,X | ~~ | -| Apple MacBook Air 6,X | ~~ | -| [[file:apple/macbook-pro/10-1][Apple MacBook Pro 10,1]] | ~~ | -| [[file:apple/macbook-pro/11-5][Apple MacBook Pro 11,5]] | ~~ | -| Apple MacBook Pro 12,1 | ~~ | -| [[file:dell/xps/15-9550][Dell XPS 15 9550]] | ~~ | -| [[file:inversepath/usbarmory][Inverse Path USB armory]] | ~~ | -| Lenovo IdeaPad Z510 | ~~ | -| Lenovo ThinkPad T410 | ~~ | -| Lenovo ThinkPad T440p | ~~ | -| Lenovo ThinkPad T460s | ~~ | -| Lenovo ThinkPad X140e | ~~ | -| Lenovo ThinkPad X220 | ~~ | -| Lenovo ThinkPad X230 | ~~ | -| Lenovo ThinkPad X250 | ~~ | -| Lenovo ThinkPad X270 | ~~ | -| [[file:lenovo/thinkpad/x1/6th-gen][Lenovo ThinkPad X1 6th gen.]] | ~~ | -| [[file:microsoft/surface-pro/3][Microsoft Surface Pro 3]] | ~~ | -| PC Engines APU | ~~ | -| [[file:raspberry-pi/2][Raspberry Pi 2]] | ~~ | -| [[file:samsung/np900x3c][Samsung Series 9 NP900X3C]] | ~~ | -| [[file:purism/librem/13v3][Purism Librem 13v3]] | ~~ | -| Supermicro A1SRi-2758F | ~~ | -| Supermicro X10SLL-F | ~~ | -|-----------------------------+-----------------------------------------------| From 631e81ce5e61eeab5cabd02d8812fbd4a3a0781b Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 14:00:17 +0300 Subject: [PATCH 3/7] Toshiba Chromebook (`swanky`) -> Toshiba Chromebook 2 `swanky` --- toshiba/swanky/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toshiba/swanky/README.md b/toshiba/swanky/README.md index 6780770..e273335 100644 --- a/toshiba/swanky/README.md +++ b/toshiba/swanky/README.md @@ -1,4 +1,4 @@ -# Toshiba Chromebook (`swanky`) +# Toshiba Chromebook 2 `swanky` There might be a way to install NixOS without hardware modifications (via enabled developer mode and SeaBIOS boot on Ctrl+L), however I'd highly From e1804a0fdce6b96230202a1c9e69c84380efe6f4 Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 14:12:28 +0300 Subject: [PATCH 4/7] toshiba/swanky: reword guide --- toshiba/swanky/README.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/toshiba/swanky/README.md b/toshiba/swanky/README.md index e273335..ab4c072 100644 --- a/toshiba/swanky/README.md +++ b/toshiba/swanky/README.md @@ -9,11 +9,11 @@ generally just works much better. These instructions carry some risk of bricking your device, since you'll be reflashing BIOS. Risk is rather low, but please for the love of god make a BIOS backup and store it someplace safe. That's the only way to reinstall ChromeOS -back after this procedure (BIOS image has licensing info), and it's the easiest -way to unbrick (it's nice to be able to return to the last good state). +back after this procedure (BIOS image has licensing info), and it's much easier +to use a known good state to unbrick the laptop if things go wrong. -If you ever get unlucky, you can unbrick your device using a makeshift programmer -based on Raspberry Pi or BeagleBone Black, some cables and a SOIC clip, see: +If you ever get unlucky, you can unbrick your device using Raspberry Pi, +some cables and a SOIC clip, see: http://sicarul.com/how-to-un-brick-your-toshiba-chromebook-2-gandof-without-invoking-any-demons/ ## Enable developer mode @@ -21,23 +21,25 @@ http://sicarul.com/how-to-un-brick-your-toshiba-chromebook-2-gandof-without-invo This will wipe all user data and settings from the laptop. Power off, then hold ESC + Refresh (F3) and abruptly press power button. You -should see "Chrome OS is missing or damaged" message, press Ctrl+D. Press enter +should see "Chrome OS is missing or damaged" message. Press Ctrl+D. Press enter at the next screen, then press Ctrl+D again. Wait until the laptop boots into ChromeOS, then power it off. ## Disable hardware-backed BIOS write protection -Follow guide at: https://github.com/brendenyule/NativeToshibaCB2Guide/wiki/Remove-Write-Protect +Follow the first part of the guide at: +https://github.com/brendenyule/NativeToshibaCB2Guide/wiki/Remove-Write-Protect -Ignore 2.2, only follow the first part of the guide. I also placed some ductape -over #5 to make sure that metallic motherboard shield would not re-enable write -protection. +Ignore SeaBIOS section. I also used some ductape over #5 to make sure that +metallic motherboard shield would not re-enable write protection. ## Flash Coreboot + Tianocore BIOS -Go through installation dialogues until you have network access and are able to -log into Guest session. Open Chrome, press Ctrl+Alt+T to open `crosh`, type in -`shell` to get a real shell. Then, run: +Prepare a FAT32-formatted flash drive for BIOS backup in advance. + +Go through ChromeOS installation dialogues until you have network access and +are able to log into a guest session. Open Chrome, press Ctrl+Alt+T to open +`crosh`, type in `shell` to get a real shell. Then, run: ``` $ cd ~ @@ -45,7 +47,8 @@ $ curl -LO https://mrchromebox.tech/firmware-util.sh $ sudo bash firmware-util.sh ``` -Choose option 3. Do not skip BIOS backup! +Choose "Install/Update Full ROM Firmware" option and follow instructions. +Do not skip BIOS backup! Documentation: https://mrchromebox.tech/#fwscript From 231323f697dfd817e632147dca73efdaa9ae0d92 Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 14:14:16 +0300 Subject: [PATCH 5/7] CONTRIBUTING.org -> CONTRIBUTING.md --- CONTRIBUTING.org => CONTRIBUTING.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CONTRIBUTING.org => CONTRIBUTING.md (100%) diff --git a/CONTRIBUTING.org b/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.org rename to CONTRIBUTING.md From 111d7e8138a7471ded9325c1a138d3409dbc8937 Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 16:50:37 +0300 Subject: [PATCH 6/7] Add toshiba-swanky to CI --- default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/default.nix b/default.nix index c5eb0fa..17612ce 100644 --- a/default.nix +++ b/default.nix @@ -44,4 +44,6 @@ in microsoft-surface-pro-3 = buildProfile ./microsoft/surface-pro/3; pcengines-apu = buildProfile ./pcengines/apu; + + toshiba-swanky = buildProfile ./toshiba/swanky; } From 23e4b913d35dc6132a23986817836f82ee20070d Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Fri, 24 Aug 2018 16:53:27 +0300 Subject: [PATCH 7/7] toshiba/swanky: fix eval --- toshiba/swanky/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toshiba/swanky/default.nix b/toshiba/swanky/default.nix index c46ed6c..9504d14 100644 --- a/toshiba/swanky/default.nix +++ b/toshiba/swanky/default.nix @@ -1,7 +1,7 @@ -with pkgs; +{ lib, pkgs, ... }: let - ucm = fetchzip { + ucm = pkgs.fetchzip { url = "https://github.com/plbossart/UCM/archive/2050ca78a4d1a853d1ba050b591f42e6f97adfc0.tar.gz"; sha256 = "1rs4mpz3b965nmz0yhy6j4ga3fdz320qnpkd7d61nvpv9c3i6zwj"; };