diff --git a/CONTRIBUTING.org b/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.org rename to CONTRIBUTING.md 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 | ~~ | -|-----------------------------+-----------------------------------------------| 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; } diff --git a/toshiba/swanky/README.md b/toshiba/swanky/README.md new file mode 100644 index 0000000..ab4c072 --- /dev/null +++ b/toshiba/swanky/README.md @@ -0,0 +1,66 @@ +# 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 +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 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 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 + +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 the first part of the guide at: +https://github.com/brendenyule/NativeToshibaCB2Guide/wiki/Remove-Write-Protect + +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 + +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 ~ +$ curl -LO https://mrchromebox.tech/firmware-util.sh +$ sudo bash firmware-util.sh +``` + +Choose "Install/Update Full ROM Firmware" option and follow instructions. +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..9504d14 --- /dev/null +++ b/toshiba/swanky/default.nix @@ -0,0 +1,30 @@ +{ lib, pkgs, ... }: + +let + ucm = pkgs.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"; + }); + }]; +}