aboutsummaryrefslogtreecommitdiff
path: root/modules/services/nixos
diff options
context:
space:
mode:
authorCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2026-02-23 15:09:58 -0600
committerCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2026-02-23 15:09:58 -0600
commitd2747292dff98c64b974bdfe6b46bc62252298de (patch)
treeeec31506ba7e7b66888b4b05cb7d9fe720a2e42d /modules/services/nixos
parent66232d31d1f115a796dc76a9f6df88a6b13c424e (diff)
clean up services
Diffstat (limited to 'modules/services/nixos')
-rw-r--r--modules/services/nixos/cgit/default.nix82
-rw-r--r--modules/services/nixos/cgit/gitShellCommands.nix43
-rw-r--r--modules/services/nixos/default.nix15
-rw-r--r--modules/services/nixos/goaccess.nix17
-rw-r--r--modules/services/nixos/mkCaddyCfg.nix17
-rw-r--r--modules/services/nixos/qbittorrent.nix24
6 files changed, 113 insertions, 85 deletions
diff --git a/modules/services/nixos/cgit/default.nix b/modules/services/nixos/cgit/default.nix
index 0f81958..b35a631 100644
--- a/modules/services/nixos/cgit/default.nix
+++ b/modules/services/nixos/cgit/default.nix
@@ -5,9 +5,26 @@
...
}: let
cfg = config.collinux.services.cgit;
+
+ custom_cgit = pkgs.stdenv.mkDerivation {
+ name = "custom-cgit-assets";
+ src = pkgs.cgit;
+ installPhase = ''
+ mkdir -p $out
+ cp -pPR ./cgit/* $out/
+
+ rm -f $out/cgit.png $out/favicon.ico $out/cgit.css
+ cp -f ${./favicon.svg} $out/favicon.svg
+ cp -f ${./cgit.css} $out/cgit.css
+ '';
+ };
in {
+ imports = [
+ (import ../mkCaddyCfg.nix cfg)
+ ./gitShellCommands.nix
+ ];
+
config = lib.mkIf cfg.enable {
- environment.shells = ["${pkgs.git}/bin/git-shell"];
users.groups."git" = {};
users.users."git" = {
isSystemUser = true;
@@ -20,47 +37,6 @@ in {
openssh.authorizedKeys.keys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC3SjzIs3YI8PWJaNrAuaEeRcTcvIVHOKyCh2VwHTHEF"];
};
- hjem.users."git".files = {
- "git-shell-commands/set-description" = {
- executable = true;
- text = ''
- #!/usr/bin/env bash
- set -euo pipefail
- repo="$1"
- desc="$2"
- base="/var/lib/cgit"
- repo_path="$base/$repo"
-
- test -d "$repo_path" || { echo "Repository does not exist"; exit 1; }
-
- # Prevent path traversal
- real=$(realpath "$repo_path")
- if [[ "$real" != "$base/"* ]]; then
- echo "Invalid path"
- exit 1
- fi
-
- echo "$desc" | head -n 1 > "$repo_path/description"
-
- echo "Description updated for '$repo'"
- '';
- };
- "git-shell-commands/create-repo" = {
- executable = true;
- text = ''
- #!/usr/bin/env bash
- set -euo pipefail
- repo="$1"
- base="/var/lib/cgit"
- repo_path="$base/$repo"
-
- test -d "$repo_path" && { echo "Repository already exists."; exit 1; }
-
- git init --bare "$repo_path"
- echo "Repository '$repo' created"
- '';
- };
- };
services.openssh.extraConfig = lib.mkAfter ''
Match User git
@@ -84,8 +60,8 @@ in {
root-desc=Git repos associated with Ganymede
readme=:README.md
- about-filter=${pkgs.cgit}/lib/cgit/filters/html-converters/md2html
- source-filter=${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py
+ about-filter=${custom_cgit}/lib/cgit/filters/html-converters/md2html
+ source-filter=${custom_cgit}/lib/cgit/filters/syntax-highlighting.py
footer=
virtual-root=/
@@ -106,23 +82,7 @@ in {
};
};
- networking.extraHosts = "127.0.0.1 git.ganymede";
- services.caddy.virtualHosts."git.ganymede".extraConfig = let
- custom_cgit = pkgs.stdenv.mkDerivation {
- name = "custom-cgit-assets";
- src = pkgs.cgit;
- installPhase = ''
- mkdir -p $out
- cp -pPR ./cgit/* $out/
-
- rm -f $out/cgit.png $out/favicon.ico $out/cgit.css
- cp -f ${./favicon.svg} $out/favicon.svg
- cp -f ${./cgit.css} $out/cgit.css
- '';
- };
- in ''
- tls internal
-
+ collinux.services.cgit.manualCaddyConfig = ''
@assets path /cgit.css /cgit.js /favicon.svg /robots.txt
handle @assets {
root * ${custom_cgit}
diff --git a/modules/services/nixos/cgit/gitShellCommands.nix b/modules/services/nixos/cgit/gitShellCommands.nix
new file mode 100644
index 0000000..e99f9f2
--- /dev/null
+++ b/modules/services/nixos/cgit/gitShellCommands.nix
@@ -0,0 +1,43 @@
+{
+ hjem.users."git".files = {
+ "git-shell-commands/set-description" = {
+ executable = true;
+ text = ''
+ #!/usr/bin/env bash
+ set -euo pipefail
+ repo="$1"
+ desc="$2"
+ base="/var/lib/cgit"
+ repo_path="$base/$repo"
+
+ test -d "$repo_path" || { echo "Repository does not exist"; exit 1; }
+
+ # Prevent path traversal
+ real=$(realpath "$repo_path")
+ if [[ "$real" != "$base/"* ]]; then
+ echo "Invalid path"
+ exit 1
+ fi
+
+ echo "$desc" | head -n 1 > "$repo_path/description"
+
+ echo "Description updated for '$repo'"
+ '';
+ };
+ "git-shell-commands/create-repo" = {
+ executable = true;
+ text = ''
+ #!/usr/bin/env bash
+ set -euo pipefail
+ repo="$1"
+ base="/var/lib/cgit"
+ repo_path="$base/$repo"
+
+ test -d "$repo_path" && { echo "Repository already exists."; exit 1; }
+
+ git init --bare "$repo_path"
+ echo "Repository '$repo' created"
+ '';
+ };
+ };
+}
diff --git a/modules/services/nixos/default.nix b/modules/services/nixos/default.nix
index 44d0d7f..a46eb27 100644
--- a/modules/services/nixos/default.nix
+++ b/modules/services/nixos/default.nix
@@ -1,15 +1,16 @@
{
imports = [
- # ./mopidy.nix
- ./forgejo.nix
- ./cgit
- ./openssh.nix
- # ./jellyfin.nix
- ./polaris.nix
./caddy.nix
+ ./openssh.nix
+
+ ./forgejo.nix
./goaccess.nix
+ ./cgit
+ ./polaris.nix
+ # ./mopidy.nix
+ # ./jellyfin.nix
./copyparty.nix
- # ./ngircd.nix
+ ./qbittorrent.nix
];
}
diff --git a/modules/services/nixos/goaccess.nix b/modules/services/nixos/goaccess.nix
index 47dbbfa..19b003f 100644
--- a/modules/services/nixos/goaccess.nix
+++ b/modules/services/nixos/goaccess.nix
@@ -16,9 +16,14 @@
log-format = "CADDY";
tz = "America/Chicago";
- ws-url = "wss://stats.ganymede:443/ws"; # url that the html uses to fetch from
+ ws-url =
+ if cfg.publicUrl != null
+ then "wss://${cfg.publicUrl}:443/ws"
+ else if cfg.privateUrl != null
+ then "wss://${cfg.privateUrl}:443/ws"
+ else null;
port = "7890";
- addr = "127.0.0.1";
+ addr = cfg.listenAddr;
real-time-html = "true";
log-file = "/var/log/caddy/access-williamsfam.us.com.log";
@@ -119,15 +124,9 @@ in {
systemd.tmpfiles.rules = [
"d /var/www/goaccess/ 755 goaccess goaccess"
- "Z /var/www/goaccess 755 goaccess goaccess"
];
- networking.extraHosts = ''
- 127.0.0.1 stats.ganymede
- '';
-
- services.caddy.virtualHosts."stats.ganymede".extraConfig = ''
- tls internal
+ collinux.services.goaccess.manualCaddyConfig = ''
root * /var/www/goaccess
file_server
diff --git a/modules/services/nixos/mkCaddyCfg.nix b/modules/services/nixos/mkCaddyCfg.nix
index 770b4d0..02b9a0a 100644
--- a/modules/services/nixos/mkCaddyCfg.nix
+++ b/modules/services/nixos/mkCaddyCfg.nix
@@ -1,18 +1,19 @@
-cfg: {
+cfg: let
+ caddyConfig =
+ if cfg ? reverseProxy && cfg.reverseProxy == true
+ then ''reverse_proxy ${cfg.listenAddr}:${toString cfg.port}''
+ else cfg.manualCaddyConfig;
+in {
networking.extraHosts =
if cfg.privateUrl != null
- then ''
- 127.0.0.1 ${cfg.privateUrl}
- ''
+ then "127.0.0.1 ${cfg.privateUrl}"
else "";
services.caddy.virtualHosts =
(
if cfg.publicUrl != null
then {
- ${cfg.publicUrl}.extraConfig = ''
- reverse_proxy ${cfg.listenAddr}:${toString cfg.port}
- '';
+ ${cfg.publicUrl}.extraConfig = caddyConfig;
}
else {}
)
@@ -21,7 +22,7 @@ cfg: {
then {
"${cfg.privateUrl}".extraConfig = ''
tls internal
- reverse_proxy ${cfg.listenAddr}:${toString cfg.port}
+ ${caddyConfig}
'';
}
else {}
diff --git a/modules/services/nixos/qbittorrent.nix b/modules/services/nixos/qbittorrent.nix
new file mode 100644
index 0000000..af3cdbc
--- /dev/null
+++ b/modules/services/nixos/qbittorrent.nix
@@ -0,0 +1,24 @@
+{
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.services.qbittorrent;
+in {
+ imports = [
+ (import ./mkCaddyCfg.nix cfg)
+ ];
+
+ config = lib.mkIf cfg.enable {
+ users.users."qbittorrent".extraGroups = ["fileserver"]; # torrent files go to /media/library
+
+ networking.firewall.allowedTCPPorts = [6882];
+ networking.firewall.allowedUDPPorts = [6882];
+
+ services.qbittorrent = {
+ enable = true;
+ webuiPort = cfg.port;
+ torrentingPort = 6882;
+ };
+ };
+}