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 port = mkOption { description = "Port to access Mysql"; type = str; };
27 socket = mkOption { description = "Socket to access Mysql"; type = path; };
28 systemUsers = mkOption {
29 description = "Attrs of user-passwords allowed to access mysql";
33 description = "PAM configuration for mysql";
36 dn = mkOption { description = "DN to connect as to check users"; type = str; };
37 password = mkOption { description = "DN password to connect as to check users"; type = str; };
38 filter = mkOption { description = "filter to match users"; type = str; };
43 mkMysqlOptions = name: mkOption {
44 description = "${name} mysql configuration";
46 options = mysqlOptions // {
47 database = mkOption { description = "${name} database"; type = str; };
48 user = mkOption { description = "${name} user"; type = str; };
49 password = mkOption { description = "mysql password of the ${name} user"; type = str; };
54 host = mkOption { description = "Host to access Postgresql"; type = str; };
55 port = mkOption { description = "Port to access Postgresql"; type = str; };
56 socket = mkOption { description = "Socket to access Postgresql"; type = path; };
58 description = "PAM configuration for psql";
61 dn = mkOption { description = "DN to connect as to check users"; type = str; };
62 password = mkOption { description = "DN password to connect as to check users"; type = str; };
63 filter = mkOption { description = "filter to match users"; type = str; };
68 mkPsqlOptions = name: mkOption {
69 description = "${name} psql configuration";
71 options = psqlOptions // {
72 database = mkOption { description = "${name} database"; type = str; };
73 schema = mkOption { description = "${name} schema"; type = nullOr str; default = null; };
74 user = mkOption { description = "${name} user"; type = str; };
75 password = mkOption { description = "psql password of the ${name} user"; type = str; };
80 host = mkOption { description = "Host to access Redis"; type = str; };
81 port = mkOption { description = "Port to access Redis"; type = str; };
82 socket = mkOption { description = "Socket to access Redis"; type = path; };
84 description = "Attrs of db number. Each number should be unique to avoid collision!";
87 spiped_key = mkOption {
90 Key to use with spiped to make a secure channel to replication
94 description = "Predixy configuration. Unused yet";
97 read = mkOption { type = str; description = "Read password"; };
102 mkRedisOptions = name: mkOption {
103 description = "${name} redis configuration";
105 options = redisOptions // {
106 db = mkOption { description = "${name} database"; type = str; };
115 Attrs of servers information in the cluster (not necessarily handled by nixops)
118 type = attrsOf (submodule {
122 LDAP credentials for the host
126 password = mkOption { type = string; description = "Password for the LDAP connection"; };
127 dn = mkOption { type = string; description = "DN for the LDAP connection"; };
133 attrs of ip4/ip6 grouped by section
135 type = attrsOf (submodule {
140 ip4 address of the host
144 type = listOf string;
147 ip6 addresses of the host
156 hetznerCloud = mkOption {
158 Hetzner Cloud credential information
162 authToken = mkOption {
173 Hetzner credential information
177 user = mkOption { type = str; description = "User"; };
178 pass = mkOption { type = str; description = "Password"; };
184 sshd service credential information
190 LDAP credentials for cn=ssh,ou=services,dc=immae,dc=eu dn
194 password = mkOption { description = "Password"; type = str; };
203 non-standard reserved ports. Must be unique!
208 noDupl = x: builtins.length (builtins.attrValues x) == builtins.length (unique (builtins.attrValues x));
210 x: if isAttrs x && noDupl x then x else throw "Non unique values for ports";
214 httpd service credential information
220 LDAP credentials for cn=httpd,ou=services,dc=immae,dc=eu dn
224 password = mkOption { description = "Password"; type = str; };
233 LDAP server configuration
236 options = ldapOptions;
239 databases = mkOption {
240 description = "Databases configuration";
244 type = submodule { options = mysqlOptions; };
245 description = "Mysql configuration";
248 type = submodule { options = redisOptions; };
249 description = "Redis configuration";
251 postgresql = mkOption {
252 type = submodule { options = psqlOptions; };
253 description = "Postgresql configuration";
259 description = "Jabber configuration";
262 ldap = mkLdapOptions "Jabber" {};
263 postgresql = mkPsqlOptions "Jabber";
268 description = "System and regular users uid/gid";
269 type = attrsOf (submodule {
272 description = "user uid";
276 description = "user gid";
283 description = "DNS configuration";
287 description = "SOA information";
291 description = "Serial number. Should be incremented at each change and unique";
295 description = "Refresh time";
299 description = "Retry time";
303 description = "Expire time";
307 description = "Default TTL time";
311 description = "hostmaster e-mail";
315 description = "Primary NS";
322 description = "Attrs of NS servers group";
325 "ns1.foo.com" = [ "198.51.100.10" "2001:db8:abcd::1" ];
326 "ns2.foo.com" = [ "198.51.100.15" "2001:db8:1234::1" ];
329 type = attrsOf (attrsOf (listOf str));
331 slaveZones = mkOption {
332 description = "List of slave zones";
333 type = listOf (submodule {
335 name = mkOption { type = str; description = "zone name"; };
337 description = "NS master groups of this zone";
343 masterZones = mkOption {
344 description = "List of master zones";
345 type = listOf (submodule {
347 name = mkOption { type = str; description = "zone name"; };
349 description = "NS slave groups of this zone";
353 description = "groups names that should have their NS entries listed here";
357 description = "Extra zone configuration for bind";
363 entries = mkOption { type = lines; description = "Regular entries of the NS zone"; };
364 withEmail = mkOption {
365 description = "List of domains that should have mail entries (MX, dkim, SPF, ...)";
367 type = listOf (submodule {
369 domain = mkOption { type = str; description = "Which subdomain is concerned"; };
370 send = mkOption { type = bool; description = "Whether there can be e-mails originating from the subdomain"; };
371 receive = mkOption { type = bool; description = "Whether there can be e-mails arriving to the subdomain"; };
383 Remote backup with duplicity
387 password = mkOption { type = str; description = "Password for encrypting files"; };
388 remote = mkOption { type = str; description = "Remote url access"; };
389 accessKeyId = mkOption { type = str; description = "Remote access-key"; };
390 secretAccessKey = mkOption { type = str; description = "Remote access secret"; };
394 rsync_backup = mkOption {
396 Rsync backup configuration from controlled host
400 mailto = mkOption { type = str; description = "Where to e-mail on error"; };
402 description = "SSH key information";
405 public = mkOption { type = str; description = "Public part of the key"; };
406 private = mkOption { type = lines; description = "Private part of the key"; };
410 profiles = mkOption {
411 description = "Attrs of profiles to backup";
412 type = attrsOf (submodule {
414 keep = mkOption { type = int; description = "Number of backups to keep"; };
415 login = mkOption { type = str; description = "Login to connect to host"; };
416 port = mkOption { type = str; default = "22"; description = "Port to connect to host"; };
417 host = mkOption { type = str; description = "Host to connect to"; };
418 host_key = mkOption { type = str; description = "Host key"; };
419 host_key_type = mkOption { type = str; description = "Host key type"; };
421 description = "Parts to backup for this host";
422 type = attrsOf (submodule {
424 remote_folder = mkOption { type = path; description = "Remote folder to backup";};
425 exclude_from = mkOption {
428 description = "List of folders/files to exclude from the backup";
430 files_from = mkOption {
433 description = "List of folders/files to backup in the base folder";
438 description = "Extra arguments to pass to rsync";
449 monitoring = mkOption {
450 description = "Monitoring configuration";
453 status_url = mkOption { type = str; description = "URL to push status to"; };
454 status_token = mkOption { type = str; description = "Token for the status url"; };
455 email = mkOption { type = str; description = "Admin E-mail"; };
460 description = "MPD configuration";
463 folder = mkOption { type = str; description = "Folder to serve from the MPD instance"; };
464 password = mkOption { type = str; description = "Password to connect to the MPD instance"; };
465 host = mkOption { type = str; description = "Host to connect to the MPD instance"; };
466 port = mkOption { type = str; description = "Port to connect to the MPD instance"; };
471 description = "FTP configuration";
474 ldap = mkLdapOptions "FTP" {};
479 description = "Mail configuration";
483 description = "DMARC configuration";
486 ignore_hosts = mkOption {
489 Hosts to ignore when checking for dmarc
496 description = "DKIM configuration";
497 type = attrsOf (submodule {
503 "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3w1a2aMxWw9+hdcmbqX4UevcVqr204y0K73Wdc7MPZiOOlUJQYsMNSYR1Y/SC7jmPKeitpcJCpQgn/cveJZbuikjjPLsDReHyFEYmC278ZLRTELHx6f1IXM8WE08JIRT69CfZiMi1rVcOh9qRT4F93PyjCauU8Y5hJjtg9ThsWwIDAQAB" )
505 description = "Public entry to put in DNS TXT field";
507 private = mkOption { type = str; description = "Private key"; };
512 description = "Postfix configuration";
515 additional_mailbox_domains = mkOption {
517 List of domains that are used as mailbox final destination, in addition to those defined in the DNS records
521 mysql = mkMysqlOptions "Postfix";
522 backup_domains = mkOption {
524 Domains that are accepted for relay as backup domain
526 type = attrsOf (submodule {
528 domains = mkOption { type = listOf str; description = "Domains list"; };
529 relay_restrictions = mkOption {
532 Restrictions for relaying the e-mails from the domains
535 recipient_maps = mkOption {
537 Recipient map to accept relay for.
538 Must be specified for domain, the rules apply to everyone!
540 type = listOf (submodule {
543 type = enum [ "hash" ];
544 description = "Map type";
548 description = "Map content";
560 description = "Dovecot configuration";
563 ldap = mkLdapOptions "Dovecot" {
564 pass_attrs = mkOption { type = str; description = "Password attribute in LDAP"; };
565 user_attrs = mkOption { type = str; description = "User attribute mapping in LDAP"; };
566 iterate_attrs = mkOption { type = str; description = "User attribute mapping for listing in LDAP"; };
567 iterate_filter = mkOption { type = str; description = "User attribute filter for listing in LDAP"; };
573 description = "rspamd configuration";
576 redis = mkRedisOptions "Redis";
577 read_password_hashed = mkOption { type = str; description = "Hashed read password for rspamd"; };
578 write_password_hashed = mkOption { type = str; description = "Hashed write password for rspamd"; };
579 read_password = mkOption {
581 description = "Read password for rspamd. Unused";
584 write_password = mkOption {
586 description = "Write password for rspamd. Unused";
593 description = "Mail script recipients";
594 type = attrsOf (submodule {
598 git source to fetch the script from.
599 It must have a default.nix file as its root accepting a scriptEnv parameter
603 url = mkOption { type = str; description = "git url to fetch"; };
604 rev = mkOption { type = str; description = "git reference to fetch"; };
609 description = "Variables to pass to the script";
618 buildbot = mkOption {
619 description = "Buildbot configuration";
623 description = "Buildbot user";
627 description = "user uid";
631 description = "user gid";
638 description = "Ldap configuration for buildbot";
641 password = mkOption { type = str; description = "Buildbot password"; };
645 projects = mkOption {
646 description = "Projects to make a buildbot for";
647 type = attrsOf (submodule {
649 name = mkOption { type = str; description = "Project name"; };
650 packages = mkOption {
652 example = literalExample ''
653 pkgs: [ pkgs.bash pkgs.git pkgs.gzip pkgs.openssh ];
657 Builds packages list to make available to buildbot project.
658 Takes pkgs as argument.
661 pythonPackages = mkOption {
663 example = literalExample ''
664 p: pkgs: [ pkgs.python3Packages.pip ];
668 Builds python packages list to make available to buildbot project.
669 Takes buildbot python module as first argument and pkgs as second argument in order to augment the python modules list.
672 pythonPathHome = mkOption { type = bool; description = "Whether to add project’s python home to python path"; };
675 description = "Secrets for the project to dump as files";
677 environment = mkOption {
680 Environment variables for the project.
681 BUILDBOT_ is prefixed to the variable names
684 activationScript = mkOption {
687 Activation script to run during deployment
690 builderPaths = mkOption {
691 type = attrsOf unspecified;
694 Attrs of functions to make accessible specifically per builder.
695 Takes pkgs as argument and should return a single path containing binaries.
696 This path will be accessible as BUILDBOT_PATH_<attrskey>
699 webhookTokens = mkOption {
700 type = nullOr (listOf str);
703 List of tokens allowed to push to project’s change_hook/base endpoint
713 description = "Tools configurations";
717 description = "Davical configuration";
720 postgresql = mkPsqlOptions "Davical";
721 ldap = mkLdapOptions "Davical" {};
725 diaspora = mkOption {
726 description = "Diaspora configuration";
729 postgresql = mkPsqlOptions "Diaspora";
730 redis = mkRedisOptions "Diaspora";
731 ldap = mkLdapOptions "Diaspora" {};
732 secret_token = mkOption { type = str; description = "Secret token"; };
736 etherpad-lite = mkOption {
737 description = "Etherpad configuration";
740 postgresql = mkPsqlOptions "Etherpad";
741 ldap = mkLdapOptions "Etherpad" {
742 group_filter = mkOption { type = str; description = "Filter for groups"; };
744 session_key = mkOption { type = str; description = "Session key"; };
745 api_key = mkOption { type = str; description = "API key"; };
746 redirects = mkOption { type = str; description = "Redirects for apache"; };
750 gitolite = mkOption {
751 description = "Gitolite configuration";
754 ldap = mkLdapOptions "Gitolite" {};
758 kanboard = mkOption {
759 description = "Kanboard configuration";
762 postgresql = mkPsqlOptions "Kanboard";
763 ldap = mkLdapOptions "Kanboard" {
764 admin_dn = mkOption { type = str; description = "Admin DN"; };
769 mantisbt = mkOption {
770 description = "Mantisbt configuration";
773 postgresql = mkPsqlOptions "Mantisbt";
774 ldap = mkLdapOptions "Mantisbt" {};
775 master_salt = mkOption { type = str; description = "Master salt for password hash"; };
779 mastodon = mkOption {
780 description = "Mastodon configuration";
783 postgresql = mkPsqlOptions "Mastodon";
784 redis = mkRedisOptions "Mastodon";
785 ldap = mkLdapOptions "Mastodon" {};
786 paperclip_secret = mkOption { type = str; description = "Paperclip secret"; };
787 otp_secret = mkOption { type = str; description = "OTP secret"; };
788 secret_key_base = mkOption { type = str; description = "Secret key base"; };
790 description = "vapid key";
793 private = mkOption { type = str; description = "Private key"; };
794 public = mkOption { type = str; description = "Public key"; };
801 mediagoblin = mkOption {
802 description = "Mediagoblin configuration";
805 postgresql = mkPsqlOptions "Mediagoblin";
806 redis = mkRedisOptions "Mediagoblin";
807 ldap = mkLdapOptions "Mediagoblin" {};
811 nextcloud = mkOption {
812 description = "Nextcloud configuration";
815 postgresql = mkPsqlOptions "Peertube";
816 redis = mkRedisOptions "Peertube";
817 password_salt = mkOption { type = str; description = "Password salt"; };
818 instance_id = mkOption { type = str; description = "Instance ID"; };
819 secret = mkOption { type = str; description = "App secret"; };
823 peertube = mkOption {
824 description = "Peertube configuration";
827 listenPort = mkOption { type = port; description = "Port to listen to"; };
828 postgresql = mkPsqlOptions "Peertube";
829 redis = mkRedisOptions "Peertube";
830 ldap = mkLdapOptions "Peertube" {};
834 phpldapadmin = mkOption {
835 description = "phpLdapAdmin configuration";
838 ldap = mkLdapOptions "phpldapadmin" {};
843 description = "Rompr configuration";
847 description = "MPD configuration";
850 host = mkOption { type = str; description = "Host for MPD"; };
851 port = mkOption { type = port; description = "Port to access MPD host"; };
858 roundcubemail = mkOption {
859 description = "Roundcubemail configuration";
862 postgresql = mkPsqlOptions "TT-RSS";
863 secret = mkOption { type = str; description = "Secret"; };
868 description = "Shaarli configuration";
871 ldap = mkLdapOptions "Shaarli" {};
876 description = "Taskwarrior configuration";
879 ldap = mkLdapOptions "Taskwarrior" {};
880 taskwarrior-web = mkOption {
881 description = "taskwarrior-web profiles";
882 type = attrsOf (submodule {
886 description = "List of ldap uids having access to this profile";
888 org = mkOption { type = str; description = "Taskd organisation"; };
889 key = mkOption { type = str; description = "Taskd key"; };
890 date = mkOption { type = str; description = "Preferred date format"; };
898 description = "TT-RSS configuration";
901 postgresql = mkPsqlOptions "TT-RSS";
902 ldap = mkLdapOptions "TT-RSS" {};
906 wallabag = mkOption {
907 description = "Wallabag configuration";
910 postgresql = mkPsqlOptions "Wallabag";
911 ldap = mkLdapOptions "Wallabag" {
912 admin_filter = mkOption { type = str; description = "Admin users filter"; };
914 redis = mkRedisOptions "Wallabag";
915 secret = mkOption { type = str; description = "App secret"; };
920 description = "Ympd configuration";
923 listenPort = mkOption { type = port; description = "Port to listen to"; };
925 description = "MPD configuration";
928 password = mkOption { type = str; description = "Password to access MPD host"; };
929 host = mkOption { type = str; description = "Host for MPD"; };
930 port = mkOption { type = port; description = "Port to access MPD host"; };
938 description = "Yourls configuration";
941 mysql = mkMysqlOptions "Yourls";
942 ldap = mkLdapOptions "Yourls" {};
943 cookieKey = mkOption { type = str; description = "Cookie key"; };
950 websites = mkOption {
951 description = "Websites configurations";
954 isabelle = mkOption {
955 description = "Isabelle configurations by environment";
958 atenSubmodule = mkOption {
959 description = "environment configuration";
962 environment = mkOption { type = str; description = "Symfony environment"; };
963 secret = mkOption { type = str; description = "Symfony App secret"; };
964 postgresql = mkPsqlOptions "Aten";
971 aten_production = atenSubmodule;
972 aten_integration = atenSubmodule;
977 description = "Chloe configurations by environment";
980 chloeSubmodule = mkOption {
981 description = "environment configuration";
984 environment = mkOption { type = str; description = "Symfony environment"; };
985 mysql = mkMysqlOptions "Chloe";
986 ldap = mkLdapOptions "Chloe" {};
993 production = chloeSubmodule;
994 integration = chloeSubmodule;
998 connexionswing = mkOption {
999 description = "Connexionswing configurations by environment";
1002 csSubmodule = mkOption {
1003 description = "environment configuration";
1006 environment = mkOption { type = str; description = "Symfony environment"; };
1007 mysql = mkMysqlOptions "Connexionswing";
1008 secret = mkOption { type = str; description = "Symfony App secret"; };
1009 email = mkOption { type = str; description = "Symfony email notification"; };
1016 production = csSubmodule;
1017 integration = csSubmodule;
1022 description = "Naturaloutil configuration";
1025 mysql = mkMysqlOptions "Naturaloutil";
1026 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1030 telioTortay = mkOption {
1031 description = "Telio Tortay configuration";
1034 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1038 ludivinecassal = mkOption {
1039 description = "Ludivinecassal configurations by environment";
1042 lcSubmodule = mkOption {
1043 description = "environment configuration";
1046 environment = mkOption { type = str; description = "Symfony environment"; };
1047 mysql = mkMysqlOptions "LudivineCassal";
1048 ldap = mkLdapOptions "LudivineCassal" {};
1049 secret = mkOption { type = str; description = "Symfony App secret"; };
1056 production = lcSubmodule;
1057 integration = lcSubmodule;
1062 description = "Emilia configuration";
1065 postgresql = mkPsqlOptions "Emilia";
1069 florian = mkOption {
1070 description = "Florian configuration";
1073 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1077 nassime = mkOption {
1078 description = "Nassime configuration";
1081 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1085 piedsjaloux = mkOption {
1086 description = "Piedsjaloux configurations by environment";
1089 pjSubmodule = mkOption {
1090 description = "environment configuration";
1093 environment = mkOption { type = str; description = "Symfony environment"; };
1094 mysql = mkMysqlOptions "Piedsjaloux";
1095 secret = mkOption { type = str; description = "Symfony App secret"; };
1102 production = pjSubmodule;
1103 integration = pjSubmodule;
1108 description = "Europe Richie configurations by environment";
1111 mysql = mkMysqlOptions "Richie";
1112 smtp_mailer = mkOption {
1113 description = "SMTP mailer configuration";
1116 user = mkOption { type = str; description = "Username"; };
1117 password = mkOption { type = str; description = "Password"; };
1124 tellesflorian = mkOption {
1125 description = "Tellesflorian configurations by environment";
1128 tfSubmodule = mkOption {
1129 description = "environment configuration";
1132 environment = mkOption { type = str; description = "Symfony environment"; };
1133 mysql = mkMysqlOptions "Tellesflorian";
1134 secret = mkOption { type = str; description = "Symfony App secret"; };
1135 invite_passwords = mkOption { type = str; description = "Password basic auth"; };
1142 integration = tfSubmodule;
1150 privateFiles = mkOption {
1153 Path to secret files to make available during build
1161 FQDN of the current host.