summaryrefslogtreecommitdiff
path: root/sys/fs
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/btrfs.nix116
-rw-r--r--sys/fs/default.nix35
-rw-r--r--sys/fs/layout.nix87
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";
- }
- ];
- };
-}