aboutsummaryrefslogtreecommitdiffstats
path: root/hosts/wopr
diff options
context:
space:
mode:
authorsadbeast <sadbeast@sadbeast.com>2024-05-30 00:47:47 +0000
committersadbeast <sadbeast@sadbeast.com>2024-10-05 16:44:14 -0700
commit09513b5c4e4babfaefdd06c592ef34c0908dc572 (patch)
tree5a9af6ef0407346c223334e295adc8012654f112 /hosts/wopr
downloadnix-config-09513b5c4e4babfaefdd06c592ef34c0908dc572.tar.gz
nix-config-09513b5c4e4babfaefdd06c592ef34c0908dc572.tar.bz2
oh god what have i doneHEADmain
Diffstat (limited to 'hosts/wopr')
-rw-r--r--hosts/wopr/default.nix23
-rw-r--r--hosts/wopr/hardware-configuration.nix103
2 files changed, 126 insertions, 0 deletions
diff --git a/hosts/wopr/default.nix b/hosts/wopr/default.nix
new file mode 100644
index 0000000..bfd9de1
--- /dev/null
+++ b/hosts/wopr/default.nix
@@ -0,0 +1,23 @@
+{
+ imports = [
+ # Import your generated (nixos-generate-config) hardware configuration
+ ./hardware-configuration.nix
+
+ ../common/global
+ ];
+
+ # Use the GRUB 2 boot loader.
+ boot.loader.grub.enable = true;
+ boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
+
+ networking.hostName = "wopr";
+
+ services = {
+ logind.extraConfig = ''
+ HandleLidSwitchExternalPower=ignore
+ '';
+ };
+
+ # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
+ system.stateVersion = "24.05";
+}
diff --git a/hosts/wopr/hardware-configuration.nix b/hosts/wopr/hardware-configuration.nix
new file mode 100644
index 0000000..02a1988
--- /dev/null
+++ b/hosts/wopr/hardware-configuration.nix
@@ -0,0 +1,103 @@
+{
+ config,
+ lib,
+ pkgs,
+ modulesPath,
+ ...
+}: {
+ imports = [
+ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ boot.initrd.availableKernelModules = ["ehci_pci" "ahci" "firewire_ohci" "usb_storage" "sd_mod" "sr_mod" "sdhci_pci"];
+ boot.initrd.kernelModules = [];
+ boot.kernelModules = ["kvm-intel"];
+ boot.extraModulePackages = [];
+
+ boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/e9671751-99d2-4a1c-84f1-1f58dc117fc1";
+
+ # Note `lib.mkBefore` is used instead of `lib.mkAfter` here.
+ boot.initrd.postDeviceCommands = pkgs.lib.mkBefore ''
+ mkdir -p /mnt
+
+ # We first mount the btrfs root to /mnt
+ # so we can manipulate btrfs subvolumes.
+ mount -o subvol=/ /dev/mapper/enc /mnt
+
+ # While we're tempted to just delete /root and create
+ # a new snapshot from /root-blank, /root is already
+ # populated at this point with a number of subvolumes,
+ # which makes `btrfs subvolume delete` fail.
+ # So, we remove them first.
+ #
+ # /root contains subvolumes:
+ # - /root/var/lib/portables
+ # - /root/var/lib/machines
+ #
+ # I suspect these are related to systemd-nspawn, but
+ # since I don't use it I'm not 100% sure.
+ # Anyhow, deleting these subvolumes hasn't resulted
+ # in any issues so far, except for fairly
+ # benign-looking errors from systemd-tmpfiles.
+ btrfs subvolume list -o /mnt/root |
+ cut -f9 -d' ' |
+ while read subvolume; do
+ echo "deleting /$subvolume subvolume..."
+ btrfs subvolume delete "/mnt/$subvolume"
+ done &&
+ echo "deleting /root subvolume..." &&
+ btrfs subvolume delete /mnt/root
+
+ echo "restoring blank /root subvolume..."
+ btrfs subvolume snapshot /mnt/root-blank /mnt/root
+
+ # Once we're done rolling back to a blank snapshot,
+ # we can unmount /mnt and continue on the boot process.
+ umount /mnt
+ '';
+
+ fileSystems."/boot" = {
+ device = "/dev/disk/by-label/boot";
+ neededForBoot = true;
+ fsType = "btrfs";
+ };
+
+ fileSystems."/" = {
+ device = "/dev/disk/by-uuid/0ceef315-a8bb-4899-b037-4ad4b6d094a7";
+
+ fsType = "btrfs";
+ options = ["subvol=root" "noatime"];
+ };
+
+ fileSystems."/nix" = {
+ device = "/dev/disk/by-uuid/0ceef315-a8bb-4899-b037-4ad4b6d094a7";
+ fsType = "btrfs";
+ options = ["subvol=nix" "noatime"];
+ };
+
+ fileSystems."/persistent" = {
+ device = "/dev/disk/by-uuid/0ceef315-a8bb-4899-b037-4ad4b6d094a7";
+ fsType = "btrfs";
+ neededForBoot = true;
+ options = ["subvol=persistent" "noatime"];
+ };
+
+ swapDevices = [
+ {device = "/dev/disk/by-label/swap";}
+ ];
+
+ # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+ # (the default) this is the recommended approach. When using systemd-networkd it's
+ # still possible to use this option, but it's recommended to use it in conjunction
+ # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+ networking = {
+ useDHCP = lib.mkDefault true;
+ wireless = {
+ enable = true;
+ userControlled.enable = true;
+ };
+ };
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+}