diff --git a/non-persistence.nix b/non-persistence.nix index 24c96a2..ad00667 100644 --- a/non-persistence.nix +++ b/non-persistence.nix @@ -2,15 +2,32 @@ with lib; let cfg = config.aviallon.non-persistence; + impermanenceSrc = builtins.fetchGit { + url = "https://github.com/nix-community/impermanence.git"; + ref = "master"; + rev = "ff2240b04ffb9322241b9f6374305cbf6a98a285"; + }; + persistFolder = "/persist"; + impermanence = import "${impermanenceSrc}/nixos.nix"; + mkLink = dest: src: ''L+ "${dest}" - - - - ${src}''; + mkDir = dest: ''d "${dest}" - - - -''; + mkPersist = path: concatLists [ + (optional (dirOf path != path) (mkDir (dirOf path))) + [ (mkLink path "${persistFolder}/${path}") ] + ]; in { + imports = [ + impermanence + ]; + options.aviallon.non-persistence = { enable = mkEnableOption "non-persitent root"; }; config = mkIf cfg.enable { assertions = [ - { assertion = hasAttr "/persist" config.fileSystems; - message = "A /persist partition is needed for non-persistence"; + { assertion = hasAttr persistFolder config.fileSystems; + message = "A ${persistFolder} partition is needed for non-persistence"; } { assertion = hasAttr "/var/log" config.fileSystems; message = "A /var/log separate parition is needed to avoid missing early logs."; @@ -18,9 +35,9 @@ in ]; environment.etc = { - nixos.source = "/persist/etc/nixos"; - NIXOS.source = "/persist/etc/NIXOS"; - machine-id.source = "/persist/etc/machine-id"; + nixos.source = "${persistFolder}/etc/nixos"; + NIXOS.source = "${persistFolder}/etc/NIXOS"; + machine-id.source = "${persistFolder}/etc/machine-id"; }; boot.tmpOnTmpfs = true; @@ -31,7 +48,7 @@ in autoFormat = true; label = "nixos-persistent-logs"; }; - "/persist" = { + "${persistFolder}" = { neededForBoot = true; label = "nixos-persistent-data"; };