From 6a0072d081379923b6648b0f6ee7748efa73b249 Mon Sep 17 00:00:00 2001 From: Crony Akatsuki Date: Thu, 22 Jan 2026 19:56:50 +0100 Subject: [PATCH] feat: setup attic binary cache server. --- modules/servers/per-server/bragi/secrets.nix | 3 ++ .../per-server/bragi/services/attic.nix | 47 ++++++++++++++++++ secrets/attic-env.age | Bin 0 -> 5664 bytes secrets/secrets.nix | 1 + 4 files changed, 51 insertions(+) create mode 100644 modules/servers/per-server/bragi/services/attic.nix create mode 100644 secrets/attic-env.age diff --git a/modules/servers/per-server/bragi/secrets.nix b/modules/servers/per-server/bragi/secrets.nix index 06b7035..fb99c72 100644 --- a/modules/servers/per-server/bragi/secrets.nix +++ b/modules/servers/per-server/bragi/secrets.nix @@ -7,6 +7,9 @@ navidrome = { file = ../../../../secrets/navidrome.age; }; + attic-env = { + file = ../../../../secrets/attic-env.age; + }; }; }; } diff --git a/modules/servers/per-server/bragi/services/attic.nix b/modules/servers/per-server/bragi/services/attic.nix new file mode 100644 index 0000000..ce5ab84 --- /dev/null +++ b/modules/servers/per-server/bragi/services/attic.nix @@ -0,0 +1,47 @@ +{config, ...}: { + # imports = [inputs.attic.nixosModules.atticd]; + + services.atticd = { + enable = true; + + environmentFile = "${config.age.secrets.attic-env.path}"; + + settings = { + listen = "127.0.0.1:8484"; + + api-endpoint = "https://cache.cronyakatsuki.xyz/"; + + storage = { + type = "s3"; + region = "us-east-005"; + bucket = "76302220-b368-4328-b566-2a038235b314--attic"; + endpoint = "s3.us-east-005.backblazeb2.com"; + }; + + jwt = {}; + chunking = { + nar-size-threshold = 64 * 1024; # 64 KiB + min-size = 16 * 1024; # 16 KiB + avg-size = 64 * 1024; # 64 KiB + max-size = 256 * 1024; # 256 KiB + }; + }; + }; + + services.traefik.dynamicConfigOptions.http = { + services.attic.loadBalancer.servers = [ + { + url = "http://localhost:8484"; + } + ]; + + routers.attic = { + rule = "Host(`cache.cronyakatsuki.xyz`)"; + tls = { + certResolver = "porkbun"; + }; + service = "attic"; + entrypoints = "websecure"; + }; + }; +} diff --git a/secrets/attic-env.age b/secrets/attic-env.age new file mode 100644 index 0000000000000000000000000000000000000000..dc07492ad9d192d210b752c8a38da5887772a5ab GIT binary patch literal 5664 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