From 210faa1bd26de65fb3a0acd501b8e039358394c8 Mon Sep 17 00:00:00 2001 From: brian Date: Fri, 12 Dec 2025 21:00:45 -0500 Subject: [PATCH] Add filesystem.nix --- filesystem.nix | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 filesystem.nix diff --git a/filesystem.nix b/filesystem.nix new file mode 100644 index 0000000..16eeb24 --- /dev/null +++ b/filesystem.nix @@ -0,0 +1,92 @@ +{ config, lib, pkgs, ... }: + +let + username = "brian"; + uid = 1000; + gid = 100; + + secrets = import ./secrets.nix; + + networkShares = [ + { + name = "seagate8tb"; + device = "//10.0.0.128/PublicShare"; + mountPoint = "/mnt/smb-seagate8tb"; + } + { + name = "wd4tb"; + device = "//10.0.0.65/wd4tb"; + mountPoint = "/mnt/smb-wd4tb"; + } + { + name = "stashapp"; + device = "//10.0.0.65/stashapp"; + mountPoint = "/mnt/smb-app"; + } + + ]; + + networkFileSystems = builtins.listToAttrs (map (share: { + name = share.mountPoint; + value = { + device = share.device; + fsType = "cifs"; + options = [ + "username=${secrets."${share.name}Username"}" + "password=${secrets."${share.name}Password"}" + "uid=1000" + "gid=1000" + "file_mode=0775" + "dir_mode=0775" + ]; + }; + }) networkShares); +in +{ + # Only add network shares and NVMe + # Root and boot are already in hardware-configuration.nix + fileSystems = networkFileSystems // { + # Your new NVMe drive ONLY + "/mnt/nvme" = { + device = "/dev/disk/by-label/nvmedrive"; + fsType = "ext4"; + options = [ + "defaults" + "noatime" + "discard" + "uid=${toString uid}" + "gid=${toString gid}" + "fmask=022" + "dmask=022" + ]; + }; + }; + + systemd.services.fix-nvme-permissions = { + description = "Fix NVMe drive permissions"; + wantedBy = [ "multi-user.target" ]; + after = [ "local-fs.target" ]; + script = '' + # Set ownership + chown -R ${username}:users /mnt/nvme 2>/dev/null || true + # Create game directories + mkdir -p /mnt/nvme/games/steam + chown -R ${username}:users /mnt/nvme/games + # Set permissions + chmod -R 775 /mnt/nvme 2>/dev/null || true + ''; + serviceConfig.Type = "oneshot"; + }; + + # Create symlinks in home directory for easy access + systemd.tmpfiles.rules = + (map (share: + "L+ /home/${username}/${share.name} - - - - ${share.mountPoint}" + ) networkShares) + ++ + [ + "L+ /home/${username}/nvme - - - - /mnt/nvme" + "d /mnt/nvme/games 0775 ${username} users -" + "d /mnt/nvme/games/steam 0775 ${username} users -" + ]; +} \ No newline at end of file