diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2025-02-19 19:10:58 +0100 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2025-02-19 19:10:58 +0100 |
| commit | d05fb68b774b7011197c1c229e61809f642fcdd2 (patch) | |
| tree | fb7b81ab3ae8ea533b8c5fedf801b9a568bd183e /hosts/vidhar/hledger/default.nix | |
| parent | c0616edd38161b81ec1624efba3f024b120ba4c6 (diff) | |
| download | nixos-d05fb68b774b7011197c1c229e61809f642fcdd2.tar nixos-d05fb68b774b7011197c1c229e61809f642fcdd2.tar.gz nixos-d05fb68b774b7011197c1c229e61809f642fcdd2.tar.bz2 nixos-d05fb68b774b7011197c1c229e61809f642fcdd2.tar.xz nixos-d05fb68b774b7011197c1c229e61809f642fcdd2.zip | |
hledger
Diffstat (limited to 'hosts/vidhar/hledger/default.nix')
| -rw-r--r-- | hosts/vidhar/hledger/default.nix | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/hosts/vidhar/hledger/default.nix b/hosts/vidhar/hledger/default.nix new file mode 100644 index 00000000..ae080f66 --- /dev/null +++ b/hosts/vidhar/hledger/default.nix | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | { config, lib, pkgs, ... }: | ||
| 2 | { | ||
| 3 | config = { | ||
| 4 | services.hledger-web = { | ||
| 5 | enable = true; | ||
| 6 | allow = "view"; | ||
| 7 | stateDir = "/var/lib/hledger"; | ||
| 8 | journalFiles = lib.mkForce ["web.journal"]; | ||
| 9 | baseUrl = "https://hledger.yggdrasil.li"; | ||
| 10 | extraOptions = [ | ||
| 11 | "--socket=/run/hledger-web/http.sock" | ||
| 12 | ]; | ||
| 13 | }; | ||
| 14 | users = { | ||
| 15 | users.hledger.uid = 982; | ||
| 16 | groups.hledger.gid = 979; | ||
| 17 | }; | ||
| 18 | systemd.services.hledger-web = { | ||
| 19 | serviceConfig = { | ||
| 20 | UMask = "0002"; | ||
| 21 | ReadOnlyPaths = [ config.services.hledger-web.stateDir ]; | ||
| 22 | RuntimeDirectory = [ "hledger-web" ]; | ||
| 23 | PrivateDevices = true; | ||
| 24 | StateDirectory = "hledger"; | ||
| 25 | CapabilityBoundingSet = ""; | ||
| 26 | AmbientCapabilities = ""; | ||
| 27 | ProtectSystem = "strict"; | ||
| 28 | ProtectKernelTunables = true; | ||
| 29 | ProtectKernelModules = true; | ||
| 30 | ProtectControlGroups = true; | ||
| 31 | ProtectClock = true; | ||
| 32 | ProtectHostname = true; | ||
| 33 | ProtectHome = "tmpfs"; | ||
| 34 | ProtectKernelLogs = true; | ||
| 35 | ProtectProc = "invisible"; | ||
| 36 | ProcSubset = "pid"; | ||
| 37 | PrivateNetwork = false; | ||
| 38 | RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX"; | ||
| 39 | SystemCallArchitectures = "native"; | ||
| 40 | SystemCallFilter = [ | ||
| 41 | "@system-service @resources" | ||
| 42 | "~@obsolete @privileged" | ||
| 43 | ]; | ||
| 44 | RestrictSUIDSGID = true; | ||
| 45 | RemoveIPC = true; | ||
| 46 | NoNewPrivileges = true; | ||
| 47 | RestrictRealtime = true; | ||
| 48 | RestrictNamespaces = true; | ||
| 49 | LockPersonality = true; | ||
| 50 | PrivateUsers = true; | ||
| 51 | TemporaryFileSystem = [ "/var/lib/hledger/.cache:mode=0750,uid=${toString (config.users.users.hledger.uid)},gid=${toString (config.users.groups.hledger.gid)}" ]; | ||
| 52 | }; | ||
| 53 | }; | ||
| 54 | services.nginx = { | ||
| 55 | upstreams.hledger = { | ||
| 56 | servers = { "unix:/run/hledger-web/http.sock" = {}; }; | ||
| 57 | }; | ||
| 58 | virtualHosts."hledger.yggdrasil.li" = { | ||
| 59 | listen = [ | ||
| 60 | { addr = "[2a03:4000:52:ada:4:1::]"; port = 5000; } | ||
| 61 | ]; | ||
| 62 | extraConfig = '' | ||
| 63 | set_real_ip_from 2a03:4000:52:ada:4::; | ||
| 64 | auth_basic "hledger"; | ||
| 65 | auth_basic_user_file "/run/credentials/nginx.service/hledger_users"; | ||
| 66 | ''; | ||
| 67 | locations."/" = { | ||
| 68 | proxyPass = "http://hledger/"; | ||
| 69 | proxyWebsockets = true; | ||
| 70 | }; | ||
| 71 | }; | ||
| 72 | }; | ||
| 73 | systemd.services.nginx.serviceConfig = { | ||
| 74 | SupplementaryGroups = [ "hledger" ]; | ||
| 75 | LoadCredential = [ "hledger_users:${config.sops.secrets."hledger_users".path}" ]; | ||
| 76 | }; | ||
| 77 | sops.secrets."hledger_users" = { | ||
| 78 | format = "binary"; | ||
| 79 | sopsFile = ./htpasswd; | ||
| 80 | reloadUnits = [ "nginx.service" ]; | ||
| 81 | }; | ||
| 82 | }; | ||
| 83 | } | ||
