From dc6d62c7823afb6cf766a732297baf776dd8dd90 Mon Sep 17 00:00:00 2001 From: Andrew Torgesen Date: Fri, 26 Jun 2026 17:52:59 -0700 Subject: [PATCH 1/5] Add externalDrives module to auto-mount known external drives Mounts known external drives at /mnt/ via nofail + x-systemd.automount, so they mount transparently whenever connected (at boot or hot-plugged later) and never block boot when absent. Foreign filesystems (ntfs/vfat/exfat) get uid/gid + dmask/fmask so andrew and the dev group always have read/write access. Default drives: seagate (Seagate Backup Plus, NTFS) and aegis (Apricorn Aegis Padlock SSD, NTFS). Imported into pc-base.nix. Co-Authored-By: Claude Opus 4.8 --- pkgs/nixos/modules/externalDrives/module.nix | 96 ++++++++++++++++++++ pkgs/nixos/pc-base.nix | 1 + 2 files changed, 97 insertions(+) create mode 100644 pkgs/nixos/modules/externalDrives/module.nix diff --git a/pkgs/nixos/modules/externalDrives/module.nix b/pkgs/nixos/modules/externalDrives/module.nix new file mode 100644 index 000000000..91e681053 --- /dev/null +++ b/pkgs/nixos/modules/externalDrives/module.nix @@ -0,0 +1,96 @@ +{ + config, + lib, + ... +}: +let + cfg = config.machines.externalDrives; + + foreignFsTypes = [ + "ntfs" + "ntfs-3g" + "vfat" + "exfat" + ]; + + uid = toString config.users.users.${cfg.user}.uid; + gid = toString config.users.groups.${cfg.group}.gid; + + baseOpts = [ + "nofail" + "x-systemd.automount" + "x-systemd.idle-timeout=60" + "x-systemd.device-timeout=10s" + ]; + + ownershipOpts = [ + "uid=${uid}" + "gid=${gid}" + "dmask=007" + "fmask=117" + "windows_names" + ]; + + driveModule = lib.types.submodule { + options = { + uuid = lib.mkOption { + type = lib.types.str; + description = "Filesystem UUID; the device is resolved via /dev/disk/by-uuid."; + }; + fsType = lib.mkOption { + type = lib.types.str; + default = "ntfs-3g"; + description = "Mount filesystem type."; + }; + extraOptions = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = "Extra mount options appended for this drive."; + }; + }; + }; + + mkMount = name: drive: { + name = "/mnt/${name}"; + value = { + device = "/dev/disk/by-uuid/${drive.uuid}"; + fsType = drive.fsType; + options = + baseOpts + ++ lib.optionals (lib.elem drive.fsType foreignFsTypes) ownershipOpts + ++ drive.extraOptions; + }; + }; +in +{ + options.machines.externalDrives = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Auto-mount known external drives at /mnt/ when connected."; + }; + user = lib.mkOption { + type = lib.types.str; + default = "andrew"; + description = "Owner of foreign-filesystem mounts."; + }; + group = lib.mkOption { + type = lib.types.str; + default = "dev"; + description = "Group owner of foreign-filesystem mounts."; + }; + drives = lib.mkOption { + type = lib.types.attrsOf driveModule; + default = { + seagate.uuid = "A4E83FF7E83FC5F8"; + aegis.uuid = "0259FC5C6268D54B"; + }; + description = "Known external drives keyed by mount-point name under /mnt."; + }; + }; + + config = lib.mkIf cfg.enable { + boot.supportedFilesystems = [ "ntfs" ]; + fileSystems = lib.mapAttrs' mkMount cfg.drives; + }; +} diff --git a/pkgs/nixos/pc-base.nix b/pkgs/nixos/pc-base.nix index 3ae58daaa..cf0e8b3c2 100644 --- a/pkgs/nixos/pc-base.nix +++ b/pkgs/nixos/pc-base.nix @@ -239,6 +239,7 @@ in ./modules/webserverNode/module.nix ./modules/cudaNode/module.nix ./modules/comfyui/module.nix + ./modules/externalDrives/module.nix ../modules/notes-wiki/module.nix ../modules/metricsNode/module.nix ../modules/plexNode/module.nix From 9b03ba6f346359c666e06808b53fc9fa82f9791d Mon Sep 17 00:00:00 2001 From: "goromal (bot)" Date: Sat, 27 Jun 2026 00:56:46 +0000 Subject: [PATCH 2/5] Update flake lock --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 10a6f8f78..aa049e65a 100644 --- a/flake.lock +++ b/flake.lock @@ -938,11 +938,11 @@ "sunnyside": { "flake": false, "locked": { - "lastModified": 1717568445, - "narHash": "sha256-U2wiyKsJ6ACiajkfULpkdCUJ2/xZKQqNgzIHQL9utIE=", + "lastModified": 1782521357, + "narHash": "sha256-YBn5iN5xzxKxg4kjh2dbxkpG1v6i4AkHsG0ZO1kv+7Q=", "owner": "goromal", "repo": "sunnyside", - "rev": "d6605667490ce008321b32dea5732d7962609bf7", + "rev": "0da2719982d168969a9a793b85de9f6d8dd2e6f3", "type": "github" }, "original": { From 9ea308709037001d8f623727e71da2d55614348d Mon Sep 17 00:00:00 2001 From: Andrew Torgesen Date: Sat, 27 Jun 2026 14:17:45 -0700 Subject: [PATCH 3/5] Use mkEnableOption for externalDrives.enable; opt in from pc-base.nix Co-Authored-By: Claude Sonnet 4.6 --- pkgs/nixos/modules/externalDrives/module.nix | 6 +----- pkgs/nixos/pc-base.nix | 3 +++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pkgs/nixos/modules/externalDrives/module.nix b/pkgs/nixos/modules/externalDrives/module.nix index 91e681053..8de188c80 100644 --- a/pkgs/nixos/modules/externalDrives/module.nix +++ b/pkgs/nixos/modules/externalDrives/module.nix @@ -64,11 +64,7 @@ let in { options.machines.externalDrives = { - enable = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Auto-mount known external drives at /mnt/ when connected."; - }; + enable = lib.mkEnableOption "auto-mount known external drives at /mnt/ when connected"; user = lib.mkOption { type = lib.types.str; default = "andrew"; diff --git a/pkgs/nixos/pc-base.nix b/pkgs/nixos/pc-base.nix index cf0e8b3c2..3c78307f9 100644 --- a/pkgs/nixos/pc-base.nix +++ b/pkgs/nixos/pc-base.nix @@ -665,6 +665,9 @@ in services.metricsNode.enable = cfg.enableMetrics; services.metricsNode.openFirewall = cfg.enableMetrics; + # External drives + machines.externalDrives.enable = true; + # Notes Wiki services.notes-wiki.enable = cfg.serveNotesWiki; From eb04d59d0893d39efd720ab7575aff4c2c8252d6 Mon Sep 17 00:00:00 2001 From: Andrew Torgesen Date: Sat, 27 Jun 2026 14:21:06 -0700 Subject: [PATCH 4/5] Enable stampserver on all machines Co-Authored-By: Claude Sonnet 4.6 --- pkgs/nixos/pc-base.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/nixos/pc-base.nix b/pkgs/nixos/pc-base.nix index 3c78307f9..c6c20b1f9 100644 --- a/pkgs/nixos/pc-base.nix +++ b/pkgs/nixos/pc-base.nix @@ -467,7 +467,7 @@ in }; services.stampserver = { - enable = cfg.isATS || cfg.enableFileServers; + enable = true; package = anixpkgs.stampserver; rootDir = "${cfg.homeDir}/fileservers"; }; From 83e0468d2dae59896477fc4a189776e3038d544a Mon Sep 17 00:00:00 2001 From: "goromal (bot)" Date: Sat, 27 Jun 2026 22:13:46 +0000 Subject: [PATCH 5/5] Update changelog --- changes/pr-560.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/pr-560.md diff --git a/changes/pr-560.md b/changes/pr-560.md new file mode 100644 index 000000000..f8675e5cd --- /dev/null +++ b/changes/pr-560.md @@ -0,0 +1 @@ +Add externalDrives module to auto-mount known external drives