diff options
| -rwxr-xr-x | build.sh | 12 | ||||
| -rw-r--r-- | modules/media/config.nix | 16 | ||||
| -rw-r--r-- | modules/media/default.nix | 28 | ||||
| -rw-r--r-- | modules/media/torrent.nix | 14 | ||||
| -rw-r--r-- | modules/network/default.nix | 11 | ||||
| -rw-r--r-- | modules/network/ssh.nix | 7 | ||||
| -rw-r--r-- | modules/users.nix | 9 | ||||
| -rw-r--r-- | notes.org | 18 | ||||
| -rw-r--r-- | settings.nix | 24 |
9 files changed, 85 insertions, 54 deletions
@@ -2,21 +2,21 @@ set -euo pipefail getconfig() { - nix eval --impure --expr "(import ./config.private.nix)$@" | jq -r + nix eval --impure --expr "(import ./settings.nix { lib = (import <nixpkgs> {}).lib; })$@" | jq -r } -SSH_HOST="$(getconfig .ssh.host)" -SSH_PORT="$(getconfig .ssh.port)" +SSH_HOST="$(getconfig .network.host)" +SSH_PORT="$(getconfig .network.ports.ssh)" SSH_TARGET="bacchus@$SSH_HOST" SCRIPT_PATH="$(readlink -f "$0")" run_ssh() { ssh -t "$SSH_TARGET" -p "$SSH_PORT" "$@"; } -copy() { rsync -r -e "ssh -p $SSH_PORT" "$@"; } +copy() { rsync -ravh --delete --exclude '.git' -e "ssh -p $SSH_PORT" "$@"; } waittostart() { echo "Waiting..."; until timeout 2 nc -z "$SSH_HOST" "$SSH_PORT" 2> /dev/null; do echo -n '.'; - sleep 2 + sleep 1 done; echo -e "\nReady to connect"; } @@ -47,6 +47,8 @@ case "$cmd" in restart) restart && sleep 3 && waittostart ;; wait) waittostart ;; clean) run_ssh sudo nix-collect-garbage -d ;; + top) run_ssh btm ;; + fs) run_ssh lf ;; _) chaincmds "$@" ;; *) echo "Invalid cmd: $1" && exit 1 ;; esac diff --git a/modules/media/config.nix b/modules/media/config.nix deleted file mode 100644 index 0fb427e..0000000 --- a/modules/media/config.nix +++ /dev/null @@ -1,16 +0,0 @@ -rec { - mediaBaseDir = "/media"; - downloadsDir = "${mediaBaseDir}/_downloads"; - incompleteDownloadsDir = "${downloadsDir}/_incomplete"; - - tvDownloads = "${mediaBaseDir}/tv"; - moviesDownloads = "${mediaBaseDir}/movies"; - - radarrPort = 7878; - sonarrPort = 8989; - prowlarrPort = 9696; - jellyfinPort = 8096; - transmissionPort = 9091; - - group = "multimedia"; -} diff --git a/modules/media/default.nix b/modules/media/default.nix index c8b01a4..4c8edaa 100644 --- a/modules/media/default.nix +++ b/modules/media/default.nix @@ -1,25 +1,25 @@ -{ ... }: +{ lib, ... }: let - config = import ./config.nix; + settings = import ../../settings.nix { inherit lib; }; in { imports = [ ./torrent.nix ]; systemd.tmpfiles.rules = [ - "d ${config.mediaBaseDir} 0770 - ${config.group} - -" - "d ${config.downloadsDir} 0770 - ${config.group} - -" - "d ${config.tvDownloads} 0770 - ${config.group} - -" - "d ${config.moviesDownloads} 0770 - ${config.group} - -" + "d ${settings.media.baseDir} 0770 - ${settings.media.group} - -" + "d ${settings.media.downloadsDir} 0770 transmission ${settings.media.group} - -" + "d ${settings.media.tvDir} 0770 sonarr ${settings.media.group} - -" + "d ${settings.media.moviesDir} 0770 radarr ${settings.media.group} - -" ]; - users.groups."${config.group}" = { }; - users.users.bacchus.extraGroups = [ config.group ]; + users.groups."${settings.media.group}" = { }; + users.users.bacchus.extraGroups = [ settings.media.group ]; services.sonarr = { enable = true; openFirewall = true; - group = config.group; + group = settings.media.group; settings = { - server.port = config.sonarrPort; + server.port = settings.network.ports.sonarr; auth.enabled = false; }; }; @@ -27,9 +27,9 @@ in services.radarr = { enable = true; openFirewall = true; - group = config.group; + group = settings.media.group; settings = { - server.port = config.radarrPort; + server.port = settings.network.ports.radarr; auth.enabled = false; }; }; @@ -38,13 +38,13 @@ in enable = true; openFirewall = true; settings = { - server.port = config.prowlarrPort; + server.port = settings.network.ports.prowlarr; }; }; services.jellyfin = { enable = true; openFirewall = true; - group = config.group; + group = settings.media.group; }; } diff --git a/modules/media/torrent.nix b/modules/media/torrent.nix index 9fd0b96..cceb94d 100644 --- a/modules/media/torrent.nix +++ b/modules/media/torrent.nix @@ -1,6 +1,6 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: let - config = import ./config.nix; + settings = import ../../settings.nix { inherit lib; }; in { environment.systemPackages = with pkgs; [ @@ -9,10 +9,10 @@ in services.transmission = { enable = true; - group = config.group; + group = settings.media.group; openRPCPort = true; settings = { - "download-dir" = config.downloadsDir; + "download-dir" = settings.media.downloadsDir; "download-queue-enabled" = true; "download-queue-size" = 5; "peer-port" = 51413; @@ -21,9 +21,9 @@ in "prefetch-enabled" = true; "rename-partial-files" = true; "rpc-authentication-required" = false; - "rpc-bind-address" = "0.0.0.0"; + "rpc-bind-address" = if settings.network.exposeTransmissionRPC then "0.0.0.0" else "127.0.0.1"; "rpc-enabled" = true; - "rpc-port" = config.transmissionPort; + "rpc-port" = settings.network.ports.transmissionRPC; "rpc-whitelist-enabled" = false; "script-torrent-done-enabled" = false; "start-added-torrents" = true; @@ -34,6 +34,6 @@ in }; systemd.services.transmission.unitConfig = { - RequiresMountsFor = config.mediaBaseDir; + RequiresMountsFor = settings.media.baseDir; }; } diff --git a/modules/network/default.nix b/modules/network/default.nix index 6a3ab69..5a18f37 100644 --- a/modules/network/default.nix +++ b/modules/network/default.nix @@ -1,7 +1,8 @@ -{ ... }: +{ lib, ... }: let - private = import ../../config.private.nix; -in { + settings = import ../../settings.nix { inherit lib; }; +in +{ imports = [ ./ssh.nix ]; networking = { @@ -21,12 +22,12 @@ in { }; wifi = { mode = "infrastructure"; - ssid = private.wireless.ssid; + ssid = settings.network.wireless.ssid; }; wifi-security = { auth-alg = "open"; key-mgmt = "wpa-psk"; - psk = private.wireless.password; + psk = settings.network.wireless.password; }; }; }; diff --git a/modules/network/ssh.nix b/modules/network/ssh.nix index 573bdf4..f5564bd 100644 --- a/modules/network/ssh.nix +++ b/modules/network/ssh.nix @@ -1,11 +1,12 @@ { lib, ... }: let - private = import ../../config.private.nix; -in { + settings = import ../../settings.nix { inherit lib; }; +in +{ services.sshd.enable = true; # Auth - users.users.bacchus.openssh.authorizedKeys.keys = private.ssh.authorizedKeys; + users.users.bacchus.openssh.authorizedKeys.keys = settings.ssh.authorizedKeys; services.openssh.settings = { PermitRootLogin = "no"; PasswordAuthentication = false; diff --git a/modules/users.nix b/modules/users.nix index 0a08c2c..223a2f8 100644 --- a/modules/users.nix +++ b/modules/users.nix @@ -1,8 +1,9 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: let - private = import ../config.private.nix; -in { - users.users.root.password = private.passwords.root; + settings = import ../settings.nix { inherit lib; }; +in +{ + users.users.root.password = settings.passwords.root; users.users.bacchus = { isNormalUser = true; diff --git a/notes.org b/notes.org new file mode 100644 index 0000000..4086974 --- /dev/null +++ b/notes.org @@ -0,0 +1,18 @@ +** Current +- [ ] Home dashboard ([[https://github.com/tariqbuilds/linux-dash]]) +- [ ] Make autoconnect via networkmanager work consistently (higher frequency) +- [ ] DNS server (dnsmasq, bind, octodns, nsd, [[https://github.com/nix-community/dns.nix]]) + +** Later +- [ ] Syncthing +- [ ] Jellyfin library for photos (shared/private) +- [ ] NAS +- [ ] [[https://ntfy.sh]] +- [ ] Think of where to place the server + +** Maybe +- [ ] Git bare repos (pass/notes) +- [ ] Auto-updating +- [ ] Move mail? +- [ ] Expose dns via dynamic dns [[https://www.duckdns.org/]]? +- [ ] Move rss feed reader? diff --git a/settings.nix b/settings.nix new file mode 100644 index 0000000..92d3165 --- /dev/null +++ b/settings.nix @@ -0,0 +1,24 @@ +{ lib }: +let + privateSettings = import ./settings.private.nix; +in lib.recursiveUpdate privateSettings rec { + network = { + ports = { + ssh = 22; + radarr = 7878; + sonarr = 8989; + prowlarr = 9696; + jellyfin = 8096; + transmissionRPC = 9091; + }; + exposeTransmissionRPC = false; + }; + + media = { + baseDir = "/media"; + downloadsDir = "${media.baseDir}/_downloads"; + tvDir = "${media.baseDir}/tv"; + moviesDir = "${media.baseDir}/movies"; + group = "multimedia"; + }; +} |
