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 webhookTokens = mkOption {
891 type = nullOr (listOf str);
894 List of tokens allowed to push to project’s change_hook/base endpoint
904 description = "Tools configurations";
907 contact = mkOption { type = str; description = "Contact e-mail address"; };
910 type = attrsOf (submodule {
912 url = mkOption { type = str; description = "URL to fetch"; };
913 sha256 = mkOption { type = str; description = "Hash of the url"; };
916 description = "Assets to provide on assets.immae.eu";
919 description = "Davical configuration";
922 postgresql = mkPsqlOptions "Davical";
923 ldap = mkLdapOptions "Davical" {};
927 diaspora = mkOption {
928 description = "Diaspora configuration";
931 postgresql = mkPsqlOptions "Diaspora";
932 redis = mkRedisOptions "Diaspora";
933 ldap = mkLdapOptions "Diaspora" {};
934 secret_token = mkOption { type = str; description = "Secret token"; };
938 dmarc_reports = mkOption {
939 description = "DMARC reports configuration";
942 mysql = mkMysqlOptions "DMARC" {};
943 anonymous_key = mkOption { type = str; description = "Anonymous hashing key"; };
947 etherpad-lite = mkOption {
948 description = "Etherpad configuration";
951 postgresql = mkPsqlOptions "Etherpad";
952 ldap = mkLdapOptions "Etherpad" {
953 group_filter = mkOption { type = str; description = "Filter for groups"; };
955 adminPassword = mkOption { type = str; description = "Admin password for mypads / admin"; };
956 session_key = mkOption { type = str; description = "Session key"; };
957 api_key = mkOption { type = str; description = "API key"; };
961 gitolite = mkOption {
962 description = "Gitolite configuration";
965 ldap = mkLdapOptions "Gitolite" {};
967 description = "SSH key information";
970 public = mkOption { type = str; description = "Public part of the key"; };
971 private = mkOption { type = lines; description = "Private part of the key"; };
978 kanboard = mkOption {
979 description = "Kanboard configuration";
982 postgresql = mkPsqlOptions "Kanboard";
983 ldap = mkLdapOptions "Kanboard" {
984 admin_dn = mkOption { type = str; description = "Admin DN"; };
989 mantisbt = mkOption {
990 description = "Mantisbt configuration";
993 postgresql = mkPsqlOptions "Mantisbt";
994 ldap = mkLdapOptions "Mantisbt" {};
995 master_salt = mkOption { type = str; description = "Master salt for password hash"; };
999 mastodon = mkOption {
1000 description = "Mastodon configuration";
1003 postgresql = mkPsqlOptions "Mastodon";
1004 redis = mkRedisOptions "Mastodon";
1005 ldap = mkLdapOptions "Mastodon" {};
1006 paperclip_secret = mkOption { type = str; description = "Paperclip secret"; };
1007 otp_secret = mkOption { type = str; description = "OTP secret"; };
1008 secret_key_base = mkOption { type = str; description = "Secret key base"; };
1010 description = "vapid key";
1013 private = mkOption { type = str; description = "Private key"; };
1014 public = mkOption { type = str; description = "Public key"; };
1021 mediagoblin = mkOption {
1022 description = "Mediagoblin configuration";
1025 postgresql = mkPsqlOptions "Mediagoblin";
1026 redis = mkRedisOptions "Mediagoblin";
1027 ldap = mkLdapOptions "Mediagoblin" {};
1031 nextcloud = mkOption {
1032 description = "Nextcloud configuration";
1035 postgresql = mkPsqlOptions "Peertube";
1036 redis = mkRedisOptions "Peertube";
1037 password_salt = mkOption { type = str; description = "Password salt"; };
1038 instance_id = mkOption { type = str; description = "Instance ID"; };
1039 secret = mkOption { type = str; description = "App secret"; };
1043 peertube = mkOption {
1044 description = "Peertube configuration";
1047 listenPort = mkOption { type = port; description = "Port to listen to"; };
1048 postgresql = mkPsqlOptions "Peertube";
1049 redis = mkRedisOptions "Peertube";
1050 ldap = mkLdapOptions "Peertube" {};
1054 syden_peertube = mkOption {
1055 description = "Peertube Syden configuration";
1058 listenPort = mkOption { type = port; description = "Port to listen to"; };
1059 postgresql = mkPsqlOptions "Peertube";
1060 redis = mkRedisOptions "Peertube";
1064 phpldapadmin = mkOption {
1065 description = "phpLdapAdmin configuration";
1068 ldap = mkLdapOptions "phpldapadmin" {};
1073 description = "Rompr configuration";
1077 description = "MPD configuration";
1080 host = mkOption { type = str; description = "Host for MPD"; };
1081 port = mkOption { type = port; description = "Port to access MPD host"; };
1088 roundcubemail = mkOption {
1089 description = "Roundcubemail configuration";
1092 postgresql = mkPsqlOptions "TT-RSS";
1093 secret = mkOption { type = str; description = "Secret"; };
1097 shaarli = mkOption {
1098 description = "Shaarli configuration";
1101 ldap = mkLdapOptions "Shaarli" {};
1105 status_engine = mkOption {
1106 description = "Status Engine configuration";
1109 mysql = mkMysqlOptions "StatusEngine" {};
1110 ldap = mkLdapOptions "StatusEngine" {};
1115 description = "Taskwarrior configuration";
1118 ldap = mkLdapOptions "Taskwarrior" {};
1119 taskwarrior-web = mkOption {
1120 description = "taskwarrior-web profiles";
1121 type = attrsOf (submodule {
1125 description = "List of ldap uids having access to this profile";
1127 org = mkOption { type = str; description = "Taskd organisation"; };
1128 key = mkOption { type = str; description = "Taskd key"; };
1129 date = mkOption { type = str; description = "Preferred date format"; };
1137 description = "TT-RSS configuration";
1140 postgresql = mkPsqlOptions "TT-RSS";
1141 ldap = mkLdapOptions "TT-RSS" {};
1145 wallabag = mkOption {
1146 description = "Wallabag configuration";
1149 postgresql = mkPsqlOptions "Wallabag";
1150 ldap = mkLdapOptions "Wallabag" {
1151 admin_filter = mkOption { type = str; description = "Admin users filter"; };
1153 redis = mkRedisOptions "Wallabag";
1154 secret = mkOption { type = str; description = "App secret"; };
1158 webhooks = mkOption {
1160 description = "Mapping 'name'.php => script for webhooks";
1162 csp_reports = mkOption {
1163 description = "CSP report configuration";
1166 report_uri = mkOption { type = str; description = "URI to report CSP violations to"; };
1167 policies = mkOption { type = attrsOf str; description = "CSP policies to apply"; };
1171 commento = mkOption {
1172 description = "Commento configuration";
1175 listenPort = mkOption { type = port; description = "Port to listen to"; };
1176 postgresql = mkPsqlOptions "Commento";
1177 smtp = mkSmtpOptions "Commento";
1181 cryptpad = mkOption {
1182 description = "Cryptpad configuration";
1183 type = attrsOf (submodule {
1185 email = mkOption { type = str; description = "Admin e-mail"; };
1186 admins = mkOption { type = listOf str; description = "Instance admin public keys"; };
1187 port = mkOption { type = port; description = "Port to listen to"; };
1192 description = "Ympd configuration";
1195 listenPort = mkOption { type = port; description = "Port to listen to"; };
1197 description = "MPD configuration";
1200 password = mkOption { type = str; description = "Password to access MPD host"; };
1201 host = mkOption { type = str; description = "Host for MPD"; };
1202 port = mkOption { type = port; description = "Port to access MPD host"; };
1210 description = "Umami configuration";
1213 listenPort = mkOption { type = port; description = "Port to listen to"; };
1214 postgresql = mkPsqlOptions "Umami";
1215 hashSalt = mkOption { type = str; description = "Hash salt"; };
1220 description = "Yourls configuration";
1223 mysql = mkMysqlOptions "Yourls" {};
1224 ldap = mkLdapOptions "Yourls" {};
1225 cookieKey = mkOption { type = str; description = "Cookie key"; };
1232 serverSpecific = mkOption { type = attrsOf unspecified; description = "Server specific configuration"; };
1233 websites = mkOption {
1234 description = "Websites configurations";
1237 christophe_carpentier = mkOption {
1238 description = "Christophe Carpentier configuration by environment";
1241 agorakit = mkOption {
1242 description = "Agorakit configuration";
1245 mysql = mkMysqlOptions "Agorakit" {};
1246 smtp = mkSmtpOptions "Agorakit";
1247 appkey = mkOption { type = str; description = "App key"; };
1255 description = "Immae configuration by environment";
1259 description = "Temp configuration";
1262 ldap = mkLdapOptions "Immae temp" {
1263 filter = mkOption { type = str; description = "Filter for user access"; };
1271 isabelle = mkOption {
1272 description = "Isabelle configurations by environment";
1275 atenSubmodule = mkOption {
1276 description = "environment configuration";
1279 environment = mkOption { type = str; description = "Symfony environment"; };
1280 secret = mkOption { type = str; description = "Symfony App secret"; };
1281 postgresql = mkPsqlOptions "Aten";
1288 aten_production = atenSubmodule;
1289 aten_integration = atenSubmodule;
1290 iridologie = mkOption {
1291 description = "environment configuration";
1294 environment = mkOption { type = str; description = "SPIP environment"; };
1295 mysql = mkMysqlOptions "Iridologie" {};
1296 ldap = mkLdapOptions "Iridologie" {};
1304 description = "Chloe configurations by environment";
1307 chloeSubmodule = mkOption {
1308 description = "environment configuration";
1311 environment = mkOption { type = str; description = "SPIP environment"; };
1312 mysql = mkMysqlOptions "Chloe" {};
1313 ldap = mkLdapOptions "Chloe" {};
1320 production = chloeSubmodule;
1321 integration = chloeSubmodule;
1323 description = "environment configuration";
1326 mysql = mkMysqlOptions "ChloeNew" {};
1327 ldap = mkLdapOptions "ChloeNew" {};
1328 secret = mkOption { type = str; description = "Symfony App secret"; };
1335 connexionswing = mkOption {
1336 description = "Connexionswing configurations by environment";
1339 csSubmodule = mkOption {
1340 description = "environment configuration";
1343 environment = mkOption { type = str; description = "Symfony environment"; };
1344 mysql = mkMysqlOptions "Connexionswing" {};
1345 secret = mkOption { type = str; description = "Symfony App secret"; };
1346 email = mkOption { type = str; description = "Symfony email notification"; };
1353 production = csSubmodule;
1354 integration = csSubmodule;
1359 description = "Naturaloutil configuration";
1362 mysql = mkMysqlOptions "Naturaloutil" {};
1363 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1367 telio_tortay = mkOption {
1368 description = "Telio Tortay configuration";
1371 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1375 ludivine = mkOption {
1376 description = "Ludivinecassal configurations by environment";
1379 lcSubmodule = mkOption {
1380 description = "environment configuration";
1383 environment = mkOption { type = str; description = "Symfony environment"; };
1384 mysql = mkMysqlOptions "LudivineCassal" {};
1385 ldap = mkLdapOptions "LudivineCassal" {};
1386 secret = mkOption { type = str; description = "Symfony App secret"; };
1393 production = lcSubmodule;
1394 integration = lcSubmodule;
1398 nicecoop = mkOption {
1399 description = "Nicecoop configuration";
1403 port = mkOption { description = "Port to listen to"; type = port; };
1404 longpoll_port = mkOption { description = "Port to listen to"; type = port; };
1405 postgresql = mkPsqlOptions "Odoo";
1406 admin_password = mkOption { type = str; description = "Admin password"; };
1409 smtp = mkSmtpOptions "GestionCompte";
1410 mysql = mkMysqlOptions "gestion-compte" {};
1411 secret = mkOption { type = str; description = "Application secret"; };
1412 adminpassword = mkOption { type = str; description = "Admin password"; };
1414 gestion-compte-integration = {
1415 smtp = mkSmtpOptions "GestionCompte";
1416 mysql = mkMysqlOptions "gestion-compte" {};
1417 secret = mkOption { type = str; description = "Application secret"; };
1418 adminpassword = mkOption { type = str; description = "Admin password"; };
1421 smtp = mkSmtpOptions "Copanier";
1422 staff = mkOption { type = listOf str; description = "List of staff members"; };
1428 description = "Emilia configuration";
1431 postgresql = mkPsqlOptions "Emilia";
1435 florian = mkOption {
1436 description = "Florian configuration";
1439 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1443 nassime = mkOption {
1444 description = "Nassime configuration";
1447 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1451 piedsjaloux = mkOption {
1452 description = "Piedsjaloux configurations by environment";
1455 pjSubmodule = mkOption {
1456 description = "environment configuration";
1459 environment = mkOption { type = str; description = "Symfony environment"; };
1460 mysql = mkMysqlOptions "Piedsjaloux" {};
1461 secret = mkOption { type = str; description = "Symfony App secret"; };
1468 production = pjSubmodule;
1469 integration = pjSubmodule;
1474 description = "Europe Richie configurations by environment";
1477 mysql = mkMysqlOptions "Richie" {};
1478 smtp_mailer = mkOption {
1479 description = "SMTP mailer configuration";
1482 user = mkOption { type = str; description = "Username"; };
1483 password = mkOption { type = str; description = "Password"; };
1490 caldance = mkOption {
1491 description = "Caldance configurations by environment";
1494 integration = mkOption {
1495 description = "environment configuration";
1498 password = mkOption { type = str; description = "Password file content for basic auth"; };
1505 tellesflorian = mkOption {
1506 description = "Tellesflorian configurations by environment";
1509 tfSubmodule = mkOption {
1510 description = "environment configuration";
1513 environment = mkOption { type = str; description = "Symfony environment"; };
1514 mysql = mkMysqlOptions "Tellesflorian" {};
1515 secret = mkOption { type = str; description = "Symfony App secret"; };
1516 invite_passwords = mkOption { type = str; description = "Password basic auth"; };
1523 integration = tfSubmodule;
1531 options.hostEnv = mkOption {
1534 default = config.myEnv.servers."${name}";
1535 description = "Host environment";