diff options
| author | Alejandro Soto <alejandro@34project.org> | 2024-07-14 17:53:13 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2024-07-15 09:34:00 -0600 |
| commit | 02abf4ed0131237c25e0a10db50fa4c41a902a50 (patch) | |
| tree | 20904894fc0952806e341cdaff5941e81b3ce51c /sys/fs | |
| parent | 08e746700341dda3e3bdf704332fc3c07053d3e7 (diff) | |
sys: final merge of dmz, hv into sys
Diffstat (limited to 'sys/fs')
| -rw-r--r-- | sys/fs/btrfs.nix | 116 | ||||
| -rw-r--r-- | sys/fs/default.nix | 35 | ||||
| -rw-r--r-- | sys/fs/layout.nix | 87 |
3 files changed, 0 insertions, 238 deletions
diff --git a/sys/fs/btrfs.nix b/sys/fs/btrfs.nix deleted file mode 100644 index f240b0d..0000000 --- a/sys/fs/btrfs.nix +++ /dev/null @@ -1,116 +0,0 @@ -{ lib, config, pkgs, ... }: -with lib; let - cfg = config.local; -in -{ - options.local = with lib.types; { - snapperSubvols = mkOption { - type = 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); - - services.snapper.configs = - let - snapperConfig = _: subvolume: { - SUBVOLUME = subvolume; - - # btrfs qgroup for space aware cleanup algorithms - QGROUP = ""; - - # fraction of the filesystems space the snapshots may use - SPACE_LIMIT = "0.5"; - - # fraction of the filesystems space that should be free - FREE_LIMIT = "0.2"; - - # users and groups allowed to work with config - ALLOW_USERS = [ ]; - ALLOW_GROUPS = [ ]; - - # sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots - # directory - SYNC_ACL = "no"; - - # start comparing pre- and post-snapshot in background after creating - # post-snapshot - BACKGROUND_COMPARISON = "yes"; - - # run daily number cleanup - NUMBER_CLEANUP = "yes"; - - # limit for number cleanup - NUMBER_MIN_AGE = "1800"; - NUMBER_LIMIT = "100"; - NUMBER_LIMIT_IMPORTANT = "10"; - - # create hourly snapshots - TIMELINE_CREATE = true; - - # cleanup hourly snapshots after some time - TIMELINE_CLEANUP = true; - - # limits for timeline cleanup - TIMELINE_MIN_AGE = "1800"; - TIMELINE_LIMIT_HOURLY = "24"; - TIMELINE_LIMIT_DAILY = "7"; - TIMELINE_LIMIT_WEEKLY = "4"; - TIMELINE_LIMIT_MONTHLY = "12"; - TIMELINE_LIMIT_YEARLY = "10"; - - # cleanup empty pre-post-pairs - EMPTY_PRE_POST_CLEANUP = "yes"; - - # limits for empty pre-post-pair cleanup - EMPTY_PRE_POST_MIN_AGE = "1800"; - }; - in - mapAttrs snapperConfig cfg.snapperSubvols; - }; -} 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"; - } - ]; - }; -} |
