{ config, lib, ... }: { # The OIDC secret is consumed by both Dex's privileged start-pre step and # the headscale service. Root can read it for Dex; headscale must own the # runtime copy for its direct client_secret_path read. age.secrets.oidcHeadscale.owner = lib.mkForce "headscale"; age.secrets.oidcHeadscale.mode = lib.mkForce "400"; age.secrets.traefik.owner = lib.mkForce "root"; # Seit der Reduktion am 12.09.2026 (docs/pinix-minimalbetrieb.md) gilt das # auch für diese vier: global mit Besitzern deklariert, deren Dienste hier # nicht mehr laufen. Ohne mkForce scheitert agenixChown mit # "chown: invalid user". age.secrets.webdav.owner = lib.mkForce "root"; age.secrets.oidcGTS.owner = lib.mkForce "root"; age.secrets.oidcGTSEnv.owner = lib.mkForce "root"; age.secrets.bindPW.owner = lib.mkForce "root"; # radicale/calendar ist seit 12.09.2026 aus, der Gruppenname existiert # darum nicht mehr -- root-owned lassen, sonst scheitert die Aktivierung. # lldapAdmin selbst liest hier seit 13.09.2026 niemand mehr: pinix' LLDAP # und Dex nutzen ihr eigenes pinixLldapAdmin-Secret (siehe unten). age.secrets.lldapAdmin.owner = lib.mkForce "root"; age.secrets.lldapAdmin.mode = lib.mkForce "400"; # Eigenes Admin-Passwort fuer pinix' separate LLDAP-Instanz (lldap.nix, # dex.nix) -- unabhaengig vom mit blunix geteilten lldapAdmin. Root-owned, # aus demselben Grund wie oben: LoadCredential/das Env-Skript laufen als # root, bevor die jeweiligen Dienste ihre Rechte abgeben. age.secrets.pinixLldapAdmin = { file = ../../../secrets/pinixLldapAdmin.age; owner = "root"; mode = "400"; }; # finance-agent-worker (runs as drone) reads this for read-only IMAP # access -- see hosts/pinix/localServices/finance-agent.nix. Global # default owner is "builder" (home/tnix's mail setup), which doesn't # exist as a pinix user. age.secrets.mailPW.owner = lib.mkForce "drone"; # Vikunja receives this root-owned file through systemd credentials. age.secrets.oidcVikunja.file = ../../../secrets/oidcVikunja.age; # prosody läuft auf blunix; der pinix-Nutzer existiert nicht mehr. # age.secrets.motd = { # file = ../../../secrets/motd.age; # name = "motd.cfg.lua"; # owner = "prosody"; # }; age.secrets.headscalePreAuthKey = { file = ../../../secrets/headscalePreAuthKey.age; owner = "drone"; }; age.secrets.pinixHeadscalePreAuthKey = { file = ../../../secrets/pinixHeadscalePreAuthKey.age; owner = "root"; mode = "400"; }; age.secrets.wirelessSecretsFile = { file = ../../../secrets/wirelessSecretsFile.age; owner = "drone"; }; age.secrets.financeXmpp = { file = ../../../secrets/financeXmpp.age; owner = "drone"; }; # radio.nix ist aus, icecast-radio existiert nicht mehr. # age.secrets.icecastPw = { # file = ../../../secrets/icecastPw.age; # owner = "icecast-radio"; # }; # TSIG-Schluessel fuer die ACME-DNS-01-Challenge gegen das lokale BIND. # Environment-Form, damit Traefik sie direkt als EnvironmentFile nutzt und # bind.nix daraus BINDs key-Syntax rendert. Root-eigen: beide Leser holen # sie ueber systemd, bevor Rechte abgegeben werden. age.secrets.bindAcmeTsig.file = ../../../secrets/bindAcmeTsig.age; }