mirror of
https://github.com/nmasur/dotfiles
synced 2026-09-14 09:28:11 +00:00
105 lines
2.8 KiB
Nix
105 lines
2.8 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
|
|
let
|
|
inherit (config.nmasur.settings) hostnames;
|
|
cfg = config.nmasur.presets.services.api;
|
|
in
|
|
|
|
{
|
|
|
|
options.nmasur.presets.services.api = {
|
|
enable = lib.mkEnableOption "API gateway and backend services";
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
services.api = {
|
|
enable = true;
|
|
hostname = hostnames.api;
|
|
backends.actual = {
|
|
enable = true;
|
|
actualServerUrl = "http://127.0.0.1:${builtins.toString config.nmasur.presets.services.actualbudget.port}";
|
|
apiKeysFile = config.secrets.api-actual-keys.dest;
|
|
serverPasswordFile = config.secrets.actualbudget-password.dest;
|
|
budgets = {
|
|
budget1 = {
|
|
syncIdFile = config.secrets.api-actual-budget1-sync-id.dest;
|
|
};
|
|
budget2 = {
|
|
syncIdFile = config.secrets.api-actual-budget2-sync-id.dest;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
secrets = {
|
|
api-actual-keys = {
|
|
source = ./api-actual-keys.age;
|
|
dest = "${config.secretsDirectory}/api-actual-keys";
|
|
owner = "api_actual";
|
|
group = "api_actual";
|
|
prefix = "API_KEYS=";
|
|
};
|
|
api-actual-budget1-sync-id = {
|
|
source = ./api-actual-budget1-sync-id.age;
|
|
dest = "${config.secretsDirectory}/api-actual-budget1-sync-id";
|
|
owner = "api_actual";
|
|
group = "api_actual";
|
|
prefix = "ACTUAL_SYNC_ID_BUDGET1=";
|
|
};
|
|
api-actual-budget2-sync-id = {
|
|
source = ./api-actual-budget2-sync-id.age;
|
|
dest = "${config.secretsDirectory}/api-actual-budget2-sync-id";
|
|
owner = "api_actual";
|
|
group = "api_actual";
|
|
prefix = "ACTUAL_SYNC_ID_BUDGET2=";
|
|
};
|
|
};
|
|
|
|
systemd.services.api-actual = {
|
|
after = [
|
|
"postgresql-setup.service"
|
|
"actual.service"
|
|
"api-actual-keys-secret.service"
|
|
"api-actual-budget1-sync-id-secret.service"
|
|
"api-actual-budget2-sync-id-secret.service"
|
|
"actualbudget-password-secret.service"
|
|
];
|
|
requires = [
|
|
"postgresql-setup.service"
|
|
"api-actual-keys-secret.service"
|
|
"api-actual-budget1-sync-id-secret.service"
|
|
"api-actual-budget2-sync-id-secret.service"
|
|
"actualbudget-password-secret.service"
|
|
];
|
|
};
|
|
|
|
# Postgres peer authentication for api_actual
|
|
services.postgresql.authentication = lib.mkAfter ''
|
|
local api_actual api_actual peer
|
|
'';
|
|
|
|
# Backup PostgreSQL database for api_actual
|
|
services.postgresqlBackup = {
|
|
enable = true;
|
|
databases = [ "api_actual" ];
|
|
};
|
|
|
|
# Allow web traffic to Caddy
|
|
nmasur.presets.services.caddy.routes = config.services.api.caddyRoutes;
|
|
|
|
# Configure Cloudflare DNS to point to this machine
|
|
services.cloudflare-dyndns.domains = [ hostnames.api ];
|
|
|
|
# Backups
|
|
services.restic.backups.default.paths = [ "/var/lib/api-actual" ];
|
|
|
|
};
|
|
|
|
}
|