From c4c0faa6715b7e4a2f74816097f38321f74f5e3e Mon Sep 17 00:00:00 2001 From: rasmus-kirk Date: Thu, 29 Feb 2024 12:27:36 +0100 Subject: [PATCH] Working on cross-seed and updated the thanks --- README.md | 8 ++- mkDocs.nix | 8 +-- nixarr/transmission/cross-seed/default.nix | 75 ++++++++++++++++++++++ nixarr/transmission/default.nix | 53 +++++++++++---- pkgs/cross-seed/default.nix | 75 ++++++++++++++++++++++ 5 files changed, 200 insertions(+), 19 deletions(-) create mode 100644 nixarr/transmission/cross-seed/default.nix create mode 100644 pkgs/cross-seed/default.nix diff --git a/README.md b/README.md index ade44e9..894d1e8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +--- +title: Nixarr +--- + # Nixarr ![Logo](./docs/img/logo-2.png) @@ -238,8 +242,8 @@ you. However, this also means that you don't have to give _any_ personal data. ## Thanks A big thanks to [Maroka-chan](https://github.com/Maroka-chan) for the heavy -lifting on the VPN-submodule, that was integral to making this project -possible. +lifting on the [VPN-submodule](https://github.com/Maroka-chan/VPN-Confinement), +that was integral to making this project possible. I would also like to thank [Lasse](https://github.com/lassebomh) for helping out with the website. diff --git a/mkDocs.nix b/mkDocs.nix index 69c42a0..78af1c7 100644 --- a/mkDocs.nix +++ b/mkDocs.nix @@ -37,10 +37,10 @@ in pandoc \ --standalone \ - --highlight-style docs/pandoc/gruvbox.theme \ --metadata title="Nixarr - Option Documentation" \ - --template docs/pandoc/template.html \ --metadata date="$(date -u '+%Y-%m-%d - %H:%M:%S %Z')" \ + --highlight-style docs/pandoc/gruvbox.theme \ + --template docs/pandoc/template.html \ --css docs/pandoc/style.css \ --lua-filter docs/pandoc/lua/anchor-links.lua \ --lua-filter docs/pandoc/lua/code-default-to-nix.lua \ @@ -56,11 +56,11 @@ in "$tmpdir"/nixos.md pandoc \ + --metadata title="Nixarr" \ + --metadata date="$(date -u '+%Y-%m-%d - %H:%M:%S %Z')" \ --standalone \ --highlight-style docs/pandoc/gruvbox.theme \ --template docs/pandoc/template.html \ - --metadata date="$(date -u '+%Y-%m-%d - %H:%M:%S %Z')" \ - --metadata title="Nixarr" \ --css docs/pandoc/style.css \ -V lang=en \ -V --mathjax \ diff --git a/nixarr/transmission/cross-seed/default.nix b/nixarr/transmission/cross-seed/default.nix new file mode 100644 index 0000000..e7639b0 --- /dev/null +++ b/nixarr/transmission/cross-seed/default.nix @@ -0,0 +1,75 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.util-nixarr.services.prowlarr; + #settingsFormat = pkgs.formats.json {}; + #settingsFile = settingsFormat.generate "settings.json" cfg.settings; + cross-seedPkg = import ../../../pkgs/cross-seed { inherit (pkgs) stdenv lib fetchFromGitHub; }; +in { + options = { + util-nixarr.services.prowlarr = { + enable = mkEnableOption "cross-seed"; + + configFile = mkOption { + type = with types; nullOr path; + default = null; + example = "/var/lib/secrets/cross-seed/settings.js"; + description = ""; + }; + + dataDir = mkOption { + type = types.path; + default = "/var/lib/cross-seed"; + }; + + user = mkOption { + type = types.str; + default = "cross-seed"; + description = "User account under which cross-seed runs."; + }; + + group = mkOption { + type = types.str; + default = "cross-seed"; + description = "Group under which cross-seed runs."; + }; + }; + }; + + config = mkIf cfg.enable { + systemd.tmpfiles.rules = [ + "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -" + ]; + + systemd.services.prowlarr = { + description = "cross-seed"; + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + + environment.CONFIG_DIR = cfg.dataDir; + + serviceConfig = { + ExecStartPre = [("+" + pkgs.writeShellScript "transmission-prestart" '' + mv ${cfg.configFile} ${cfg.dataDir} + '')]; + Type = "simple"; + User = cfg.user; + Group = cfg.group; + ExecStart = "${getExe cross-seedPkg} daemon"; + Restart = "on-failure"; + }; + }; + + users.users = mkIf (cfg.user == "cross-seed") { + cross-seed = { + group = cfg.group; + }; + }; + + users.groups = mkIf (cfg.group == "cross-seed") {}; + }; +} diff --git a/nixarr/transmission/default.nix b/nixarr/transmission/default.nix index 9fcbcce..2415bce 100644 --- a/nixarr/transmission/default.nix +++ b/nixarr/transmission/default.nix @@ -41,18 +41,29 @@ in { flood.enable = mkEnableOption "the flood web-UI for the transmission web-UI."; - privateTrackers = mkOption { - type = types.bool; - default = false; - description = '' - Disable pex and dht, which is required for some private trackers. - - You don't want to enable this unless a private tracker requires you - to, and some don't. All torrents from private trackers are set as - "private", and this automatically disables dht and pex for that torrent, - so it shouldn't even be a necessary rule to have, but I don't make - their rules ¯\\_(ツ)_/¯. - ''; + privateTrackers = { + disableDhtPex = mkOption { + type = types.bool; + default = false; + description = '' + Disable pex and dht, which is required for some private trackers. + + You don't want to enable this unless a private tracker requires you + to, and some don't. All torrents from private trackers are set as + "private", and this automatically disables dht and pex for that torrent, + so it shouldn't even be a necessary rule to have, but I don't make + their rules ¯\\_(ツ)_/¯. + ''; + }; + cross-seed = { + enable = mkOption { + type = types.bool; + default = false; + description = '' + Enable the cross-seed service. + ''; + }; + }; }; messageLevel = mkOption { @@ -94,6 +105,10 @@ in { }; }; + imports = [ + ./cross-seed + ]; + config = mkIf cfg.enable { assertions = [ { @@ -103,6 +118,12 @@ in { nixarr.vpn.enable option to be set, but it was not. ''; } + { + assertion = cfg.privateTrackers.cross-seed.enable -> nixarr.prowlarr.enable; + message = '' + TODO: todo + ''; + } ]; systemd.tmpfiles.rules = [ @@ -150,7 +171,6 @@ in { anti-brute-force-enabled = true; anti-brute-force-threshold = 10; - # 0 = None, 1 = Critical, 2 = Error, 3 = Warn, 4 = Info, 5 = Debug, 6 = Trace message-level = if cfg.messageLevel == "none" then 0 @@ -171,6 +191,13 @@ in { // cfg.extraConfig; }; + services.cross-seed = mkIf cfg.cross-seed.enable { + enable = true; + group = "media"; + dataDir = cfg.privateTrackers.cross-seed.dataDir; + configFile = cfg.privateTrackers.cross-seed.configFile; + }; + util-nixarr.vpnnamespace = mkIf cfg.vpn.enable { portMappings = [ { diff --git a/pkgs/cross-seed/default.nix b/pkgs/cross-seed/default.nix new file mode 100644 index 0000000..b39f28a --- /dev/null +++ b/pkgs/cross-seed/default.nix @@ -0,0 +1,75 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.util-nixarr.services.prowlarr; + settingsFormat = pkgs.formats.json {}; + settingsFile = settingsFormat.generate "settings.json" cfg.settings; + cross-seedPkg = import ../../../pkgs/cross-seed { inherit (pkgs) stdenv lib fetchFromGitHub; }; +in { + options = { + util-nixarr.services.prowlarr = { + enable = mkEnableOption "cross-seed"; + + configFile = mkOption { + type = with types; nullOr path; + default = null; + example = "/var/lib/secrets/cross-seed/settings.json"; + description = ""; + }; + + dataDir = mkOption { + type = types.path; + default = "/var/lib/cross-seed"; + }; + + user = mkOption { + type = types.str; + default = "cross-seed"; + description = "User account under which cross-seed runs."; + }; + + group = mkOption { + type = types.str; + default = "cross-seed"; + description = "Group under which cross-seed runs."; + }; + }; + }; + + config = mkIf cfg.enable { + systemd.tmpfiles.rules = [ + "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -" + ]; + + systemd.services.prowlarr = { + description = "cross-seed"; + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + + environment.CONFIG_DIR = cfg.dataDir; + + serviceConfig = { + ExecStartPre = [("+" + pkgs.writeShellScript "transmission-prestart" '' + mv ${cfg.configFile} ${cfg.dataDir} + '')]; + Type = "simple"; + User = cfg.user; + Group = cfg.group; + ExecStart = "${getExe cross-seedPkg} daemon"; + Restart = "on-failure"; + }; + }; + + users.users = mkIf (cfg.user == "cross-seed") { + cross-seed = { + group = cfg.group; + }; + }; + + users.groups = mkIf (cfg.group == "cross-seed") {}; + }; +}