Add TrueNAS SMB mount (LAN + Tailscale fallback), SSH server, fix mountpoint dep
This commit is contained in:
parent
49de6db354
commit
125edddec7
1 changed files with 73 additions and 13 deletions
|
|
@ -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;
|
||||||
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue