{ pkgs, ... }: let spaceapidSrc = builtins.fetchGit { url = "https://git.hamburg.ccc.de/CCCHH/spaceapid.git"; ref = "main"; rev = "cf9678d7126e1951f9e4aabaa30d7350eb76973b"; }; spaceapid = pkgs.buildGoModule { pname = "spaceapid"; version = "main"; src = spaceapidSrc; # Since spaceapid doesn't have any dependencies, we can set this to null and # use the nonexistend vendored dependencies. vendorHash = null; }; spaceapidConfigResponse = pkgs.writeText "spaceapid-config-ccchh-response.json" (builtins.readFile spaceapid-config/ccchh-response.json); spaceapidConfigDynamic = pkgs.writeText "spaceapid-config-ccchh-dynamic.json" (builtins.readFile spaceapid-config/ccchh-dynamic.json); in { users.users.spaceapi = { isSystemUser = true; group = "spaceapi"; }; users.groups.spaceapi = { }; systemd.services.spaceapid = { enable = true; description = "Daemon hosting the SpaceAPI"; unitConfig = { Wants = [ "network-online.target" ]; After = [ "network.target" "network-online.target" ]; }; serviceConfig = { ExecStart = "${spaceapid}/bin/spaceapid -c ${spaceapidConfigResponse},${spaceapidConfigDynamic},/secrets/spaceapid-config-ccchh-credentials.secret"; User = "spaceapi"; Group = "spaceapi"; Restart = "on-failure"; StateDirectory = "spaceapid"; }; wantedBy = [ "multi-user.target" ]; }; deployment.keys = { "spaceapid-config-ccchh-credentials.secret" = { keyCommand = [ "pass" "noc/vm-secrets/chaosknoten/public-web-static/spaceapid-config-ccchh-credentials" ]; destDir = "/secrets"; user = "spaceapi"; group = "spaceapi"; permissions = "0640"; uploadAt = "pre-activation"; }; }; }