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 slack_url = mkOption { type = str; description = "Slack webhook url to push status update"; };
590 slack_channel = mkOption { type = str; description = "Slack channel to push status update"; };
591 netdata_aggregator = mkOption { type = str; description = "Url where netdata information should be sent"; };
592 netdata_keys = mkOption { type = attrsOf str; description = "netdata host keys"; };
593 contacts = mkOption { type = attrsOf unspecified; description = "Contact dicts to fill naemon objects"; };
594 email_check = mkOption {
595 description = "Emails services to check";
596 type = attrsOf (submodule {
598 local = mkOption { type = bool; default = false; description = "Use local configuration"; };
599 port = mkOption { type = nullOr str; default = null; description = "Port to connect to ssh"; };
600 login = mkOption { type = nullOr str; default = null; description = "Login to connect to ssh"; };
601 targets = mkOption { type = listOf str; description = "Hosts to send E-mails to"; };
602 mail_address = mkOption { type = nullOr str; default = null; description = "E-mail recipient part to send e-mail to"; };
603 mail_domain = mkOption { type = nullOr str; default = null; description = "E-mail domain part to send e-mail to"; };
611 description = "MPD configuration";
614 folder = mkOption { type = str; description = "Folder to serve from the MPD instance"; };
615 password = mkOption { type = str; description = "Password to connect to the MPD instance"; };
616 host = mkOption { type = str; description = "Host to connect to the MPD instance"; };
617 port = mkOption { type = str; description = "Port to connect to the MPD instance"; };
622 description = "FTP configuration";
625 ldap = mkLdapOptions "FTP" {
626 proftpd_filter = mkOption { type = str; description = "Filter for proftpd listing in LDAP"; };
627 pure-ftpd_filter = mkOption { type = str; description = "Filter for pure-ftpd listing in LDAP"; };
633 description = "VPN configuration";
634 type = attrsOf (submodule {
636 prefix = mkOption { type = str; description = "ipv6 prefix for the vpn subnet"; };
637 privateKey = mkOption { type = str; description = "Private key for the host"; };
638 publicKey = mkOption { type = str; description = "Public key for the host"; };
643 description = "Mail configuration";
647 description = "DMARC configuration";
650 ignore_hosts = mkOption {
653 Hosts to ignore when checking for dmarc
660 description = "DKIM configuration";
661 type = attrsOf (submodule {
667 "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3w1a2aMxWw9+hdcmbqX4UevcVqr204y0K73Wdc7MPZiOOlUJQYsMNSYR1Y/SC7jmPKeitpcJCpQgn/cveJZbuikjjPLsDReHyFEYmC278ZLRTELHx6f1IXM8WE08JIRT69CfZiMi1rVcOh9qRT4F93PyjCauU8Y5hJjtg9ThsWwIDAQAB" )
669 description = "Public entry to put in DNS TXT field";
671 private = mkOption { type = str; description = "Private key"; };
676 description = "Postfix configuration";
679 additional_mailbox_domains = mkOption {
681 List of domains that are used as mailbox final destination, in addition to those defined in the DNS records
685 mysql = mkMysqlOptions "Postfix" {
686 password_encrypt = mkOption { type = str; description = "Key to encrypt relay password in database"; };
688 backup_domains = mkOption {
690 Domains that are accepted for relay as backup domain
692 type = attrsOf (submodule {
694 domains = mkOption { type = listOf str; description = "Domains list"; };
695 relay_restrictions = mkOption {
698 Restrictions for relaying the e-mails from the domains
701 recipient_maps = mkOption {
703 Recipient map to accept relay for.
704 Must be specified for domain, the rules apply to everyone!
706 type = listOf (submodule {
709 type = enum [ "hash" ];
710 description = "Map type";
714 description = "Map content";
726 description = "Dovecot configuration";
729 ldap = mkLdapOptions "Dovecot" {
730 pass_attrs = mkOption { type = str; description = "Password attribute in LDAP"; };
731 user_attrs = mkOption { type = str; description = "User attribute mapping in LDAP"; };
732 iterate_attrs = mkOption { type = str; description = "User attribute mapping for listing in LDAP"; };
733 iterate_filter = mkOption { type = str; description = "User attribute filter for listing in LDAP"; };
734 postfix_mailbox_filter = mkOption { type = str; description = "Postfix filter to get mailboxes"; };
740 description = "rspamd configuration";
743 redis = mkRedisOptions "Redis";
744 read_password_hashed = mkOption { type = str; description = "Hashed read password for rspamd"; };
745 write_password_hashed = mkOption { type = str; description = "Hashed write password for rspamd"; };
746 read_password = mkOption {
748 description = "Read password for rspamd. Unused";
751 write_password = mkOption {
753 description = "Write password for rspamd. Unused";
760 description = "Mail script recipients";
761 type = attrsOf (submodule {
763 external = mkEnableOption "Create a script_<name>@mail.immae.eu external address";
766 git source to fetch the script from.
767 It must have a default.nix file as its root accepting a scriptEnv parameter
771 url = mkOption { type = str; description = "git url to fetch"; };
772 rev = mkOption { type = str; description = "git reference to fetch"; };
777 description = "Variables to pass to the script";
784 description = "Sympa configuration";
787 listmasters = mkOption {
789 description = "Listmasters";
791 postgresql = mkPsqlOptions "Sympa";
792 data_sources = mkOption {
795 description = "Data sources to make available to sympa";
800 description = "Scenari to make available to sympa";
809 description = "Coturn configuration";
812 auth_access_key = mkOption { type = str; description = "key to access coturn"; };
816 buildbot = mkOption {
817 description = "Buildbot configuration";
821 description = "SSH key information";
824 public = mkOption { type = str; description = "Public part of the key"; };
825 private = mkOption { type = lines; description = "Private part of the key"; };
829 workerPassword = mkOption { description = "Buildbot worker password"; type = str; };
831 description = "Buildbot user";
835 description = "user uid";
839 description = "user gid";
846 description = "Ldap configuration for buildbot";
849 password = mkOption { type = str; description = "Buildbot password"; };
853 projects = mkOption {
854 description = "Projects to make a buildbot for";
855 type = attrsOf (submodule {
857 name = mkOption { type = str; description = "Project name"; };
858 packages = mkOption {
860 example = literalExample ''
861 pkgs: [ pkgs.bash pkgs.git pkgs.gzip pkgs.openssh ];
865 Builds packages list to make available to buildbot project.
866 Takes pkgs as argument.
869 pythonPathHome = mkOption { type = bool; description = "Whether to add project’s python home to python path"; };
870 workerPort = mkOption { type = port; description = "Port for the worker"; };
872 #type = attrsOf (either str (functionTo str));
873 type = attrsOf unspecified;
874 description = "Secrets for the project to dump as files. Might be a function that takes pkgs as argument";
876 environment = mkOption {
877 #type = attrsOf (either str (functionTo str));
878 type = attrsOf unspecified;
880 Environment variables for the project. Might be a function that takes pkgs as argument.
881 BUILDBOT_ is prefixed to the variable names
884 activationScript = mkOption {
887 Activation script to run during deployment
890 builderPaths = mkOption {
891 type = attrsOf unspecified;
894 Attrs of functions to make accessible specifically per builder.
895 Takes pkgs as argument and should return a single path containing binaries.
896 This path will be accessible as BUILDBOT_PATH_<attrskey>
899 webhookTokens = mkOption {
900 type = nullOr (listOf str);
903 List of tokens allowed to push to project’s change_hook/base endpoint
913 description = "Tools configurations";
916 contact = mkOption { type = str; description = "Contact e-mail address"; };
919 type = attrsOf (submodule {
921 url = mkOption { type = str; description = "URL to fetch"; };
922 sha256 = mkOption { type = str; description = "Hash of the url"; };
925 description = "Assets to provide on assets.immae.eu";
928 description = "Davical configuration";
931 postgresql = mkPsqlOptions "Davical";
932 ldap = mkLdapOptions "Davical" {};
936 diaspora = mkOption {
937 description = "Diaspora configuration";
940 postgresql = mkPsqlOptions "Diaspora";
941 redis = mkRedisOptions "Diaspora";
942 ldap = mkLdapOptions "Diaspora" {};
943 secret_token = mkOption { type = str; description = "Secret token"; };
947 dmarc_reports = mkOption {
948 description = "DMARC reports configuration";
951 mysql = mkMysqlOptions "DMARC" {};
952 anonymous_key = mkOption { type = str; description = "Anonymous hashing key"; };
956 etherpad-lite = mkOption {
957 description = "Etherpad configuration";
960 postgresql = mkPsqlOptions "Etherpad";
961 ldap = mkLdapOptions "Etherpad" {
962 group_filter = mkOption { type = str; description = "Filter for groups"; };
964 adminPassword = mkOption { type = str; description = "Admin password for mypads / admin"; };
965 session_key = mkOption { type = str; description = "Session key"; };
966 api_key = mkOption { type = str; description = "API key"; };
970 gitolite = mkOption {
971 description = "Gitolite configuration";
974 ldap = mkLdapOptions "Gitolite" {};
976 description = "SSH key information";
979 public = mkOption { type = str; description = "Public part of the key"; };
980 private = mkOption { type = lines; description = "Private part of the key"; };
987 kanboard = mkOption {
988 description = "Kanboard configuration";
991 postgresql = mkPsqlOptions "Kanboard";
992 ldap = mkLdapOptions "Kanboard" {
993 admin_dn = mkOption { type = str; description = "Admin DN"; };
998 mantisbt = mkOption {
999 description = "Mantisbt configuration";
1002 postgresql = mkPsqlOptions "Mantisbt";
1003 ldap = mkLdapOptions "Mantisbt" {};
1004 master_salt = mkOption { type = str; description = "Master salt for password hash"; };
1008 mastodon = mkOption {
1009 description = "Mastodon configuration";
1012 postgresql = mkPsqlOptions "Mastodon";
1013 redis = mkRedisOptions "Mastodon";
1014 ldap = mkLdapOptions "Mastodon" {};
1015 paperclip_secret = mkOption { type = str; description = "Paperclip secret"; };
1016 otp_secret = mkOption { type = str; description = "OTP secret"; };
1017 secret_key_base = mkOption { type = str; description = "Secret key base"; };
1019 description = "vapid key";
1022 private = mkOption { type = str; description = "Private key"; };
1023 public = mkOption { type = str; description = "Public key"; };
1030 mediagoblin = mkOption {
1031 description = "Mediagoblin configuration";
1034 postgresql = mkPsqlOptions "Mediagoblin";
1035 redis = mkRedisOptions "Mediagoblin";
1036 ldap = mkLdapOptions "Mediagoblin" {};
1040 nextcloud = mkOption {
1041 description = "Nextcloud configuration";
1044 postgresql = mkPsqlOptions "Peertube";
1045 redis = mkRedisOptions "Peertube";
1046 password_salt = mkOption { type = str; description = "Password salt"; };
1047 instance_id = mkOption { type = str; description = "Instance ID"; };
1048 secret = mkOption { type = str; description = "App secret"; };
1052 peertube = mkOption {
1053 description = "Peertube configuration";
1056 listenPort = mkOption { type = port; description = "Port to listen to"; };
1057 postgresql = mkPsqlOptions "Peertube";
1058 redis = mkRedisOptions "Peertube";
1059 ldap = mkLdapOptions "Peertube" {};
1063 syden_peertube = mkOption {
1064 description = "Peertube Syden configuration";
1067 listenPort = mkOption { type = port; description = "Port to listen to"; };
1068 postgresql = mkPsqlOptions "Peertube";
1069 redis = mkRedisOptions "Peertube";
1073 phpldapadmin = mkOption {
1074 description = "phpLdapAdmin configuration";
1077 ldap = mkLdapOptions "phpldapadmin" {};
1082 description = "Rompr configuration";
1086 description = "MPD configuration";
1089 host = mkOption { type = str; description = "Host for MPD"; };
1090 port = mkOption { type = port; description = "Port to access MPD host"; };
1097 roundcubemail = mkOption {
1098 description = "Roundcubemail configuration";
1101 postgresql = mkPsqlOptions "TT-RSS";
1102 secret = mkOption { type = str; description = "Secret"; };
1106 shaarli = mkOption {
1107 description = "Shaarli configuration";
1110 ldap = mkLdapOptions "Shaarli" {};
1114 status_engine = mkOption {
1115 description = "Status Engine configuration";
1118 mysql = mkMysqlOptions "StatusEngine" {};
1119 ldap = mkLdapOptions "StatusEngine" {};
1124 description = "Taskwarrior configuration";
1127 ldap = mkLdapOptions "Taskwarrior" {};
1128 taskwarrior-web = mkOption {
1129 description = "taskwarrior-web profiles";
1130 type = attrsOf (submodule {
1134 description = "List of ldap uids having access to this profile";
1136 org = mkOption { type = str; description = "Taskd organisation"; };
1137 key = mkOption { type = str; description = "Taskd key"; };
1138 date = mkOption { type = str; description = "Preferred date format"; };
1146 description = "TT-RSS configuration";
1149 postgresql = mkPsqlOptions "TT-RSS";
1150 ldap = mkLdapOptions "TT-RSS" {};
1154 wallabag = mkOption {
1155 description = "Wallabag configuration";
1158 postgresql = mkPsqlOptions "Wallabag";
1159 ldap = mkLdapOptions "Wallabag" {
1160 admin_filter = mkOption { type = str; description = "Admin users filter"; };
1162 redis = mkRedisOptions "Wallabag";
1163 secret = mkOption { type = str; description = "App secret"; };
1167 webhooks = mkOption {
1169 description = "Mapping 'name'.php => script for webhooks";
1171 csp_reports = mkOption {
1172 description = "CSP report configuration";
1175 report_uri = mkOption { type = str; description = "URI to report CSP violations to"; };
1176 policies = mkOption { type = attrsOf str; description = "CSP policies to apply"; };
1180 commento = mkOption {
1181 description = "Commento configuration";
1184 listenPort = mkOption { type = port; description = "Port to listen to"; };
1185 postgresql = mkPsqlOptions "Commento";
1186 smtp = mkSmtpOptions "Commento";
1190 cryptpad = mkOption {
1191 description = "Cryptpad configuration";
1192 type = attrsOf (submodule {
1194 email = mkOption { type = str; description = "Admin e-mail"; };
1195 admins = mkOption { type = listOf str; description = "Instance admin public keys"; };
1196 port = mkOption { type = port; description = "Port to listen to"; };
1201 description = "Ympd configuration";
1204 listenPort = mkOption { type = port; description = "Port to listen to"; };
1206 description = "MPD configuration";
1209 password = mkOption { type = str; description = "Password to access MPD host"; };
1210 host = mkOption { type = str; description = "Host for MPD"; };
1211 port = mkOption { type = port; description = "Port to access MPD host"; };
1219 description = "Umami configuration";
1222 listenPort = mkOption { type = port; description = "Port to listen to"; };
1223 postgresql = mkPsqlOptions "Umami";
1224 hashSalt = mkOption { type = str; description = "Hash salt"; };
1229 description = "Yourls configuration";
1232 mysql = mkMysqlOptions "Yourls" {};
1233 ldap = mkLdapOptions "Yourls" {};
1234 cookieKey = mkOption { type = str; description = "Cookie key"; };
1241 serverSpecific = mkOption { type = attrsOf unspecified; description = "Server specific configuration"; };
1242 websites = mkOption {
1243 description = "Websites configurations";
1246 christophe_carpentier = mkOption {
1247 description = "Christophe Carpentier configuration by environment";
1250 agorakit = mkOption {
1251 description = "Agorakit configuration";
1254 mysql = mkMysqlOptions "Agorakit" {};
1255 smtp = mkSmtpOptions "Agorakit";
1256 appkey = mkOption { type = str; description = "App key"; };
1264 description = "Immae configuration by environment";
1268 description = "Temp configuration";
1271 ldap = mkLdapOptions "Immae temp" {
1272 filter = mkOption { type = str; description = "Filter for user access"; };
1280 isabelle = mkOption {
1281 description = "Isabelle configurations by environment";
1284 atenSubmodule = mkOption {
1285 description = "environment configuration";
1288 environment = mkOption { type = str; description = "Symfony environment"; };
1289 secret = mkOption { type = str; description = "Symfony App secret"; };
1290 postgresql = mkPsqlOptions "Aten";
1297 aten_production = atenSubmodule;
1298 aten_integration = atenSubmodule;
1299 iridologie = mkOption {
1300 description = "environment configuration";
1303 environment = mkOption { type = str; description = "SPIP environment"; };
1304 mysql = mkMysqlOptions "Iridologie" {};
1305 ldap = mkLdapOptions "Iridologie" {};
1313 description = "Chloe configurations by environment";
1316 chloeSubmodule = mkOption {
1317 description = "environment configuration";
1320 environment = mkOption { type = str; description = "SPIP environment"; };
1321 mysql = mkMysqlOptions "Chloe" {};
1322 ldap = mkLdapOptions "Chloe" {};
1329 production = chloeSubmodule;
1330 integration = chloeSubmodule;
1332 description = "environment configuration";
1335 mysql = mkMysqlOptions "ChloeNew" {};
1336 ldap = mkLdapOptions "ChloeNew" {};
1337 secret = mkOption { type = str; description = "Symfony App secret"; };
1344 connexionswing = mkOption {
1345 description = "Connexionswing configurations by environment";
1348 csSubmodule = mkOption {
1349 description = "environment configuration";
1352 environment = mkOption { type = str; description = "Symfony environment"; };
1353 mysql = mkMysqlOptions "Connexionswing" {};
1354 secret = mkOption { type = str; description = "Symfony App secret"; };
1355 email = mkOption { type = str; description = "Symfony email notification"; };
1362 production = csSubmodule;
1363 integration = csSubmodule;
1368 description = "Naturaloutil configuration";
1371 mysql = mkMysqlOptions "Naturaloutil" {};
1372 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1376 telio_tortay = mkOption {
1377 description = "Telio Tortay configuration";
1380 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1384 ludivine = mkOption {
1385 description = "Ludivinecassal configurations by environment";
1388 lcSubmodule = mkOption {
1389 description = "environment configuration";
1392 environment = mkOption { type = str; description = "Symfony environment"; };
1393 mysql = mkMysqlOptions "LudivineCassal" {};
1394 ldap = mkLdapOptions "LudivineCassal" {};
1395 secret = mkOption { type = str; description = "Symfony App secret"; };
1402 production = lcSubmodule;
1403 integration = lcSubmodule;
1407 nicecoop = mkOption {
1408 description = "Nicecoop configuration";
1412 port = mkOption { description = "Port to listen to"; type = port; };
1413 longpoll_port = mkOption { description = "Port to listen to"; type = port; };
1414 postgresql = mkPsqlOptions "Odoo";
1415 admin_password = mkOption { type = str; description = "Admin password"; };
1418 smtp = mkSmtpOptions "GestionCompte";
1419 mysql = mkMysqlOptions "gestion-compte" {};
1420 secret = mkOption { type = str; description = "Application secret"; };
1421 adminpassword = mkOption { type = str; description = "Admin password"; };
1423 gestion-compte-integration = {
1424 smtp = mkSmtpOptions "GestionCompte";
1425 mysql = mkMysqlOptions "gestion-compte" {};
1426 secret = mkOption { type = str; description = "Application secret"; };
1427 adminpassword = mkOption { type = str; description = "Admin password"; };
1430 smtp = mkSmtpOptions "Copanier";
1431 staff = mkOption { type = listOf str; description = "List of staff members"; };
1437 description = "Emilia configuration";
1440 postgresql = mkPsqlOptions "Emilia";
1444 florian = mkOption {
1445 description = "Florian configuration";
1448 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1452 nassime = mkOption {
1453 description = "Nassime configuration";
1456 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1460 piedsjaloux = mkOption {
1461 description = "Piedsjaloux configurations by environment";
1464 pjSubmodule = mkOption {
1465 description = "environment configuration";
1468 environment = mkOption { type = str; description = "Symfony environment"; };
1469 mysql = mkMysqlOptions "Piedsjaloux" {};
1470 secret = mkOption { type = str; description = "Symfony App secret"; };
1477 production = pjSubmodule;
1478 integration = pjSubmodule;
1483 description = "Europe Richie configurations by environment";
1486 mysql = mkMysqlOptions "Richie" {};
1487 smtp_mailer = mkOption {
1488 description = "SMTP mailer configuration";
1491 user = mkOption { type = str; description = "Username"; };
1492 password = mkOption { type = str; description = "Password"; };
1499 caldance = mkOption {
1500 description = "Caldance configurations by environment";
1503 integration = mkOption {
1504 description = "environment configuration";
1507 password = mkOption { type = str; description = "Password file content for basic auth"; };
1514 tellesflorian = mkOption {
1515 description = "Tellesflorian configurations by environment";
1518 tfSubmodule = mkOption {
1519 description = "environment configuration";
1522 environment = mkOption { type = str; description = "Symfony environment"; };
1523 mysql = mkMysqlOptions "Tellesflorian" {};
1524 secret = mkOption { type = str; description = "Symfony App secret"; };
1525 invite_passwords = mkOption { type = str; description = "Password basic auth"; };
1532 integration = tfSubmodule;
1540 options.hostEnv = mkOption {
1543 default = config.myEnv.servers."${name}";
1544 description = "Host environment";