Compare commits

..
Author SHA1 Message Date
aaron 4409e2a9e6 feature(git): add kryptons ssh key as signing key 2026-10-04 14:43:11 +02:00
aaron e602ba9df1 feature(software): add signal-desktop electron app 2026-10-04 10:29:30 +02:00
aaron 863c496400 chore: update installation guide 2026-10-03 22:49:18 +02:00
aaron 20bf806666 Merge pull request 'feature(boot): add secure-boot and tpm-unlock to neon' (#94) from feature/neon_secureboot into main
Reviewed-on: #94
2026-10-03 16:22:29 +02:00
aaron e35311dfd5 chore: update installation guide with secure-boot setup pitfalls 2026-10-03 16:21:54 +02:00
aaron beb520a615 feature(boot): add secure-boot support and tpm-unlock to neon 2026-10-03 15:55:36 +02:00
aaron 4eb3e27f8b Merge pull request 'feature(boot): add secure-boot support and tpm-unlock to argon' (#93) from feature/argon_secureboot into main
Reviewed-on: #93
2026-10-03 15:48:06 +02:00
aaron 8c56b00247 feature(boot): add secure-boot support and tpm-unlock to argon 2026-10-03 15:07:13 +02:00
aaron ff2e4d2f69 Merge pull request 'fix: do not allow edits to the bootloader' (#92) from feature/bootloader_security into main
Reviewed-on: #92
2026-10-03 14:11:56 +02:00
aaron 318e17ac27 fix: do not allow edits to the bootloader 2026-10-03 14:11:29 +02:00
aaron c66549f3bf Merge pull request 'feature(hidpi): adapt sddm and systemd-boot to hidpi display' (#91) from feature/krypton_hidpi into main
Reviewed-on: #91
2026-10-03 13:44:31 +02:00
aaron 620c415be9 fix: adapt systemd-boot for kryptons hidpi screen by using the right console mode 2026-10-03 13:39:35 +02:00
aaron 472f359f80 fix: adapt kryptons sddm for hidpi using the qt scale factor 2026-10-03 13:35:50 +02:00
aaron ad494d1209 Merge pull request 'feature(boot): add luks unlock method using TPM+PIN' (#90) from feature/tpm_unlock into main
Reviewed-on: #90
2026-10-03 13:28:35 +02:00
aaron d26bd424cc feature(boot): add luks unlock method using TPM+PIN 2026-10-03 13:25:18 +02:00
aaron a7bba82b5b Merge pull request 'feature(lanzaboote): add support for secure-boot through lanazaboote' (#88) from feature/secure_boot into main
Reviewed-on: #88
2026-10-03 12:48:11 +02:00
8 changed files with 60 additions and 0 deletions
+36
View File
@@ -149,6 +149,23 @@ $ sudo sbctl enroll-keys
Don't force it, either trust exactly those with `--tpm-eventlog` or
microsoft's keys with `--microsoft`. Without either, the firmware may not
start the device, in the worst case the machine doesn't boot at all.
- Check what sbctl found first, a real option ROM has a PCI device path:
```bash
$ sudo nix shell nixpkgs#tpm2-tools -c tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -A14 "EV_EFI_BOOT_SERVICES_DRIVER"
```
- Paths starting with `0407` (firmware volume) are drivers from the firmware
itself, not option ROMs (e.g. on the ThinkPad). `--tpm-eventlog` trusts
exactly those, after a firmware update they may need to be enrolled again
(disable Secure Boot, `sbctl enroll-keys --tpm-eventlog`)
- Without an integrated gpu (argon), the gpu's option ROM draws the firmware
setup too, use `--microsoft` there, a refused gpu means no picture at all
- On the Framework (krypton), keep the firmware's built-in OEM certificates
with `--firmware-builtin`, vendor firmware updates may need them. If an
update fails or the keys were enrolled without them, erase the keys in the
firmware again (Setup Mode) and re-enroll:
```bash
$ sudo sbctl enroll-keys --firmware-builtin
```
6. enable Secure Boot in the firmware and set a firmware password, then check
```bash
@@ -158,6 +175,25 @@ $ sudo sbctl status # Secure Boot: ✓ Enabled
- If it doesn't boot anymore, disabling Secure Boot in the firmware boots as before
- Losing the keys isn't fatal: erase the keys in the firmware and start over at step 1
## how to unlock the disk with the tpm (laptops)
Needs Secure Boot first. The TPM releases the key only with the PIN and while
the Secure Boot state (PCR 7) is unchanged. The passphrase stays as fallback.
1. enroll the TPM with a PIN as an additional key slot
```bash
# asks for the current passphrase, then the new PIN
$ sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 --tpm2-with-pin=yes /dev/disk/by-label/nixcrypt
```
2. import `modules/nixos/tpm-unlock.nix` in the host's `configuration.nix`, rebuild and reboot
- If the passphrase is suddenly asked for instead of the PIN, the Secure Boot
state changed. After a firmware update that's expected, otherwise investigate
before typing the passphrase. To re-enroll:
```bash
$ sudo systemd-cryptenroll --wipe-slot=tpm2 --tpm2-device=auto --tpm2-pcrs=7 --tpm2-with-pin=yes /dev/disk/by-label/nixcrypt
```
## how to upgrade the system
```bash
$ cd /path/to/repo
+2
View File
@@ -12,6 +12,7 @@
../../modules/nixos/data-drives.nix
../../modules/nixos/gnupg.nix
../../modules/nixos/greetd.nix
../../modules/nixos/lanzaboote.nix
../../modules/nixos/locales.nix
../../modules/nixos/networking.nix
../../modules/nixos/niri.nix
@@ -23,6 +24,7 @@
../../modules/nixos/settings.nix
../../modules/nixos/steam.nix
../../modules/nixos/thunar.nix
../../modules/nixos/tpm-unlock.nix
../../modules/nixos/users.nix
../../modules/nixos/vial.nix
];
+8
View File
@@ -24,6 +24,7 @@
../../modules/nixos/services.nix
../../modules/nixos/settings.nix
../../modules/nixos/steam.nix
../../modules/nixos/tpm-unlock.nix
../../modules/nixos/users.nix
../../modules/nixos/vial.nix
];
@@ -31,6 +32,13 @@
# host-specific niri config (input devices, laptop binds)
home-manager.users.aaron.imports = [ ./niri.nix ];
# hidpi panel (2880x1920): the sddm greeter runs in weston, which doesn't scale
services.displayManager.sddm.settings.General.GreeterEnvironment = "QT_SCALE_FACTOR=2";
# bigger boot menu font, mode found with "r" in the menu; mode 6 is beyond
# what boot.loader.systemd-boot.consoleMode accepts, so set via lanzaboote
boot.lanzaboote.settings.console-mode = "6";
networking.hostName = "krypton";
system.stateVersion = "26.05"; # don't change
}
+2
View File
@@ -17,6 +17,7 @@
../../modules/nixos/certificates.nix
../../modules/nixos/docker.nix
../../modules/nixos/gnupg.nix
../../modules/nixos/lanzaboote.nix
../../modules/nixos/locales.nix
../../modules/nixos/networking.nix
../../modules/nixos/niri.nix
@@ -28,6 +29,7 @@
../../modules/nixos/services.nix
../../modules/nixos/settings.nix
../../modules/nixos/steam.nix
../../modules/nixos/tpm-unlock.nix
../../modules/nixos/users.nix
../../modules/nixos/vial.nix
];
+1
View File
@@ -14,6 +14,7 @@ let
signingKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHRhwzo1oxaT3fEySSmILKNnu9v30cfjx5G7FKpmfqeX aaron@argon"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDkhvvTUcBSQdtXjX+Mw2Bp8HHhtiBm8aJi4ZxiBgZR aaron@neon"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB5BI+rirjPHZwqgBzO3xOi3m0+07zY0uEou7NSCFh0+ aaron@krypton"
];
in
{
+1
View File
@@ -7,6 +7,7 @@
discord
fastfetch
keepassxc
signal-desktop
teamspeak6-client
typst
zathura
+2
View File
@@ -4,6 +4,8 @@
# set bootloader to systemd
boot.loader = {
systemd-boot.enable = true;
# no kernel command line editing at the boot menu (e.g. init=/bin/sh)
systemd-boot.editor = false;
efi.canTouchEfiVariables = true;
};
+8
View File
@@ -0,0 +1,8 @@
# Unlock cryptroot with the TPM and a PIN, the passphrase stays as fallback.
# The TPM only releases the key while PCR 7 (the Secure Boot state) matches,
# so this needs lanzaboote.nix. Enrolled once per host with
# `systemd-cryptenroll`, see INSTALLATION.md.
{
boot.initrd.luks.devices."cryptroot".crypttabExtraOpts = [ "tpm2-device=auto" ];
}