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 assetType = mkOption { type = enum ["tgz" "url" "googleFont"]; default = "url"; description = "Type of asset"; };
912 tgzRemoveComponents = mkOption { type = int; default = 0; description = "Remove components when extracting"; };
913 url = mkOption { type = str; description = "URL to fetch"; };
914 sha256 = mkOption { type = str; description = "Hash of the url"; };
917 description = "Assets to provide on assets.immae.eu";
920 description = "Davical configuration";
923 postgresql = mkPsqlOptions "Davical";
924 ldap = mkLdapOptions "Davical" {};
928 diaspora = mkOption {
929 description = "Diaspora configuration";
932 postgresql = mkPsqlOptions "Diaspora";
933 redis = mkRedisOptions "Diaspora";
934 ldap = mkLdapOptions "Diaspora" {};
935 secret_token = mkOption { type = str; description = "Secret token"; };
939 dmarc_reports = mkOption {
940 description = "DMARC reports configuration";
943 mysql = mkMysqlOptions "DMARC" {};
944 anonymous_key = mkOption { type = str; description = "Anonymous hashing key"; };
948 etherpad-lite = mkOption {
949 description = "Etherpad configuration";
952 postgresql = mkPsqlOptions "Etherpad";
953 ldap = mkLdapOptions "Etherpad" {
954 group_filter = mkOption { type = str; description = "Filter for groups"; };
956 adminPassword = mkOption { type = str; description = "Admin password for mypads / admin"; };
957 session_key = mkOption { type = str; description = "Session key"; };
958 api_key = mkOption { type = str; description = "API key"; };
962 gitolite = mkOption {
963 description = "Gitolite configuration";
966 ldap = mkLdapOptions "Gitolite" {};
968 description = "SSH key information";
971 public = mkOption { type = str; description = "Public part of the key"; };
972 private = mkOption { type = lines; description = "Private part of the key"; };
979 kanboard = mkOption {
980 description = "Kanboard configuration";
983 postgresql = mkPsqlOptions "Kanboard";
984 ldap = mkLdapOptions "Kanboard" {
985 admin_dn = mkOption { type = str; description = "Admin DN"; };
990 mantisbt = mkOption {
991 description = "Mantisbt configuration";
994 postgresql = mkPsqlOptions "Mantisbt";
995 ldap = mkLdapOptions "Mantisbt" {};
996 master_salt = mkOption { type = str; description = "Master salt for password hash"; };
1000 mastodon = mkOption {
1001 description = "Mastodon configuration";
1004 postgresql = mkPsqlOptions "Mastodon";
1005 redis = mkRedisOptions "Mastodon";
1006 ldap = mkLdapOptions "Mastodon" {};
1007 paperclip_secret = mkOption { type = str; description = "Paperclip secret"; };
1008 otp_secret = mkOption { type = str; description = "OTP secret"; };
1009 secret_key_base = mkOption { type = str; description = "Secret key base"; };
1011 description = "vapid key";
1014 private = mkOption { type = str; description = "Private key"; };
1015 public = mkOption { type = str; description = "Public key"; };
1022 mediagoblin = mkOption {
1023 description = "Mediagoblin configuration";
1026 postgresql = mkPsqlOptions "Mediagoblin";
1027 redis = mkRedisOptions "Mediagoblin";
1028 ldap = mkLdapOptions "Mediagoblin" {};
1032 nextcloud = mkOption {
1033 description = "Nextcloud configuration";
1036 postgresql = mkPsqlOptions "Peertube";
1037 redis = mkRedisOptions "Peertube";
1038 password_salt = mkOption { type = str; description = "Password salt"; };
1039 instance_id = mkOption { type = str; description = "Instance ID"; };
1040 secret = mkOption { type = str; description = "App secret"; };
1044 peertube = mkOption {
1045 description = "Peertube configuration";
1048 listenPort = mkOption { type = port; description = "Port to listen to"; };
1049 postgresql = mkPsqlOptions "Peertube";
1050 redis = mkRedisOptions "Peertube";
1051 ldap = mkLdapOptions "Peertube" {};
1055 syden_peertube = mkOption {
1056 description = "Peertube Syden configuration";
1059 listenPort = mkOption { type = port; description = "Port to listen to"; };
1060 postgresql = mkPsqlOptions "Peertube";
1061 redis = mkRedisOptions "Peertube";
1065 phpldapadmin = mkOption {
1066 description = "phpLdapAdmin configuration";
1069 ldap = mkLdapOptions "phpldapadmin" {};
1074 description = "Rompr configuration";
1078 description = "MPD configuration";
1081 host = mkOption { type = str; description = "Host for MPD"; };
1082 port = mkOption { type = port; description = "Port to access MPD host"; };
1089 roundcubemail = mkOption {
1090 description = "Roundcubemail configuration";
1093 postgresql = mkPsqlOptions "TT-RSS";
1094 secret = mkOption { type = str; description = "Secret"; };
1098 shaarli = mkOption {
1099 description = "Shaarli configuration";
1102 ldap = mkLdapOptions "Shaarli" {};
1106 status_engine = mkOption {
1107 description = "Status Engine configuration";
1110 mysql = mkMysqlOptions "StatusEngine" {};
1111 ldap = mkLdapOptions "StatusEngine" {};
1116 description = "Taskwarrior configuration";
1119 ldap = mkLdapOptions "Taskwarrior" {};
1120 taskwarrior-web = mkOption {
1121 description = "taskwarrior-web profiles";
1122 type = attrsOf (submodule {
1126 description = "List of ldap uids having access to this profile";
1128 org = mkOption { type = str; description = "Taskd organisation"; };
1129 key = mkOption { type = str; description = "Taskd key"; };
1130 date = mkOption { type = str; description = "Preferred date format"; };
1138 description = "TT-RSS configuration";
1141 postgresql = mkPsqlOptions "TT-RSS";
1142 ldap = mkLdapOptions "TT-RSS" {};
1146 wallabag = mkOption {
1147 description = "Wallabag configuration";
1150 postgresql = mkPsqlOptions "Wallabag";
1151 ldap = mkLdapOptions "Wallabag" {
1152 admin_filter = mkOption { type = str; description = "Admin users filter"; };
1154 redis = mkRedisOptions "Wallabag";
1155 secret = mkOption { type = str; description = "App secret"; };
1159 webhooks = mkOption {
1161 description = "Mapping 'name'.php => script for webhooks";
1163 csp_reports = mkOption {
1164 description = "CSP report configuration";
1167 report_uri = mkOption { type = str; description = "URI to report CSP violations to"; };
1168 policies = mkOption { type = attrsOf str; description = "CSP policies to apply"; };
1172 commento = mkOption {
1173 description = "Commento configuration";
1176 listenPort = mkOption { type = port; description = "Port to listen to"; };
1177 postgresql = mkPsqlOptions "Commento";
1178 smtp = mkSmtpOptions "Commento";
1182 cryptpad = mkOption {
1183 description = "Cryptpad configuration";
1184 type = attrsOf (submodule {
1186 email = mkOption { type = str; description = "Admin e-mail"; };
1187 admins = mkOption { type = listOf str; description = "Instance admin public keys"; };
1188 port = mkOption { type = port; description = "Port to listen to"; };
1193 description = "Ympd configuration";
1196 listenPort = mkOption { type = port; description = "Port to listen to"; };
1198 description = "MPD configuration";
1201 password = mkOption { type = str; description = "Password to access MPD host"; };
1202 host = mkOption { type = str; description = "Host for MPD"; };
1203 port = mkOption { type = port; description = "Port to access MPD host"; };
1211 description = "Umami configuration";
1214 listenPort = mkOption { type = port; description = "Port to listen to"; };
1215 postgresql = mkPsqlOptions "Umami";
1216 hashSalt = mkOption { type = str; description = "Hash salt"; };
1221 description = "Yourls configuration";
1224 mysql = mkMysqlOptions "Yourls" {};
1225 ldap = mkLdapOptions "Yourls" {};
1226 cookieKey = mkOption { type = str; description = "Cookie key"; };
1233 serverSpecific = mkOption { type = attrsOf unspecified; description = "Server specific configuration"; };
1234 websites = mkOption {
1235 description = "Websites configurations";
1238 christophe_carpentier = mkOption {
1239 description = "Christophe Carpentier configuration by environment";
1242 agorakit = mkOption {
1243 description = "Agorakit configuration";
1246 mysql = mkMysqlOptions "Agorakit" {};
1247 smtp = mkSmtpOptions "Agorakit";
1248 appkey = mkOption { type = str; description = "App key"; };
1256 description = "Immae configuration by environment";
1260 description = "Temp configuration";
1263 ldap = mkLdapOptions "Immae temp" {
1264 filter = mkOption { type = str; description = "Filter for user access"; };
1272 isabelle = mkOption {
1273 description = "Isabelle configurations by environment";
1276 atenSubmodule = mkOption {
1277 description = "environment configuration";
1280 environment = mkOption { type = str; description = "Symfony environment"; };
1281 secret = mkOption { type = str; description = "Symfony App secret"; };
1282 postgresql = mkPsqlOptions "Aten";
1289 aten_production = atenSubmodule;
1290 aten_integration = atenSubmodule;
1291 iridologie = mkOption {
1292 description = "environment configuration";
1295 environment = mkOption { type = str; description = "SPIP environment"; };
1296 mysql = mkMysqlOptions "Iridologie" {};
1297 ldap = mkLdapOptions "Iridologie" {};
1305 description = "Chloe configurations by environment";
1308 chloeSubmodule = mkOption {
1309 description = "environment configuration";
1312 environment = mkOption { type = str; description = "SPIP environment"; };
1313 mysql = mkMysqlOptions "Chloe" {};
1314 ldap = mkLdapOptions "Chloe" {};
1321 production = chloeSubmodule;
1322 integration = chloeSubmodule;
1324 description = "environment configuration";
1327 mysql = mkMysqlOptions "ChloeNew" {};
1328 ldap = mkLdapOptions "ChloeNew" {};
1329 secret = mkOption { type = str; description = "Symfony App secret"; };
1336 connexionswing = mkOption {
1337 description = "Connexionswing configurations by environment";
1340 csSubmodule = mkOption {
1341 description = "environment configuration";
1344 environment = mkOption { type = str; description = "Symfony environment"; };
1345 mysql = mkMysqlOptions "Connexionswing" {};
1346 secret = mkOption { type = str; description = "Symfony App secret"; };
1347 email = mkOption { type = str; description = "Symfony email notification"; };
1354 production = csSubmodule;
1355 integration = csSubmodule;
1360 description = "Naturaloutil configuration";
1363 mysql = mkMysqlOptions "Naturaloutil" {};
1364 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1368 telio_tortay = mkOption {
1369 description = "Telio Tortay configuration";
1372 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1376 ludivine = mkOption {
1377 description = "Ludivinecassal configurations by environment";
1380 lcSubmodule = mkOption {
1381 description = "environment configuration";
1384 environment = mkOption { type = str; description = "Symfony environment"; };
1385 mysql = mkMysqlOptions "LudivineCassal" {};
1386 ldap = mkLdapOptions "LudivineCassal" {};
1387 secret = mkOption { type = str; description = "Symfony App secret"; };
1394 production = lcSubmodule;
1395 integration = lcSubmodule;
1399 nicecoop = mkOption {
1400 description = "Nicecoop configuration";
1404 port = mkOption { description = "Port to listen to"; type = port; };
1405 longpoll_port = mkOption { description = "Port to listen to"; type = port; };
1406 postgresql = mkPsqlOptions "Odoo";
1407 admin_password = mkOption { type = str; description = "Admin password"; };
1410 smtp = mkSmtpOptions "GestionCompte";
1411 mysql = mkMysqlOptions "gestion-compte" {};
1412 secret = mkOption { type = str; description = "Application secret"; };
1413 adminpassword = mkOption { type = str; description = "Admin password"; };
1415 gestion-compte-integration = {
1416 smtp = mkSmtpOptions "GestionCompte";
1417 mysql = mkMysqlOptions "gestion-compte" {};
1418 secret = mkOption { type = str; description = "Application secret"; };
1419 adminpassword = mkOption { type = str; description = "Admin password"; };
1422 smtp = mkSmtpOptions "Copanier";
1423 staff = mkOption { type = listOf str; description = "List of staff members"; };
1429 description = "Emilia configuration";
1432 postgresql = mkPsqlOptions "Emilia";
1436 florian = mkOption {
1437 description = "Florian configuration";
1440 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1444 nassime = mkOption {
1445 description = "Nassime configuration";
1448 server_admin = mkOption { type = str; description = "Server admin e-mail"; };
1452 piedsjaloux = mkOption {
1453 description = "Piedsjaloux configurations by environment";
1456 pjSubmodule = mkOption {
1457 description = "environment configuration";
1460 environment = mkOption { type = str; description = "Symfony environment"; };
1461 mysql = mkMysqlOptions "Piedsjaloux" {};
1462 secret = mkOption { type = str; description = "Symfony App secret"; };
1469 production = pjSubmodule;
1470 integration = pjSubmodule;
1475 description = "Europe Richie configurations by environment";
1478 mysql = mkMysqlOptions "Richie" {};
1479 smtp_mailer = mkOption {
1480 description = "SMTP mailer configuration";
1483 user = mkOption { type = str; description = "Username"; };
1484 password = mkOption { type = str; description = "Password"; };
1491 caldance = mkOption {
1492 description = "Caldance configurations by environment";
1495 integration = mkOption {
1496 description = "environment configuration";
1499 password = mkOption { type = str; description = "Password file content for basic auth"; };
1506 tellesflorian = mkOption {
1507 description = "Tellesflorian configurations by environment";
1510 tfSubmodule = mkOption {
1511 description = "environment configuration";
1514 environment = mkOption { type = str; description = "Symfony environment"; };
1515 mysql = mkMysqlOptions "Tellesflorian" {};
1516 secret = mkOption { type = str; description = "Symfony App secret"; };
1517 invite_passwords = mkOption { type = str; description = "Password basic auth"; };
1524 integration = tfSubmodule;
1532 options.hostEnv = mkOption {
1535 default = config.myEnv.servers."${name}";
1536 description = "Host environment";