aboutsummaryrefslogtreecommitdiff
path: root/hosts/tower/web/idm.nix
diff options
context:
space:
mode:
authorIsabella Bastaja <isabella@sorre.xyz>2026-08-30 12:50:50 +0200
committerIsabella Bastaja <isabella@sorre.xyz>2026-08-30 17:13:19 +0200
commit83bf1be6c86f6d8ef506ba9d6046424f4ce18b69 (patch)
tree0c272a219063f4ea8e4ea0927dd51799d2b134cb /hosts/tower/web/idm.nix
parentd170b9258571efaa32ac1f623404c54f7d4d37d1 (diff)
tower: WIP kanidm service
Diffstat (limited to 'hosts/tower/web/idm.nix')
-rw-r--r--hosts/tower/web/idm.nix54
1 files changed, 54 insertions, 0 deletions
diff --git a/hosts/tower/web/idm.nix b/hosts/tower/web/idm.nix
new file mode 100644
index 0000000..8c93097
--- /dev/null
+++ b/hosts/tower/web/idm.nix
@@ -0,0 +1,54 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ inherit (lib)
+ mkIf
+ mkForce
+ ;
+
+ cfg = config.services.kanidm.server;
+ domainName = "idm.sorre.xyz";
+in
+{
+ security.acme."${domainName}" = {
+ group = "kanidm";
+ postRun = ''
+ cp --dereference --verbose {cert,key,chain}.pem /var/lib/kanidm/
+ chown kanidm:kanidm /var/lib/kanidm/{cert,key,chain}.pem
+ chmod 400 /var/lib/kanidm/{cert,key,chain}.pem
+ '';
+ reloadServices = [ "kanidm.service" ];
+ };
+
+ services.kanidm = {
+ package = pkgs.kanidm_1_11;
+ server = {
+ enable = false;
+ settings = {
+ version = "2";
+ role = "WriteReplica";
+ bindaddress = "127.0.0.1:8443";
+ domain = domainName;
+ origin = "https://${domainName}";
+ online_backup = {
+ path = "/var/lib/backups/kanidm";
+ # at 22:00 every day
+ schedule = "00 22 * * *";
+ versions = 5;
+ };
+
+ tls_chain = "/var/lib/kanidm/chain.pem";
+ tls_key = "/var/lib/kanidm/key.pem";
+ };
+ };
+ };
+
+ systemd.services.kanidm = mkIf cfg.enable {
+ # TODO: backups that aren't editable by the service itself
+ serviceConfig.StateDirectory = mkForce "kanidm backups/kanidm";
+ };
+}