diff options
Diffstat (limited to '')
| -rw-r--r-- | sys/btrfs/snapper.nix (renamed from sys/fs/btrfs.nix) | 59 | ||||
| -rw-r--r-- | sys/fs/default.nix | 35 | ||||
| -rw-r--r-- | sys/fs/layout.nix | 87 |
3 files changed, 8 insertions, 173 deletions
diff --git a/sys/fs/btrfs.nix b/sys/btrfs/snapper.nix index f240b0d..27d2779 100644 --- a/sys/fs/btrfs.nix +++ b/sys/btrfs/snapper.nix @@ -1,60 +1,17 @@ -{ lib, config, pkgs, ... }: +{ config, lib, pkgs, ... }: with lib; let - cfg = config.local; + cfg = config.local.btrfs; in { - options.local = with lib.types; { - snapperSubvols = mkOption { - type = attrsOf str; + options.local.btrfs = { + snapper = mkOption { + type = with lib.types; attrsOf str; default = { }; }; - - fs.btrfs = mkOption { - default = [ ]; - - type = attrsOf (submodule { - options = { - device = mkOption { - type = str; - }; - - subvol = mkOption { - type = str; - }; - - ssd = mkOption { - type = bool; - }; - - snapper = mkOption { - type = nullOr str; - default = null; - }; - }; - }); - }; }; - config = { - environment.systemPackages = optional (cfg.snapperSubvols != { }) pkgs.local.btclone; - - fileSystems = - let - inherit (cfg) fs; - btrfs = { device, subvol, ssd, ... }: { - inherit device; - fsType = "btrfs"; - options = [ "noatime" "compress=zstd" "subvol=${subvol}" ] ++ optional ssd "ssd"; - }; - in - mapAttrs (_: btrfs) cfg.fs.btrfs; - - local.snapperSubvols = - let - snapperEntry = path: opts: { name = opts.snapper; value = path; }; - validEntry = _: opts: opts.snapper != null; - in - mapAttrs' snapperEntry (filterAttrs validEntry cfg.fs.btrfs); + config = mkIf (cfg.snapper != { }) { + environment.systemPackages = [ pkgs.local.btclone ]; services.snapper.configs = let @@ -111,6 +68,6 @@ in EMPTY_PRE_POST_MIN_AGE = "1800"; }; in - mapAttrs snapperConfig cfg.snapperSubvols; + mapAttrs snapperConfig cfg.snapper; }; } diff --git a/sys/fs/default.nix b/sys/fs/default.nix deleted file mode 100644 index 41871df..0000000 --- a/sys/fs/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, config, ... }: -with lib; let - cfg = config.local.fs; -in -{ - imports = [ ./btrfs.nix ./layout.nix ]; - - options.local.fs = with lib.types; { - impermanence = mkOption { - type = bool; - default = false; - }; - - boot.device = mkOption { - type = str; - }; - }; - - config = { - # !!! - boot.tmp.useTmpfs = true; - - fileSystems."/" = mkIf cfg.impermanence { - device = "tmpfs"; - fsType = "tmpfs"; - options = [ "size=1G" "mode=755" ]; - }; - - fileSystems."/boot" = { - inherit (cfg.boot) device; - fsType = "vfat"; - options = [ "noatime" "umask=027" ]; - }; - }; -} diff --git a/sys/fs/layout.nix b/sys/fs/layout.nix deleted file mode 100644 index 7e1ac2e..0000000 --- a/sys/fs/layout.nix +++ /dev/null @@ -1,87 +0,0 @@ -{ lib, config, ... }: -with lib; let - cfg = config.local; -in -{ - options.local.fs.layout = with lib.types; { - sysHddBtrfs = mkOption { - default = null; - - type = nullOr (submodule { - options = { - sys = { - device = mkOption { - type = str; - }; - - ssd = mkOption { - type = bool; - }; - - root = mkOption { - type = str; - }; - - toplevel = mkOption { - type = str; - }; - }; - - hdd = { - device = mkOption { - type = str; - }; - - home = mkOption { - type = str; - }; - }; - }; - }); - }; - }; - - config = { - local.fs.btrfs = - let - sysHddBtrfs = layout: { - "/" = { - inherit (layout.sys) device ssd; - subvol = layout.sys.root; - }; - - "/toplevel" = { - inherit (layout.sys) device ssd; - subvol = layout.sys.toplevel; - }; - - "/hdd" = { - inherit (layout.hdd) device; - subvol = "/"; - ssd = false; - }; - - "/home" = { - inherit (layout.hdd) device; - subvol = layout.hdd.home; - ssd = false; - snapper = "home"; - }; - }; - - inherit (cfg.fs) layout; - - layoutMaps = [ sysHddBtrfs ]; - layoutOpts = [ layout.sysHddBtrfs ]; - valid = filter ({ snd, ... }: snd != null) (zipLists layoutMaps layoutOpts); - in - optionalAttrs (valid != [ ]) ((head valid).fst (head valid).snd); - - assertions = [ - { - assertion = length (filter (layout: layout != null) (attrValues cfg.fs.layout)) <= 1; - message = "Cannot enable more than one filesystem layout"; - } - ]; - }; -} |
