From 932838f73623afbe6c6ab1d1e31f03b79f0bcaf4 Mon Sep 17 00:00:00 2001 From: twoneis Date: Wed, 8 May 2024 19:20:06 +0200 Subject: [PATCH] initial attempt at impermance --- devices/ellaca/hardware-config.nix | 12 +++-- flake.lock | 16 +++++++ flake.nix | 4 ++ modules/system/persist/default.nix | 8 ++++ outputs.nix | 73 ++++++++++++++++-------------- 5 files changed, 74 insertions(+), 39 deletions(-) create mode 100644 modules/system/persist/default.nix diff --git a/devices/ellaca/hardware-config.nix b/devices/ellaca/hardware-config.nix index 570ec2a..5c882ae 100644 --- a/devices/ellaca/hardware-config.nix +++ b/devices/ellaca/hardware-config.nix @@ -6,10 +6,10 @@ postDeviceCommands = lib.mkAfter '' mkdir /btrfs_tmp mount /dev/disk/by-uuid/b6e6bca7-1435-4b41-b174-8550eace7c32 /btrfs_tmp - if [[ -e /btrfs_tmp/root ]]; then + if [[ -e /btrfs_tmp/rootfs ]]; then mkdir -p /btrfs_tmp/old_roots - timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") - mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" + timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/rootfs)" "+%Y-%m-%-d_%H:%M:%S") + mv /btrfs_tmp/rootfs "/btrfs_tmp/old_roots/$timestamp" fi delete_subvolume_recursively() { @@ -24,7 +24,7 @@ delete_subvolume_recursively "$i" done - btrfs subvolume create /btrfs_tmp/root + btrfs subvolume create /btrfs_tmp/rootfs umount /btrfs_tmp ''; }; @@ -35,6 +35,7 @@ fileSystems = { "/boot" = { device = "/dev/disk/by-uuid/7ABC-9C12"; + neededForBoot = true; fsType = "vfat"; }; "/" = { @@ -45,16 +46,19 @@ "/nix" = { device = "/dev/disk/by-uuid/b6e6bca7-1435-4b41-b174-8550eace7c32"; fsType = "btrfs"; + neededForBoot = true; options = [ "subvol=nix" "compress=zstd" "noatime" ]; }; "/persist" = { device = "/dev/disk/by-uuid/b6e6bca7-1435-4b41-b174-8550eace7c32"; fsType = "btrfs"; + neededForBoot = true; options = [ "subvol=persist" "compress=zstd" "noatime" ]; }; "/ext" = { device = "/dev/disk/by-uuid/3ed92a26-775a-4e39-ac1c-84b2822cd3dd"; fsType = "btrfs"; + neededForBoot = true; options = [ "subvol=ext" "compress=zstd" "noatime" ]; }; }; diff --git a/flake.lock b/flake.lock index 34da028..f28c8cd 100644 --- a/flake.lock +++ b/flake.lock @@ -249,6 +249,21 @@ "type": "github" } }, + "impermanence": { + "locked": { + "lastModified": 1708968331, + "narHash": "sha256-VUXLaPusCBvwM3zhGbRIJVeYluh2uWuqtj4WirQ1L9Y=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "impermanence", + "type": "github" + } + }, "niri": { "inputs": { "crate2nix": "crate2nix", @@ -464,6 +479,7 @@ "root": { "inputs": { "home-manager": "home-manager", + "impermanence": "impermanence", "niri": "niri", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_3", diff --git a/flake.nix b/flake.nix index cbc14ef..bbf34d3 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,10 @@ url = "github:sodiboo/niri-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; + + impermanence = { + url = "github:nix-community/impermanence"; + }; }; outputs = inputs: import ./outputs.nix inputs; diff --git a/modules/system/persist/default.nix b/modules/system/persist/default.nix new file mode 100644 index 0000000..997f429 --- /dev/null +++ b/modules/system/persist/default.nix @@ -0,0 +1,8 @@ +{ ... }: { + environment.persistence."/persist" = { + files = [ + "/etc/shadow" + "/etc/passwd" + ]; + }; +} diff --git a/outputs.nix b/outputs.nix index 10a7aab..4cca5e6 100644 --- a/outputs.nix +++ b/outputs.nix @@ -1,35 +1,5 @@ -{ nixpkgs, home-manager, nixos-hardware, nur, niri, ... }@inputs: { - nixosConfigurations = let - - clientModules = [ - ./modules/system - ./options.nix - niri.nixosModules.niri - home-manager.nixosModules.home-manager { - nixpkgs.overlays = [ - nur.overlay - ]; - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - users.twoneis = import ./modules/system/home; - }; - } - ]; - - serverModules = [ - ./modules/server - ./options.nix - home-manager.nixosModules.home-manager { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - users.twoneis = import ./modules/server/home; - }; - } - ]; - - in { +{ nixpkgs, home-manager, nixos-hardware, nur, niri, impermanence, ... }@inputs: { + nixosConfigurations = { # AMD Ryzen 5600X # nvidia GeForce GTX 1060 (6GB) ellaca = nixpkgs.lib.nixosSystem { @@ -39,7 +9,20 @@ }; modules = [ ./devices/ellaca - ] ++ clientModules; + ./modules/system + ./modules/system/persist + ./options.nix + niri.nixosModules.niri + impermanence.nixosModules.impermanence + home-manager.nixosModules.home-manager { + nixpkgs.overlays = [ nur.overlay ]; + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.twoneis = import ./modules/system/home; + }; + } + ]; }; # Surface Pro 7 (i5 128GB) @@ -50,8 +33,19 @@ }; modules = [ ./devices/akarso + ./modules/system + ./options.nix nixos-hardware.nixosModules.microsoft-surface-pro-intel - ] ++ clientModules; + niri.nixosModules.niri + home-manager.nixosModules.home-manager { + nixpkgs.overlays = [ nur.overlay ]; + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.twoneis = import ./modules/system/home; + }; + } + ]; }; # Zotac Mini @@ -63,7 +57,16 @@ }; modules = [ ./devices/creosote - ] ++ serverModules; + ./modules/server + ./options.nix + home-manager.nixosModules.home-manager { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.twoneis = import ./modules/server/home; + }; + } + ]; }; }; }