aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sh12
-rw-r--r--modules/media/config.nix16
-rw-r--r--modules/media/default.nix28
-rw-r--r--modules/media/torrent.nix14
-rw-r--r--modules/network/default.nix11
-rw-r--r--modules/network/ssh.nix7
-rw-r--r--modules/users.nix9
-rw-r--r--notes.org18
-rw-r--r--settings.nix24
9 files changed, 85 insertions, 54 deletions
diff --git a/build.sh b/build.sh
index 93ae9c0..4ba3b7b 100755
--- a/build.sh
+++ b/build.sh
@@ -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";
+ };
+}