Add TrueNAS SMB mount (LAN + Tailscale fallback), SSH server, fix mountpoint dep

This commit is contained in:
Scott Scoble 2026-05-16 23:26:43 -07:00
parent 49de6db354
commit 125edddec7

View file

@ -5,7 +5,6 @@
# === System Packages === # === System Packages ===
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
papirus-icon-theme
# Core development tools # Core development tools
qmd qmd
nodejs nodejs
@ -29,14 +28,76 @@
# SSH essentials # SSH essentials
openssh openssh
mosh mosh
networkmanager
# SMB/CIFS mount support
cifs-utils
mount-truenas-shared
]; ];
# === Networking === # === Network Shares ===
networking.networkmanager.enable = true; # TrueNAS "Shared" volume — tries LAN IP first, falls back to Tailscale
networking.networkmanager.insertNameservers = [ "1.1.1.1" "8.8.8.8" ]; # Credentials stored at /etc/nixos/smb-credentials (NOT in repo)
systemd.tmpfiles.rules = [
"d /mnt/shared 0755 root root -"
];
# === Wallpaper === systemd.services.mount-truenas-shared = {
description = "Mount TrueNAS Shared SMB volume";
after = [ "network-online.target" "tailscaled.service" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${pkgs.mount-truenas-shared}/bin/mount-truenas-shared";
ExecStop = "${pkgs.mount-truenas-shared}/bin/mount-truenas-shared umount";
};
};
nixpkgs.overlays = [
(final: prev: {
mount-truenas-shared = prev.writeShellScriptBin "mount-truenas-shared" ''
set -o pipefail
SHARE="Shared"
MOUNTPOINT="/mnt/shared"
CREDENTIALS="/etc/nixos/smb-credentials"
MOUNT_OPTS="credentials=$CREDENTIALS,vers=3.0,uid=1000,gid=100,nodfs,noperm,iocharset=utf8,file_mode=0644,dir_mode=0755"
LAN_IP="192.168.168.93"
TAILSCALE_IP="100.70.3.101"
# Already mounted?
if grep -qs "$MOUNTPOINT" /proc/mounts; then
exit 0
fi
# Find a reachable NAS
SERVER=""
timeout 2 bash -c "</dev/tcp/$LAN_IP/445" 2>/dev/null && SERVER="$LAN_IP"
if [ -z "$SERVER" ]; then
timeout 2 bash -c "</dev/tcp/$TAILSCALE_IP/445" 2>/dev/null && SERVER="$TAILSCALE_IP"
fi
CMD="''${1:-mount}"
case "$CMD" in
mount)
if [ -z "$SERVER" ]; then
echo "No NAS reachable (tried $LAN_IP and $TAILSCALE_IP) — mount deferred"
exit 0
fi
echo "Mounting $SHARE from $SERVER..."
mount -t cifs "//$SERVER/$SHARE" "$MOUNTPOINT" -o "$MOUNT_OPTS"
;;
umount)
if grep -qs "$MOUNTPOINT" /proc/mounts; then
umount "$MOUNTPOINT"
fi
;;
esac
'';
})
];
# === Shell === # === Shell ===
programs.zsh = { programs.zsh = {
@ -63,12 +124,6 @@
users.defaultUserShell = pkgs.zsh; users.defaultUserShell = pkgs.zsh;
# === SSH === # === SSH ===
# === SSH Server ===
services.openssh = {
enable = true;
settings.PasswordAuthentication = false;
};
programs.ssh = { programs.ssh = {
startAgent = true; startAgent = true;
extraConfig = '' extraConfig = ''
@ -137,4 +192,9 @@
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
} }
# === SSH Server ===
services.openssh = {
enable = true;
settings.PasswordAuthentication = false;
openFirewall = true;
};