{ pkgs, ... }: let spaceapidSrc = builtins.fetchGit { url = "https://git.hamburg.ccc.de/CCCHH/spaceapid.git"; ref = "main"; rev = "17753f535c68157e80f30f50deb488133cc98258"; }; spaceapid = pkgs.buildGoModule rec { pname = "spaceapid"; version = "main"; src = spaceapidSrc; ldflags = [ "-X main.version=${version}-${spaceapidSrc.rev}" ]; # 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},/run/secrets/spaceapid_config_ccchh_credentials"; User = "spaceapi"; Group = "spaceapi"; Restart = "on-failure"; StateDirectory = "spaceapid"; }; wantedBy = [ "multi-user.target" ]; }; sops.secrets."spaceapid_config_ccchh_credentials" = { mode = "0440"; owner = "spaceapi"; group = "spaceapi"; restartUnits = [ "spaceapid.service" ]; }; }