summaryrefslogtreecommitdiff
path: root/microvms/kanidm/kanidm.nix
diff options
context:
space:
mode:
authorGrisha Shipunov2026-08-02 11:07:55 +0000
committerGrisha Shipunov2026-08-02 12:47:54 +0000
commit36268a51b81bad88aedb40dac55582be945fc3ab (patch)
tree3406a86b600ed3572496f4f098b6616759ff2308 /microvms/kanidm/kanidm.nix
parentc6229f1835c0b7c02641de999f86423d1f288bce (diff)
kanidm: init
Diffstat (limited to 'microvms/kanidm/kanidm.nix')
-rw-r--r--microvms/kanidm/kanidm.nix68
1 files changed, 68 insertions, 0 deletions
diff --git a/microvms/kanidm/kanidm.nix b/microvms/kanidm/kanidm.nix
new file mode 100644
index 0000000..6844741
--- /dev/null
+++ b/microvms/kanidm/kanidm.nix
@@ -0,0 +1,68 @@
+{ pkgs, config, ... }:
+let
+ domain = "idm.oxapentane.com";
+ kanidm-ip = "10.89.88.20";
+ proxy-ip = "10.89.88.1";
+in
+{
+ # mythic beasts cert
+ sops.secrets = {
+ "mythicbeasts-acme/api-id" = { mode = "0400"; };
+ "mythicbeasts-acme/api-secret" = { mode = "0400"; };
+ };
+
+ security.acme = {
+ acceptTerms = true;
+
+ certs.${domain} = {
+ dnsProvider = "mythicbeasts";
+ credentialFiles = {
+ MYTHICBEASTS_USERNAME_FILE = config.sops.secrets."mythicbeasts-acme/api-id".path;
+ MYTHICBEASTS_PASSWORD_FILE = config.sops.secrets."mythicbeasts-acme/api-secret".path;
+ };
+ group = "kanidm";
+ reloadServices = [
+ "kanidm.service"
+ ];
+ };
+ };
+
+ # make sure cert exists before starting kanidm
+ systemd.services.kanidm = {
+ requires = [
+ "acme-${domain}.service"
+ ];
+ after = [
+ "acme-${domain}.service"
+ ];
+ };
+
+ services.kanidm = {
+ package = pkgs.kanidm_1_10;
+ server = {
+ enable = true;
+ settings = {
+ bindaddress = "${kanidm-ip}:8443";
+ domain = domain;
+ origin = "https://${domain}";
+ tls_chain = "/var/lib/acme/${domain}/fullchain.pem";
+ tls_key = "/var/lib/acme/${domain}/key.pem";
+ http_client_address_info = {
+ "x-forward-for" = [
+ proxy-ip
+ ];
+ };
+
+ online_backup = {
+ path = "/var/lib/kanidm/backups";
+ schedule = "00 03 * * *";
+ versions = 31;
+ };
+ };
+ };
+ client = {
+ enable = true;
+ settings.uri = "https://${domain}";
+ };
+ };
+}