autobrr: init at 1.57.0 (#287593)

This commit is contained in:
Arne Keller
2025-01-17 09:55:33 +01:00
committed by GitHub
7 changed files with 216 additions and 0 deletions
+6
View File
@@ -2333,6 +2333,12 @@
githubId = 59499799;
keys = [ { fingerprint = "A0FF 4F26 6B80 0B86 726D EA5B 3C23 C7BD 9945 2036"; } ];
};
av-gal = {
email = "alex.v.galvin@gmail.com";
github = "av-gal";
githubId = 32237198;
name = "Alex Galvin";
};
avh4 = {
email = "gruen0aermel@gmail.com";
github = "avh4";
@@ -77,6 +77,8 @@
- [Whoogle Search](https://github.com/benbusby/whoogle-search), a self-hosted, ad-free, privacy-respecting metasearch engine. Available as [services.whoogle-search](options.html#opt-services.whoogle-search.enable).
- [autobrr](https://autobrr.com), a modern download automation tool for torrents and usenets. Available as [services.autobrr](#opt-services.autobrr.enable).
- [agorakit](https://github.com/agorakit/agorakit), an organization tool for citizens' collectives. Available with [services.agorakit](options.html#opt-services.agorakit.enable).
- [vivid](https://github.com/sharkdp/vivid), a generator for LS_COLOR. Available as [programs.vivid](#opt-programs.vivid.enable).
+1
View File
@@ -747,6 +747,7 @@
./services/misc/anki-sync-server.nix
./services/misc/apache-kafka.nix
./services/misc/atuin.nix
./services/misc/autobrr.nix
./services/misc/autofs.nix
./services/misc/autorandr.nix
./services/misc/autosuspend.nix
+85
View File
@@ -0,0 +1,85 @@
{
config,
pkgs,
lib,
...
}:
let
cfg = config.services.autobrr;
configFormat = pkgs.formats.toml { };
configTemplate = configFormat.generate "autobrr.toml" cfg.settings;
templaterCmd = "${lib.getExe pkgs.dasel} put -f '${configTemplate}' -v $(cat ${cfg.secretFile}) -o %S/autobrr/config.toml 'sessionSecret'";
in
{
options = {
services.autobrr = {
enable = lib.mkEnableOption "Autobrr";
openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Open ports in the firewall for the Autobrr web interface.";
};
secretFile = lib.mkOption {
type = lib.types.path;
description = "File containing the session secret for the Autobrr web interface.";
};
settings = lib.mkOption {
type = lib.types.submodule { freeformType = configFormat.type; };
default = {
host = "127.0.0.1";
port = "7474";
checkForUpdates = true;
};
example = {
logLevel = "DEBUG";
};
description = ''
Autobrr configuration options.
Refer to <https://autobrr.com/configuration/autobrr>
for a full list.
'';
};
package = lib.mkPackageOption pkgs "autobrr" { };
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = !(cfg.settings ? sessionSecret);
message = ''
Session secrets should not be passed via settings, as
these are stored in the world-readable nix store.
Use the secretFile option instead.'';
}
];
systemd.services.autobrr = {
description = "Autobrr";
after = [
"syslog.target"
"network-online.target"
];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
DynamicUser = true;
StateDirectory = "autobrr";
ExecStartPre = "${lib.getExe pkgs.bash} -c '${templaterCmd}'";
ExecStart = "${lib.getExe pkgs.autobrr} --config %S/autobrr";
Restart = "on-failure";
};
};
networking.firewall = lib.mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.settings.port ]; };
};
}
+1
View File
@@ -144,6 +144,7 @@ in {
auth-mysql = handleTest ./auth-mysql.nix {};
authelia = handleTest ./authelia.nix {};
auto-cpufreq = handleTest ./auto-cpufreq.nix {};
autobrr = handleTest ./autobrr.nix {};
avahi = handleTest ./avahi.nix {};
avahi-with-resolved = handleTest ./avahi.nix { networkd = true; };
ayatana-indicators = runTest ./ayatana-indicators.nix;
+25
View File
@@ -0,0 +1,25 @@
import ./make-test-python.nix (
{ lib, ... }:
{
name = "autobrr";
meta.maintainers = with lib.maintainers; [ av-gal ];
nodes.machine =
{ pkgs, ... }:
{
services.autobrr = {
enable = true;
# We create this secret in the Nix store (making it readable by everyone).
# DO NOT DO THIS OUTSIDE OF TESTS!!
secretFile = pkgs.writeText "session_secret" "not-secret";
};
};
testScript = ''
machine.wait_for_unit("autobrr.service")
machine.wait_for_open_port(7474)
machine.succeed("curl --fail http://localhost:7474/")
'';
}
)
+96
View File
@@ -0,0 +1,96 @@
{
lib,
buildGoModule,
fetchFromGitHub,
stdenvNoCC,
nix-update-script,
nodejs,
pnpm_9,
typescript,
versionCheckHook,
}:
let
pname = "autobrr";
version = "1.57.0";
src = fetchFromGitHub {
owner = "autobrr";
repo = "autobrr";
tag = "v${version}";
hash = "sha256-RVkeSrL3ZfEz+oCICi8JFJ6AaOBBumi5mnnQYE5Gjt8=";
};
autobrr-web = stdenvNoCC.mkDerivation {
pname = "${pname}-web";
inherit src version;
nativeBuildInputs = [
nodejs
pnpm_9.configHook
typescript
];
sourceRoot = "${src.name}/web";
pnpmDeps = pnpm_9.fetchDeps {
inherit (autobrr-web)
pname
version
src
sourceRoot
;
hash = "sha256-mABHRuZfjq9qNanfGGv+xDhs3bSufaWRecJypic8SWo=";
};
postBuild = ''
pnpm run build
'';
installPhase = ''
cp -r dist $out
'';
};
in
buildGoModule rec {
inherit
autobrr-web
pname
version
src
;
vendorHash = "sha256-rCtUE2/IwR6AnXQNgeH0TQ0BL7g6vi9L128xP0PwOXc=";
preBuild = ''
cp -r ${autobrr-web}/* web/dist
'';
ldflags = [
"-X main.version=${version}"
"-X main.commit=${src.tag}"
];
doInstallCheck = true;
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgram = "${placeholder "out"}/bin/autobrrctl";
versionCheckProgramArg = "version";
passthru.updateScript = nix-update-script {
extraArgs = [
"--subpackage"
"autobrr-web"
];
};
meta = {
description = "Modern, easy to use download automation for torrents and usenet";
license = lib.licenses.gpl2Plus;
homepage = "https://autobrr.com/";
changelog = "https://autobrr.com/release-notes/v${version}";
maintainers = with lib.maintainers; [ av-gal ];
mainProgram = "autobrr";
platforms = with lib.platforms; darwin ++ freebsd ++ linux;
};
}