1 { config, lib, name, ... }:
7 base = mkOption { description = "Base of the LDAP tree"; type = str; };
8 host = mkOption { description = "Host to access LDAP"; type = str; };
9 root_dn = mkOption { description = "DN of the root user"; type = str; };
10 root_pw = mkOption { description = "Hashed password of the root user"; type = str; };
11 replication_dn = mkOption { description = "DN of the user allowed to replicate the LDAP directory"; type = str; };
12 replication_pw = mkOption { description = "Password of the user allowed to replicate the LDAP directory"; type = str; };
14 mkLdapOptions = name: more: mkOption {
15 description = "${name} LDAP configuration";
17 options = ldapOptions // {
18 dn = mkOption { description = "DN of the ${name} user"; type = str; };
19 password = mkOption { description = "password of the ${name} user"; type = str; };
20 filter = mkOption { description = "Filter for ${name} users"; type = str; default = ""; };
25 host = mkOption { description = "Host to access Mysql"; type = str; };
26 remoteHost = mkOption { description = "Host to access Mysql from outside"; type = str; };
27 port = mkOption { description = "Port to access Mysql"; type = str; };
28 socket = mkOption { description = "Socket to access Mysql"; type = path; };
29 systemUsers = mkOption {
30 description = "Attrs of user-passwords allowed to access mysql";
34 description = "PAM configuration for mysql";
37 dn = mkOption { description = "DN to connect as to check users"; type = str; };
38 password = mkOption { description = "DN password to connect as to check users"; type = str; };
39 filter = mkOption { description = "filter to match users"; type = str; };
44 mkMysqlOptions = name: more: mkOption {
45 description = "${name} mysql configuration";
47 options = mysqlOptions // {
48 database = mkOption { description = "${name} database"; type = str; };
49 user = mkOption { description = "${name} user"; type = str; };
50 password = mkOption { description = "mysql password of the ${name} user"; type = str; };
55 host = mkOption { description = "Host to access Postgresql"; type = str; };
56 port = mkOption { description = "Port to access Postgresql"; type = str; };
57 socket = mkOption { description = "Socket to access Postgresql"; type = path; };
59 description = "PAM configuration for psql";
62 dn = mkOption { description = "DN to connect as to check users"; type = str; };
63 password = mkOption { description = "DN password to connect as to check users"; type = str; };
64 filter = mkOption { description = "filter to match users"; type = str; };
69 mkPsqlOptions = name: mkOption {
70 description = "${name} psql configuration";
72 options = psqlOptions // {
73 database = mkOption { description = "${name} database"; type = str; };
74 schema = mkOption { description = "${name} schema"; type = nullOr str; default = null; };
75 user = mkOption { description = "${name} user"; type = str; };
76 password = mkOption { description = "psql password of the ${name} user"; type = str; };
81 host = mkOption { description = "Host to access Redis"; type = str; };
82 port = mkOption { description = "Port to access Redis"; type = str; };
83 socket = mkOption { description = "Socket to access Redis"; type = path; };
85 description = "Attrs of db number. Each number should be unique to avoid collision!";
88 spiped_key = mkOption {
91 Key to use with spiped to make a secure channel to replication
95 description = "Predixy configuration. Unused yet";
98 read = mkOption { type = str; description = "Read password"; };
103 mkRedisOptions = name: mkOption {
104 description = "${name} redis configuration";
106 options = redisOptions // {
107 db = mkOption { description = "${name} database"; type = str; };
112 host = mkOption { description = "Host to access SMTP"; type = str; };
113 port = mkOption { description = "Port to access SMTP"; type = str; };
115 mkSmtpOptions = name: mkOption {
116 description = "${name} smtp configuration";
118 options = smtpOptions // {
119 email = mkOption { description = "${name} email"; type = str; };
120 password = mkOption { description = "SMTP password of the ${name} user"; type = str; };
124 hostEnv = submodule {
127 description = "Host FQDN";
134 Sublist of users from realUsers. Function that takes pkgs as
135 argument and gives an array as a result
140 description = "List of e-mails that the server can be a sender of";
145 LDAP credentials for the host
149 password = mkOption { type = str; description = "Password for the LDAP connection"; };
150 dn = mkOption { type = str; description = "DN for the LDAP connection"; };
155 description = "subdomain and priority for MX server";
156 default = { enable = false; };
159 enable = mkEnableOption "Enable MX";
160 subdomain = mkOption { type = nullOr str; description = "Subdomain name (mx-*)"; };
161 priority = mkOption { type = nullOr str; description = "Priority"; };
167 attrs of ip4/ip6 grouped by section
169 type = attrsOf (submodule {
175 ip4 addresses of the host
182 ip6 addresses of the host
195 Attrs of servers information in the cluster (not necessarily handled by nixops)
198 type = attrsOf hostEnv;
200 hetznerCloud = mkOption {
202 Hetzner Cloud credential information
206 authToken = mkOption {
217 Hetzner credential information
221 user = mkOption { type = str; description = "User"; };
222 pass = mkOption { type = str; description = "Password"; };
228 sshd service credential information
232 rootKeys = mkOption { type = attrsOf str; description = "Keys of root users"; };
235 LDAP credentials for cn=ssh,ou=services,dc=immae,dc=eu dn
239 password = mkOption { description = "Password"; type = str; };
248 non-standard reserved ports. Must be unique!
253 noDupl = x: builtins.length (builtins.attrValues x) == builtins.length (unique (builtins.attrValues x));
255 x: if isAttrs x && noDupl x then x else throw "Non unique values for ports";
259 httpd service credential information
265 LDAP credentials for cn=httpd,ou=services,dc=immae,dc=eu dn
269 password = mkOption { description = "Password"; type = str; };
277 type = submodule { options = smtpOptions; };
278 description = "SMTP configuration";
282 LDAP server configuration
285 options = ldapOptions;
288 databases = mkOption {
289 description = "Databases configuration";
293 type = submodule { options = mysqlOptions; };
294 description = "Mysql configuration";
297 type = submodule { options = redisOptions; };
298 description = "Redis configuration";
300 postgresql = mkOption {
301 type = submodule { options = psqlOptions; };
302 description = "Postgresql configuration";
308 description = "Jabber configuration";
311 postfix_user_filter = mkOption { type = str; description = "Postfix filter to get xmpp users"; };
312 ldap = mkLdapOptions "Jabber" {};
313 postgresql = mkPsqlOptions "Jabber";
317 realUsers = mkOption {
319 Attrset of function taking pkgs as argument.
320 Real users settings, should provide a subattr of users.users.<name>
321 with at least: name, (hashed)Password, shell
323 type = attrsOf unspecified;
326 description = "System and regular users uid/gid";
327 type = attrsOf (submodule {
330 description = "user uid";
334 description = "user gid";
341 description = "DNS configuration";
345 description = "SOA information";
349 description = "Serial number. Should be incremented at each change and unique";
353 description = "Refresh time";
357 description = "Retry time";
361 description = "Expire time";
365 description = "Default TTL time";
369 description = "hostmaster e-mail";
373 description = "Primary NS";
380 description = "Attrs of NS servers group";
383 "ns1.foo.com" = [ "198.51.100.10" "2001:db8:abcd::1" ];
384 "ns2.foo.com" = [ "198.51.100.15" "2001:db8:1234::1" ];
387 type = attrsOf (attrsOf (listOf str));
391 description = "DNS keys";
392 type = attrsOf (submodule {
394 algorithm = mkOption { type = str; description = "Algorithm"; };
395 secret = mkOption { type = str; description = "Secret"; };
399 slaveZones = mkOption {
400 description = "List of slave zones";
401 type = listOf (submodule {
403 name = mkOption { type = str; description = "zone name"; };
405 description = "NS master groups of this zone";
410 description = "Keys associated to the server";
416 masterZones = mkOption {
417 description = "List of master zones";
418 type = listOf (submodule {
420 name = mkOption { type = str; description = "zone name"; };
421 withCAA = mkOption { type = nullOr str; description = "CAA entry"; default = null; };
423 description = "NS slave groups of this zone";
427 description = "groups names that should have their NS entries listed here";
431 description = "Extra zone configuration for bind";
437 entries = mkOption { type = lines; description = "Regular entries of the NS zone"; };
438 withEmail = mkOption {
439 description = "List of domains that should have mail entries (MX, dkim, SPF, ...)";
441 type = listOf (submodule {
443 domain = mkOption { type = str; description = "Which subdomain is concerned"; };
444 send = mkOption { type = bool; description = "Whether there can be e-mails originating from the subdomain"; };
445 receive = mkOption { type = bool; description = "Whether there can be e-mails arriving to the subdomain"; };
457 Remote backup with duplicity
461 password = mkOption { type = str; description = "Password for encrypting files"; };
463 type = attrsOf (submodule {
467 example = literalExample ''
468 bucket: "s3://some_host/${bucket}";
472 Takes a bucket name as argument and returns a url
475 accessKeyId = mkOption { type = str; description = "Remote access-key"; };
476 secretAccessKey = mkOption { type = str; description = "Remote access secret"; };
483 zrepl_backup = mkOption {
487 description = "SSH key information";
490 public = mkOption { type = str; description = "Public part of the key"; };
491 private = mkOption { type = lines; description = "Private part of the key"; };
495 mysql = mkMysqlOptions "Zrepl" {};
497 description = "Certificates";
498 type = attrsOf (submodule {
500 key = mkOption { type = str; description = "Key"; };
501 certificate = mkOption { type = str; description = "Certificate"; };
508 rsync_backup = mkOption {
510 Rsync backup configuration from controlled host
515 description = "SSH key information";
518 public = mkOption { type = str; description = "Public part of the key"; };
519 private = mkOption { type = lines; description = "Private part of the key"; };
523 profiles = mkOption {
524 description = "Attrs of profiles to backup";
525 type = attrsOf (submodule {
527 keep = mkOption { type = int; description = "Number of backups to keep"; };
528 check_command = mkOption { type = str; description = "command to check if backup needs to be done"; default = "backup"; };
529 login = mkOption { type = str; description = "Login to connect to host"; };
530 port = mkOption { type = str; default = "22"; description = "Port to connect to host"; };
531 host = mkOption { type = str; description = "Host to connect to"; };
532 host_key = mkOption { type = str; description = "Host key"; };
533 host_key_type = mkOption { type = str; description = "Host key type"; };
535 description = "Parts to backup for this host";
536 type = attrsOf (submodule {
538 remote_folder = mkOption { type = path; description = "Remote folder to backup";};
539 exclude_from = mkOption {
542 description = "List of folders/files to exclude from the backup";
544 files_from = mkOption {
547 description = "List of folders/files to backup in the base folder";
552 description = "Extra arguments to pass to rsync";
563 monitoring = mkOption {
564 description = "Monitoring configuration";
567 status_url = mkOption { type = str; description = "URL to push status to"; };
568 status_token = mkOption { type = str; description = "Token for the status url"; };
569 http_user_password = mkOption { type = str; description = "HTTP credentials to check services behind wall"; };
570 email = mkOption { type = str; description = "Admin E-mail"; };
571 ssh_public_key = mkOption { type = str; description = "SSH public key"; };
572 ssh_secret_key = mkOption { type = str; description = "SSH secret key"; };
573 imap_login = mkOption { type = str; description = "IMAP login"; };
574 imap_password = mkOption { type = str; description = "IMAP password"; };
575 eriomem_keys = mkOption { type = listOf (listOf str); description = "Eriomem keys"; default = []; };
577 description = "OVH credentials for sms script";
580 endpoint = mkOption { type = str; default = "ovh-eu"; description = "OVH endpoint"; };
581 application_key = mkOption { type = str; description = "Application key"; };
582 application_secret = mkOption { type = str; description = "Application secret"; };
583 consumer_key = mkOption { type = str; description = "Consumer key"; };
584 account = mkOption { type = str; description = "Account"; };
588 nrdp_tokens = mkOption { type = listOf str; description = "Tokens allowed to push status update"; };
589 apprise_urls = mkOption { type = str; description = "Apprise space-separated urls to push status update"; };
590 netdata_aggregator = mkOption { type = str; description = "Url where netdata information should be sent"; };
591 netdata_keys = mkOption { type = attrsOf str; description = "netdata host keys"; };
592 contacts = mkOption { type = attrsOf unspecified; description = "Contact dicts to fill naemon objects"; };
593 email_check = mkOption {
594 description = "Emails services to check";
595 type = attrsOf (submodule {
597 local = mkOption { type = bool; default = false; description = "Use local configuration"; };
598 port = mkOption { type = nullOr str; default = null; description = "Port to connect to ssh"; };
599 login = mkOption { type = nullOr str; default = null; description = "Login to connect to ssh"; };
600 targets = mkOption { type = listOf str; description = "Hosts to send E-mails to"; };
601 mail_address = mkOption { type = nullOr str; default = null; description = "E-mail recipient part to send e-mail to"; };
602 mail_domain = mkOption { type = nullOr str; default = null; description = "E-mail domain part to send e-mail to"; };
610 description = "MPD configuration";
613 folder = mkOption { type = str; description = "Folder to serve from the MPD instance"; };
614 password = mkOption { type = str; description = "Password to connect to the MPD instance"; };
615 host = mkOption { type = str; description = "Host to connect to the MPD instance"; };
616 port = mkOption { type = str; description = "Port to connect to the MPD instance"; };
621 description = "FTP configuration";
624 ldap = mkLdapOptions "FTP" {
625 proftpd_filter = mkOption { type = str; description = "Filter for proftpd listing in LDAP"; };
626 pure-ftpd_filter = mkOption { type = str; description = "Filter for pure-ftpd listing in LDAP"; };
632 description = "VPN configuration";
633 type = attrsOf (submodule {
635 prefix = mkOption { type = str; description = "ipv6 prefix for the vpn subnet"; };
636 privateKey = mkOption { type = str; description = "Private key for the host"; };
637 publicKey = mkOption { type = str; description = "Public key for the host"; };
642 description = "Mail configuration";
646 description = "DMARC configuration";
649 ignore_hosts = mkOption {
652 Hosts to ignore when checking for dmarc
659 description = "DKIM configuration";
660 type = attrsOf (submodule {
666 "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3w1a2aMxWw9+hdcmbqX4UevcVqr204y0K73Wdc7MPZiOOlUJQYsMNSYR1Y/SC7jmPKeitpcJCpQgn/cveJZbuikjjPLsDReHyFEYmC278ZLRTELHx6f1IXM8WE08JIRT69CfZiMi1rVcOh9qRT4F93PyjCauU8Y5hJjtg9ThsWwIDAQAB" )
668 description = "Public entry to put in DNS TXT field";
670 private = mkOption { type = str; description = "Private key"; };
675 description = "Postfix configuration";
678 additional_mailbox_domains = mkOption {
680 List of domains that are used as mailbox final destination, in addition to those defined in the DNS records
684 mysql = mkMysqlOptions "Postfix" {
685 password_encrypt = mkOption { type = str; description = "Key to encrypt relay password in database"; };
687 backup_domains = mkOption {
689 Domains that are accepted for relay as backup domain
691 type = attrsOf (submodule {
693 domains = mkOption { type = listOf str; description = "Domains list"; };
694 relay_restrictions = mkOption {
697 Restrictions for relaying the e-mails from the domains
700 recipient_maps = mkOption {
702 Recipient map to accept relay for.
703 Must be specified for domain, the rules apply to everyone!
705 type = listOf (submodule {
708 type = enum [ "hash" ];
709 description = "Map type";
713 description = "Map content";
725 description = "Dovecot configuration";
728 ldap = mkLdapOptions "Dovecot" {
729 pass_attrs = mkOption { type = str; description = "Password attribute in LDAP"; };
730 user_attrs = mkOption { type = str; description = "User attribute mapping in LDAP"; };
731 iterate_attrs = mkOption { type = str; description = "User attribute mapping for listing in LDAP"; };
732 iterate_filter = mkOption { type = str; description = "User attribute filter for listing in LDAP"; };
733 postfix_mailbox_filter = mkOption { type = str; description = "Postfix filter to get mailboxes"; };
739 description = "rspamd configuration";
742 redis = mkRedisOptions "Redis";
743 read_password_hashed = mkOption { type = str; description = "Hashed read password for rspamd"; };
744 write_password_hashed = mkOption { type = str; description = "Hashed write password for rspamd"; };
745 read_password = mkOption {
747 description = "Read password for rspamd. Unused";
750 write_password = mkOption {
752 description = "Write password for rspamd. Unused";
759 description = "Mail script recipients";
760 type = attrsOf (submodule {
762 external = mkEnableOption "Create a script_<name>@mail.immae.eu external address";
765 git source to fetch the script from.
766 It must have a default.nix file as its root accepting a scriptEnv parameter
770 url = mkOption { type = str; description = "git url to fetch"; };
771 rev = mkOption { type = str; description = "git reference to fetch"; };
776 description = "Variables to pass to the script";
783 description = "Sympa configuration";
786 listmasters = mkOption {
788 description = "Listmasters";
790 postgresql = mkPsqlOptions "Sympa";
791 data_sources = mkOption {
794 description = "Data sources to make available to sympa";
799 description = "Scenari to make available to sympa";
808 description = "Coturn configuration";
811 auth_access_key = mkOption { type = str; description = "key to access coturn"; };
815 buildbot = mkOption {
816 description = "Buildbot configuration";
820 description = "SSH key information";
823 public = mkOption { type = str; description = "Public part of the key"; };
824 private = mkOption { type = lines; description = "Private part of the key"; };
828 workerPassword = mkOption { description = "Buildbot worker password"; type = str; };
830 description = "Buildbot user";
834 description = "user uid";
838 description = "user gid";
845 description = "Ldap configuration for buildbot";
848 password = mkOption { type = str; description = "Buildbot password"; };
852 projects = mkOption {
853 description = "Projects to make a buildbot for";
854 type = attrsOf (submodule {
856 name = mkOption { type = str; description = "Project name"; };
857 packages = mkOption {
859 example = literalExample ''
860 pkgs: [ pkgs.bash pkgs.git pkgs.gzip pkgs.openssh ];
864 Builds packages list to make available to buildbot project.
865 Takes pkgs as argument.
868 pythonPathHome = mkOption { type = bool; description = "Whether to add project’s python home to python path"; };
869 workerPort = mkOption { type = port; description = "Port for the worker"; };
871 #type = attrsOf (either str (functionTo str));
872 type = attrsOf unspecified;
873 description = "Secrets for the project to dump as files. Might be a function that takes pkgs as argument";
875 environment = mkOption {
876 #type = attrsOf (either str (functionTo str));
877 type = attrsOf unspecified;
879 Environment variables for the project. Might be a function that takes pkgs as argument.
880 BUILDBOT_ is prefixed to the variable names
883 activationScript = mkOption {
886 Activation script to run during deployment
889 webhookTokens = mkOption {
890 type = nullOr (listOf str);
893 List of tokens allowed to push to project’s change_hook/base endpoint
903 description = "Tools configurations";
906 contact = mkOption { type = str; description = "Contact e-mail address"; };
909 type = attrsOf (submodule {
911 url = mkOption { type = str; description = "URL to fetch"; };
912 sha256 = mkOption { type = str; description = "Hash of the url"; };
915 description = "Assets to provide on assets.immae.eu";
918 description = "Davical configuration";
921 postgresql = mkPsqlOptions "Davical";
922 ldap = mkLdapOptions "Davical" {};
926 diaspora = mkOption {
927 description = "Diaspora configuration";
930 postgresql = mkPsqlOptions "Diaspora";
931 redis = mkRedisOptions "Diaspora";
932 ldap = mkLdapOptions "Diaspora" {};
933 secret_token = mkOption { type = str; description = "Secret token"; };
937 dmarc_reports = mkOption {
938 description = "DMARC reports configuration";
941 mysql = mkMysqlOptions "DMARC" {};
942 anonymous_key = mkOption { type = str; description = "Anonymous hashing key"; };
946 etherpad-lite = mkOption {
947 description = "Etherpad configuration";
950 postgresql = mkPsqlOptions "Etherpad";
951 ldap = mkLdapOptions "Etherpad" {
952 group_filter = mkOption { type = str; description = "Filter for groups"; };
954 adminPassword = mkOption { type = str; description = "Admin password for mypads / admin"; };
955 session_key = mkOption { type = str; description = "Session key"; };
956 api_key = mkOption { type = str; description = "API key"; };
960 gitolite = mkOption {
961 description = "Gitolite configuration";
964 ldap = mkLdapOptions "Gitolite" {};
966 description = "SSH key information";
969 public = mkOption { type = str; description = "Public part of the key"; };
970 private = mkOption { type = lines; description = "Private part of the key"; };
977 kanboard = mkOption {
978 description = "Kanboard configuration";
981 postgresql = mkPsqlOptions "Kanboard";
982 ldap = mkLdapOptions "Kanboard" {
983 admin_dn = mkOption { type = str; description = "Admin DN"; };
988 mantisbt = mkOption {
989 description = "Mantisbt configuration";
992 postgresql = mkPsqlOptions "Mantisbt";
993 ldap = mkLdapOptions "Mantisbt" {};
994 master_salt = mkOption { type = str; description = "Master salt for password hash"; };
998 mastodon = mkOption {
999 description = "Mastodon configuration";
1002 postgresql = mkPsqlOptions "Mastodon";
1003 redis = mkRedisOptions "Mastodon";
1004 ldap = mkLdapOptions "Mastodon" {};
1005 paperclip_secret = mkOption { type = str; description = "Paperclip secret"; };
1006 otp_secret = mkOption { type = str; description = "OTP secret"; };
1007 secret_key_base = mkOption { type = str; description = "Secret key base"; };
1009 description = "vapid key";
1012 private = mkOption { type = str; description = "Private key"; };
1013 public = mkOption { type = str; description = "Public key"; };
1020 mediagoblin = mkOption {
1021 description = "Mediagoblin configuration";
1024 postgresql = mkPsqlOptions "Mediagoblin";
1025 redis = mkRedisOptions "Mediagoblin";
1026 ldap = mkLdapOptions "Mediagoblin" {};
1030 nextcloud = mkOption {
1031 description = "Nextcloud configuration";
1034 postgresql = mkPsqlOptions "Peertube";
1035 redis = mkRedisOptions "Peertube";
1036 password_salt = mkOption { type = str; description = "Password salt"; };
1037 instance_id = mkOption { type = str; description = "Instance ID"; };
1038 secret = mkOption { type = str; description = "App secret"; };
1042 peertube = mkOption {
1043 description = "Peertube configuration";
1046 listenPort = mkOption { type = port; description = "Port to listen to"; };
1047 postgresql = mkPsqlOptions "Peertube";
1048 redis = mkRedisOptions "Peertube";
1049 ldap = mkLdapOptions "Peertube" {};
1053 syden_peertube = mkOption {
1054 description = "Peertube Syden configuration";
1057 listenPort = mkOption { type = port; description = "Port to listen to"; };
1058 postgresql = mkPsqlOptions "Peertube";
1059 redis = mkRedisOptions "Peertube";
1063 phpldapadmin = mkOption {
1064 description = "phpLdapAdmin configuration";
1067 ldap = mkLdapOptions "phpldapadmin" {};
1072 description = "Rompr configuration";
1076 description = "MPD configuration";
1079 host = mkOption { type = str; description = "Host for MPD"; };
1080 port = mkOption { type = port; description = "Port to access MPD host"; };
1087 roundcubemail = mkOption {
1088 description = "Roundcubemail configuration";
1091 postgresql = mkPsqlOptions "TT-RSS";
1092 secret = mkOption { type = str; description = "Secret"; };
1096 shaarli = mkOption {
1097 description = "Shaarli configuration";
1100 ldap = mkLdapOptions "Shaarli" {};
1104 status_engine = mkOption {
1105 description = "Status Engine configuration";
1108 mysql = mkMysqlOptions "StatusEngine" {};
1109 ldap = mkLdapOptions "StatusEngine" {};
1114 description = "Taskwarrior configuration";
1117 ldap = mkLdapOptions "Taskwarrior" {};
1118 taskwarrior-web = mkOption {
1119 description = "taskwarrior-web profiles";
1120 type = attrsOf (submodule {
1124 description = "List of ldap uids having access to this profile";
1126 org = mkOption { type = str; description = "Taskd organisation"; };
1127 key = mkOption { type = str; description = "Taskd key"; };
1128 date = mkOption { type = str; description = "Preferred date format"; };
1136 description = "TT-RSS configuration";
1139 postgresql = mkPsqlOptions "TT-RSS";
1140 ldap = mkLdapOptions "TT-RSS" {};
1144 wallabag = mkOption {
1145 description = "Wallabag configuration";
1148 postgresql = mkPsqlOptions "Wallabag";
1149 ldap = mkLdapOptions "Wallabag" {
1150 admin_filter = mkOption { type = str; description = "Admin users filter"; };
1152 redis = mkRedisOptions "Wallabag";
1153 secret = mkOption { type = str; description = "App secret"; };
1157 webhooks = mkOption {
1159 description = "Mapping 'name'.php => script for webhooks";
1161 csp_reports = mkOption {
1162 description = "CSP report configuration";
1165 report_uri = mkOption { type = str; description = "URI to report CSP violations to"; };
1166 policies = mkOption { type = attrsOf str; description = "CSP policies to apply"; };
1170 commento = mkOption {
1171 description = "Commento configuration";
1174 listenPort = mkOption { type = port; description = "Port to listen to"; };
1175 postgresql = mkPsqlOptions "Commento";
1176 smtp = mkSmtpOptions "Commento";
1180 cryptpad = mkOption {
1181 description = "Cryptpad configuration";
1182 type = attrsOf (submodule {
1184 email = mkOption { type = str; description = "Admin e-mail"; };
1185 admins = mkOption { type = listOf str; description = "Instance admin public keys"; };
1186 port = mkOption { type = port; description = "Port to listen to"; };
1191 description = "Ympd configuration";
1194 listenPort = mkOption { type = port; description = "Port to listen to"; };
1196 description = "MPD configuration";
1199 password = mkOption { type = str; description = "Password to access MPD host"; };
1200 host = mkOption { type = str; description = "Host for MPD"; };
1201 port = mkOption { type = port; description = "Port to access MPD host"; };
1209 description = "Umami configuration";
1212 listenPort = mkOption { type = port; description = "Port to listen to"; };
1213 postgresql = mkPsqlOptions "Umami";
1214 hashSalt = mkOption { type = str; description = "Hash salt"; };
1219 description = "Yourls configuration";
1222 mysql = mkMysqlOptions "Yourls" {};
1223 ldap = mkLdapOptions "Yourls" {};
1224 cookieKey = mkOption { type = str; description = "Cookie key"; };
1231 serverSpecific = mkOption { type = attrsOf unspecified; description = "Server specific configuration"; };
1232 websites = mkOption {
1233 description = "Websites configurations";
1236 christophe_carpentier = mkOption {
1237 description = "Christophe Carpentier configuration by environment";
1240 agorakit = mkOption {
1241 description = "Agorakit configuration";
1244 mysql = mkMysqlOptions "Agorakit" {};
1245 smtp = mkSmtpOptions "Agorakit";
1246 appkey = mkOption { type = str; description = "App key"; };
1254 description = "Immae configuration by environment";
1258 description = "Temp configuration";
1261 ldap = mkLdapOptions "Immae temp" {
1262 filter = mkOption { type = str; description = "Filter for user access"; };
1270 isabelle = mkOption {
1271 description = "Isabelle configurations by environment";
1274 atenSubmodule = mkOption {
1275 description = "environment configuration";
1278 environment = mkOption { type = str; description = "Symfony environment"; };
1279 secret = mkOption { type = str; description = "Symfony App secret"; };
1280 postgresql = mkPsqlOptions "Aten";
1287 aten_production = atenSubmodule;
1288 aten_integration = atenSubmodule;
1289 iridologie = mkOption {
1290 description = "environment configuration";
1293 environment = mkOption { type = str; description = "SPIP environment"; };
1294 mysql = mkMysqlOptions "Iridologie" {};
1295 ldap = mkLdapOptions "Iridologie" {};
1303 description = "Chloe configurations by environment";
1306 chloeSubmodule = mkOption {
1307 description = "environment configuration";
1310 environment = mkOption { type = str; description = "SPIP environment"; };
1311 mysql = mkMysqlOptions "Chloe" {};
1312 ldap = mkLdapOptions "Chloe" {};
1319 production = chloeSubmodule;
1320 integration = chloeSubmodule;
1322 description = "environment configuration";
1325 mysql = mkMysqlOptions "ChloeNew" {};
1326 ldap = mkLdapOptions "ChloeNew" {};
1327 secret = mkOption { type = str; description = "Symfony App secret"; };
1334 connexionswing = mkOption {
1335 description = "Connexionswing configurations by environment";
1338 csSubmodule = mkOption {
1339 description = "environment configuration";
1342 environment = mkOption { type = str; description = "Symfony environment"; };
1343 mysql = mkMysqlOptions "Connexionswing" {};
1344 secret = mkOption { type = str; description = "Symfony App secret"; };
1345 email = mkOption { type = str; description = "Symfony email notification"; };
1352 production = csSubmodule;
1353 integration = csSubmodule;
1358 description = "Naturaloutil configuration";
1361 mysql = mkMysqlOptions "Naturaloutil" {};
1362 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1366 telio_tortay = mkOption {
1367 description = "Telio Tortay configuration";
1370 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1374 ludivine = mkOption {
1375 description = "Ludivinecassal configurations by environment";
1378 lcSubmodule = mkOption {
1379 description = "environment configuration";
1382 environment = mkOption { type = str; description = "Symfony environment"; };
1383 mysql = mkMysqlOptions "LudivineCassal" {};
1384 ldap = mkLdapOptions "LudivineCassal" {};
1385 secret = mkOption { type = str; description = "Symfony App secret"; };
1392 production = lcSubmodule;
1393 integration = lcSubmodule;
1397 nicecoop = mkOption {
1398 description = "Nicecoop configuration";
1402 port = mkOption { description = "Port to listen to"; type = port; };
1403 longpoll_port = mkOption { description = "Port to listen to"; type = port; };
1404 postgresql = mkPsqlOptions "Odoo";
1405 admin_password = mkOption { type = str; description = "Admin password"; };
1408 smtp = mkSmtpOptions "GestionCompte";
1409 mysql = mkMysqlOptions "gestion-compte" {};
1410 secret = mkOption { type = str; description = "Application secret"; };
1411 adminpassword = mkOption { type = str; description = "Admin password"; };
1413 gestion-compte-integration = {
1414 smtp = mkSmtpOptions "GestionCompte";
1415 mysql = mkMysqlOptions "gestion-compte" {};
1416 secret = mkOption { type = str; description = "Application secret"; };
1417 adminpassword = mkOption { type = str; description = "Admin password"; };
1420 smtp = mkSmtpOptions "Copanier";
1421 staff = mkOption { type = listOf str; description = "List of staff members"; };
1427 description = "Emilia configuration";
1430 postgresql = mkPsqlOptions "Emilia";
1434 florian = mkOption {
1435 description = "Florian configuration";
1438 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1442 nassime = mkOption {
1443 description = "Nassime configuration";
1446 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1450 piedsjaloux = mkOption {
1451 description = "Piedsjaloux configurations by environment";
1454 pjSubmodule = mkOption {
1455 description = "environment configuration";
1458 environment = mkOption { type = str; description = "Symfony environment"; };
1459 mysql = mkMysqlOptions "Piedsjaloux" {};
1460 secret = mkOption { type = str; description = "Symfony App secret"; };
1467 production = pjSubmodule;
1468 integration = pjSubmodule;
1473 description = "Europe Richie configurations by environment";
1476 mysql = mkMysqlOptions "Richie" {};
1477 smtp_mailer = mkOption {
1478 description = "SMTP mailer configuration";
1481 user = mkOption { type = str; description = "Username"; };
1482 password = mkOption { type = str; description = "Password"; };
1489 caldance = mkOption {
1490 description = "Caldance configurations by environment";
1493 integration = mkOption {
1494 description = "environment configuration";
1497 password = mkOption { type = str; description = "Password file content for basic auth"; };
1504 tellesflorian = mkOption {
1505 description = "Tellesflorian configurations by environment";
1508 tfSubmodule = mkOption {
1509 description = "environment configuration";
1512 environment = mkOption { type = str; description = "Symfony environment"; };
1513 mysql = mkMysqlOptions "Tellesflorian" {};
1514 secret = mkOption { type = str; description = "Symfony App secret"; };
1515 invite_passwords = mkOption { type = str; description = "Password basic auth"; };
1522 integration = tfSubmodule;
1530 options.hostEnv = mkOption {
1533 default = config.myEnv.servers."${name}";
1534 description = "Host environment";