mirror of
https://github.com/nmasur/dotfiles
synced 2026-09-14 19:58:09 +00:00
feat(services): integrate api service for flame
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBaUWNy
|
||||
UGZPWkFhOS9nZ0N4bWY1S1FUc2pIVS95R2NLK2xLMWFmamNFNDBNCm5yQXhCNXM4
|
||||
cUtqbHdjcVRmTWUzd2JoeUtMWDQ3ZEtwcFdsSU9MSE1pcDQKLT4gc3NoLWVkMjU1
|
||||
MTkgWXlTVU1RIEtDMUo5cERoSHd0dm9jNCtMNDNWTkNXbTc2bjlPbUR4K0phSWdT
|
||||
QVR2bUEKY3Y0b29MbzVCSVN0UWhkcEtzN2pBT3A4OWhpeitGQjAvLzg1OUVRdENQ
|
||||
QQotPiBzc2gtZWQyNTUxOSBuanZYNUEgOWc0aXJtMWNKcXpUMEw4blJCSTZnVS9H
|
||||
YmVyVE13TG1qaTcrdThMRk94WQovNHl5ZHJrYlhRNDVQUkc5TXRKd1Y2TXRUb0p0
|
||||
NElrT1BzbWwwd2pFb1VvCi0+IHNzaC1lZDI1NTE5IENxSU9VQSB0RlpZVnAybFZk
|
||||
R0E1TTVSR3lxVmpqVnNPOHo2VG5xckdONllVcUZWRzFJCk1RUnhoUzBPc1h5cmdn
|
||||
MFdtSHRvU0xBRWllKy90dW9aV2NhVUVqaVpoVDgKLT4gc3NoLWVkMjU1MTkgejFP
|
||||
Y1p3IFY2RmJMOHo1V0U1K3FNeVBhdDVYUE5lYnFHV2ZqZm5Uek1waDhNeGIwaDQK
|
||||
UFJBcFdBb2hlOWxoTHIwdUtibjk2Q1E1emFJbVlxNDdLSzlqbWI1dm5XbwotLS0g
|
||||
RDV3bWVQUG95c2h4S0lJQlJ4dlNBYkVNb2sxTlUxc0tlQ2pzb04yVmhPcwpv4CRQ
|
||||
kRFkaF8/q1wY4JC7oD6VbJzZWpMsAUbQQWEs8QI9nI2HyqHB4yZ/dT8wSfoh7JPY
|
||||
fHIVqN25xXGTu7uR2S/8Iic=
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
@@ -0,0 +1,17 @@
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyA5Y0JT
|
||||
SjBqU1dEUVIwSXFBY3h3M3FDMFFpUTdSVmp6S3Y5QXYxK2Rjc2hrCll4UzN0RXVl
|
||||
a2s0ZkxOdDIxd05kVkdJZWJHQmQ3ZDNjeGRpWnVFQ1Jzd3cKLT4gc3NoLWVkMjU1
|
||||
MTkgWXlTVU1RIDJHS2JTM2R1NzNLSG12bC9yRURBYWx5K1N4d2VWUS8vU2NHamta
|
||||
amsvUlUKRy8wOWc0cStGN3M1RnpGc2Z0aCt3Y3JiU3dZd3I0V0sxOWdSSE5OUEVy
|
||||
QQotPiBzc2gtZWQyNTUxOSBuanZYNUEgSmJBbngwMVN3UHpvcHkxUjkvQ1FJaVdX
|
||||
MzZrVnZtS1VRQVRGWVJocnB6WQpvb01VZ2tleGh6VW9FRTJjN0EwMncyVWZ4WHpi
|
||||
WXRGZklZcHRkSDYyYmNZCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBKTE0xWlMzRTh0
|
||||
cEJjUU9NY0NiRWNGU1hvNzQ4clRQRTRJaU1VVzgrZDJZClluVXZiTHp6YUZxOWF3
|
||||
U0UzWkRIM0xicmw3Qzc5QnhjeGNKOWFGMnptc28KLT4gc3NoLWVkMjU1MTkgejFP
|
||||
Y1p3IFNkS01KbzhFcW9iS05OcVI2Szl3dXI5QTAvejdhRU1EbEhnQTcwRGo2MWcK
|
||||
V01MTmhoYlE5YnBvL21qT0tubXRTOGtDYno2Wjd6M2hlY3Z4UHBjQU9WbwotLS0g
|
||||
VWpndk84OHJSRVMwUFg4aUYwQmNVamIwN3BVL1dzcEV2LzZBODE5bmdoYwpg3LTS
|
||||
kiMJpjLJ12CGFqmMCjwWwiJHjsC8FM47Ptf2uRxjD1XsOq6MWKHYSI9KxzrgJdyY
|
||||
uxhU1m3Jfi5+7+oWX6BhfQA=
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBlZEhP
|
||||
b1ZUdTlROVAydktUNG9lRDVEejMxVmRtNjlhQ2V1NWMyblZFZHlJClczMHM4RXda
|
||||
TzYzOUFhWmxxUTF0bjJXWVJoSS9HaWZ6TFJ1dndWQXF6WWcKLT4gc3NoLWVkMjU1
|
||||
MTkgWXlTVU1RIGZuR28vNVFqLzUxUHJ4Nlc1c2h5ODNQQnh2bFZRU3hDS3VidERF
|
||||
T3htUmsKRjd6ZVZuTE1lN2hrOTJaaWQxdE01djl0QlJBVUNnRHlEQ3JMWmMxNkEw
|
||||
cwotPiBzc2gtZWQyNTUxOSBuanZYNUEgM3ZnOFd6REZNNkxXdW9NT2gzYkJ3ZUhm
|
||||
UlRjb3kxRnppN2M2UERLNUFrSQp0YWRBL3JXZWs5Zyt0RjRBS2JjUkJockE3Ti9m
|
||||
TzlNR1c4dFJYUzdRSzBNCi0+IHNzaC1lZDI1NTE5IENxSU9VQSA0SFRseGsxMnlI
|
||||
TzhueGZGS2VzMzVxcmNDZVdPZDYwQ0c4SjNhbWp5OUVJCkpnSXJiVVZiTHY5SDg2
|
||||
WnpmRDZQcHlOWnpySTZmUG9hTFdremp2MXEvRFUKLT4gc3NoLWVkMjU1MTkgejFP
|
||||
Y1p3IHhHWFk4ckt5UCtGM3VGaVljOGl3aFV1UDhCVm5PV0lqRGJRcGg0RHJGejgK
|
||||
NVR2cmFWTW9IYTRsT0V0VGs4VHBYY1BPM3A3bUY1enA2cVZhU0NTWXI2awotLS0g
|
||||
a1Q4SnBSWXJxREpuaEJtS2VJaTZiNmVWdFp1QXhUOFJRSVVUUEUrVFA2SQqmH3al
|
||||
3mHIyywuvc6U0lf0FheRGCp//BFORrAqo9bgJmUj/SsduvT1DNyJBGfi62k/8llH
|
||||
/oQmcYx8rTIbZzCkDHu18DCxJxiZahaIVV/pilQAtSZVfdq/pPnzCBaB1QMMOnWY
|
||||
cB/H5eQh
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
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" ];
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user