From 1a64deeb894dc95e2645a75771732c6cc53a79ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isma=C3=ABl=20Bouya?=
Date: Wed, 4 Oct 2023 01:35:06 +0200
Subject: Squash changes containing private information
There were a lot of changes since the previous commit, but a lot of them
contained personnal information about users. All thos changes got
stashed into a single commit (history is kept in a different place) and
private information was moved in a separate private repository
---
modules/default.nix | 29 -
modules/duply_backup/default.nix | 124 -
modules/naemon/default.nix | 183 -
modules/naemon/naemon.cfg | 1059 ---
modules/private/buildbot/common/build_helpers.py | 277 -
modules/private/buildbot/common/libvirt.py | 318 -
modules/private/buildbot/common/master.cfg | 69 -
modules/private/buildbot/default.nix | 244 -
.../private/buildbot/projects/caldance/__init__.py | 198 -
.../buildbot/projects/cryptoportfolio/__init__.py | 169 -
.../private/buildbot/projects/denise/__init__.py | 186 -
.../private/buildbot/projects/immaeEu/__init__.py | 314 -
.../projects/immaeEu/scripts/lacells_download | 163 -
modules/private/buildbot/projects/test/__init__.py | 197 -
modules/private/certificates.nix | 199 -
modules/private/databases/default.nix | 57 -
modules/private/databases/mariadb.nix | 182 -
modules/private/databases/mariadb_replication.nix | 251 -
modules/private/databases/openldap/default.nix | 147 -
.../private/databases/openldap/eldiron_schemas.nix | 21 -
modules/private/databases/openldap/immae.schema | 179 -
modules/private/databases/openldap_replication.nix | 166 -
modules/private/databases/postgresql.nix | 228 -
.../private/databases/postgresql_replication.nix | 182 -
modules/private/databases/redis.nix | 133 -
modules/private/databases/redis_replication.nix | 171 -
modules/private/databases/utils.nix | 30 -
modules/private/default.nix | 136 -
modules/private/dns.nix | 197 -
modules/private/ejabberd/default.nix | 92 -
modules/private/ejabberd/ejabberd.yml | 231 -
modules/private/environment.nix | 1492 ----
modules/private/ftp.nix | 248 -
modules/private/ftp_sync.sh | 47 -
modules/private/gemini/default.nix | 26 -
modules/private/gemini/public/index.gmi | 70 -
modules/private/gitolite/default.nix | 77 -
modules/private/gitolite/gitolite_ldap_groups.sh | 15 -
modules/private/gitolite/ldap_gitolite.sh | 33 -
modules/private/irc.nix | 54 -
modules/private/loginctl-linger.nix | 47 -
modules/private/mail/default.nix | 42 -
modules/private/mail/dovecot.nix | 292 -
modules/private/mail/filter-rewrite-from.py | 68 -
modules/private/mail/milters.nix | 88 -
modules/private/mail/opensmtpd.nix | 57 -
modules/private/mail/postfix.nix | 471 -
modules/private/mail/relay.nix | 235 -
modules/private/mail/rspamd.nix | 87 -
modules/private/mail/scan_reported_mails | 21 -
modules/private/mail/sieve_bin/imapsieve_copy | 8 -
modules/private/mail/sieve_scripts/backup.sieve | 7 -
.../private/mail/sieve_scripts/report_ham.sieve | 11 -
.../private/mail/sieve_scripts/report_spam.sieve | 3 -
modules/private/mail/sympa.nix | 213 -
modules/private/mail/verify_from.py | 60 -
modules/private/monitoring/default.nix | 249 -
modules/private/monitoring/myplugins.nix | 389 -
modules/private/monitoring/nagios-cli.cfg | 68 -
modules/private/monitoring/objects_backup-2.nix | 111 -
modules/private/monitoring/objects_common.nix | 253 -
modules/private/monitoring/objects_dilion.nix | 32 -
modules/private/monitoring/objects_eban.nix | 70 -
modules/private/monitoring/objects_eldiron.nix | 38 -
modules/private/monitoring/objects_master.nix | 39 -
.../private/monitoring/objects_monitoring-1.nix | 714 --
modules/private/monitoring/objects_phare.nix | 17 -
.../private/monitoring/objects_quatresaisons.nix | 38 -
modules/private/monitoring/objects_tiboqorl-fr.nix | 174 -
modules/private/monitoring/objects_ulminfo-fr.nix | 17 -
.../private/monitoring/plugins/check_backup_age | 66 -
modules/private/monitoring/plugins/check_bandwidth | 123 -
modules/private/monitoring/plugins/check_command | 113 -
modules/private/monitoring/plugins/check_emails | 121 -
modules/private/monitoring/plugins/check_eriomem | 83 -
.../private/monitoring/plugins/check_ftp_database | 11 -
modules/private/monitoring/plugins/check_git | 81 -
.../monitoring/plugins/check_imap_connection | 52 -
.../monitoring/plugins/check_last_file_date | 28 -
modules/private/monitoring/plugins/check_mem.sh | 29 -
.../monitoring/plugins/check_mysql_replication | 41 -
.../monitoring/plugins/check_openldap_replication | 54 -
modules/private/monitoring/plugins/check_ovh_sms | 25 -
.../plugins/check_postgres_database_count | 32 -
.../monitoring/plugins/check_postgres_replication | 35 -
.../monitoring/plugins/check_redis_replication | 38 -
.../private/monitoring/plugins/check_zfs_snapshot | 325 -
modules/private/monitoring/plugins/notify_by_email | 29 -
modules/private/monitoring/plugins/notify_by_slack | 46 -
modules/private/monitoring/plugins/notify_eban_url | 6 -
modules/private/monitoring/plugins/send_nrdp.sh | 57 -
modules/private/monitoring/send_mails | 15 -
modules/private/monitoring/status.nix | 93 -
modules/private/monitoring/status/app.py | 414 -
modules/private/monitoring/status_engine.nix | 115 -
modules/private/monitoring/to_objects.nix | 77 -
modules/private/mpd.nix | 60 -
modules/private/pub/default.nix | 56 -
modules/private/pub/ldap_pub.sh | 56 -
modules/private/pub/restrict | 64 -
modules/private/pub/tmux.restrict.conf | 43 -
modules/private/ssh/default.nix | 91 -
modules/private/ssh/ldap_authorized_keys.sh | 52 -
modules/private/ssh/ldap_regular.sh | 19 -
modules/private/system.nix | 98 -
modules/private/system/backup-2.nix | 137 -
modules/private/system/dilion.nix | 242 -
modules/private/system/dilion/vms.nix | 185 -
.../system/dilion/vms/base_configuration.nix | 21 -
modules/private/system/dilion/vms/base_image.nix | 94 -
.../system/dilion/vms/buildbot_configuration.nix | 67 -
modules/private/system/eldiron.nix | 228 -
modules/private/system/monitoring-1.nix | 69 -
modules/private/system/quatresaisons.nix | 436 -
modules/private/system/quatresaisons/databases.nix | 147 -
modules/private/system/quatresaisons/landing.yml | 32 -
.../private/system/quatresaisons/landing_4c.yml | 24 -
modules/private/system/quatresaisons/nextcloud.nix | 141 -
modules/private/tasks/default.nix | 355 -
modules/private/tasks/www/index.php | 168 -
modules/private/vpn/default.nix | 65 -
modules/private/vpn/tinc/host-down | 7 -
modules/private/vpn/tinc/host-up | 11 -
modules/private/vpn/tinc/tinc-down | 12 -
modules/private/vpn/tinc/tinc-up | 14 -
modules/private/vpn/tinc/tinc.conf | 11 -
.../websites/_www/googleb6d69446ff4ca3e5.html | 1 -
modules/private/websites/_www/index.htm | 9 -
.../private/websites/_www/maintenance_immae.html | 58 -
modules/private/websites/_www/nossl.html | 11 -
modules/private/websites/bakeer/cloud.nix | 23 -
.../capitaines/discourse_static/discourse.png | Bin 2440 -> 0 bytes
.../capitaines/discourse_static/index.html | 28 -
.../private/websites/capitaines/landing_pages.nix | 57 -
.../websites/capitaines/mastodon_static/index.html | 29 -
.../websites/capitaines/mastodon_static/oops.png | Bin 120305 -> 0 bytes
modules/private/websites/chloe/app/default.nix | 22 -
modules/private/websites/chloe/config/chmod.php | 4 -
modules/private/websites/chloe/config/connect.php | 15 -
modules/private/websites/chloe/config/ldap.php | 9 -
modules/private/websites/chloe/integration.nix | 104 -
modules/private/websites/chloe/production.nix | 112 -
modules/private/websites/cip-ca/sympa.nix | 28 -
modules/private/websites/commons/adminer.nix | 4 -
.../websites/connexionswing/app/default.nix | 29 -
.../websites/connexionswing/app/php-packages.nix | 597 --
.../websites/connexionswing/integration.nix | 141 -
.../private/websites/connexionswing/production.nix | 110 -
modules/private/websites/default.nix | 324 -
modules/private/websites/denise/aventuriers.nix | 26 -
modules/private/websites/denise/bingo.nix | 100 -
modules/private/websites/denise/denisejerome.nix | 31 -
modules/private/websites/denise/evariste.nix | 104 -
modules/private/websites/denise/oms.nix | 100 -
modules/private/websites/denise/production.nix | 25 -
.../private/websites/emilia/atelierfringant.nix | 65 -
modules/private/websites/emilia/moodle.nix | 65 -
modules/private/websites/emilia/moodle/pause.html | 48 -
modules/private/websites/florian/app.nix | 142 -
modules/private/websites/florian/app/default.nix | 27 -
.../private/websites/florian/app/php-packages.nix | 389 -
modules/private/websites/florian/integration.nix | 34 -
modules/private/websites/florian/production.nix | 34 -
.../websites/immae/chatons/immae-eu.properties | 46 -
.../immae/chatons/service-etherpad.properties | 164 -
.../immae/eurl/certificates/2021-certificate.crt | 23 -
modules/private/websites/immae/matrix/client | 8 -
modules/private/websites/immae/matrix/server | 3 -
modules/private/websites/immae/production.nix | 137 -
modules/private/websites/immae/release.nix | 39 -
modules/private/websites/immae/temp.nix | 64 -
.../private/websites/isabelle/aten_app/default.nix | 61 -
.../websites/isabelle/aten_app/php-packages.nix | 740 --
.../websites/isabelle/aten_app/yarn-packages.nix | 7871 ----------------
.../private/websites/isabelle/aten_integration.nix | 91 -
.../private/websites/isabelle/aten_production.nix | 90 -
modules/private/websites/isabelle/config/chmod.php | 4 -
.../private/websites/isabelle/config/connect.php | 15 -
modules/private/websites/isabelle/config/ldap.php | 9 -
modules/private/websites/isabelle/iridologie.nix | 113 -
.../websites/isabelle/iridologie_app/default.nix | 19 -
modules/private/websites/jerome/naturaloutil.nix | 97 -
modules/private/websites/leila/production.nix | 114 -
modules/private/websites/ludivine/app/default.nix | 37 -
.../private/websites/ludivine/app/php-packages.nix | 868 --
modules/private/websites/ludivine/integration.nix | 145 -
modules/private/websites/ludivine/production.nix | 116 -
modules/private/websites/moomin.txt | 16 -
modules/private/websites/nassime/production.nix | 35 -
modules/private/websites/nath/villon.nix | 42 -
modules/private/websites/papa/maison_bbc.nix | 28 -
.../websites/papa/maison_bbc_static/data.json | 4101 ---------
.../websites/papa/maison_bbc_static/favicon.ico | Bin 318 -> 0 bytes
.../websites/papa/maison_bbc_static/index.html | 164 -
.../websites/papa/maison_bbc_static/lamaison.png | Bin 259991 -> 0 bytes
modules/private/websites/papa/surveillance.nix | 50 -
.../websites/patrick_fodella/altermondia.nix | 73 -
.../private/websites/patrick_fodella/ecolyeu.nix | 72 -
.../private/websites/piedsjaloux/app/default.nix | 29 -
.../websites/piedsjaloux/app/php-packages.nix | 1009 ---
.../private/websites/piedsjaloux/integration.nix | 135 -
.../private/websites/piedsjaloux/production.nix | 106 -
.../private/websites/ressourcerie_banon/cloud.nix | 20 -
.../websites/ressourcerie_banon/cryptpad.nix | 49 -
.../websites/ressourcerie_banon/production.nix | 70 -
modules/private/websites/richie/production.nix | 106 -
modules/private/websites/syden/peertube.nix | 132 -
.../private/websites/telio_tortay/production.nix | 81 -
modules/private/websites/tools/assets/default.nix | 39 -
.../websites/tools/assets/static/favicon.png | Bin 1734 -> 0 bytes
.../websites/tools/assets/static/logger.png | Bin 3340 -> 0 bytes
.../websites/tools/assets/static/logger.txt | 3 -
.../private/websites/tools/assets/static/logo.jpg | Bin 6931 -> 0 bytes
.../private/websites/tools/assets/static/logo.txt | 7 -
.../websites/tools/assets/static/logo_big.jpg | Bin 16390 -> 0 bytes
.../websites/tools/assets/static/logo_big.txt | 7 -
.../websites/tools/assets/static/logo_center.jpg | Bin 29509 -> 0 bytes
.../websites/tools/assets/static/logo_center.txt | 8 -
.../websites/tools/assets/static/monitoring.png | Bin 57395 -> 0 bytes
.../websites/tools/assets/static/monitoring.txt | 3 -
.../websites/tools/assets/static/photos/ct.jpg | Bin 55914 -> 0 bytes
.../tools/assets/static/photos/fretlink.jpg | Bin 1520106 -> 0 bytes
.../websites/tools/assets/static/photos/raton.jpg | Bin 17614 -> 0 bytes
modules/private/websites/tools/cloud/default.nix | 184 -
modules/private/websites/tools/cloud/farm.nix | 123 -
.../private/websites/tools/commento/default.nix | 59 -
.../private/websites/tools/cryptpad/default.nix | 50 -
modules/private/websites/tools/cryptpad/farm.nix | 180 -
modules/private/websites/tools/dav/davical.nix | 133 -
modules/private/websites/tools/dav/default.nix | 55 -
modules/private/websites/tools/dav/www/index.html | 42 -
modules/private/websites/tools/db/default.nix | 21 -
.../private/websites/tools/diaspora/default.nix | 185 -
modules/private/websites/tools/ether/default.nix | 216 -
.../websites/tools/games/codenames/codenames.patch | 8306 -----------------
.../websites/tools/games/codenames/default.nix | 50 -
.../websites/tools/games/codenames/deps.nix | 11 -
.../websites/tools/games/codenames/elm-srcs.nix | 77 -
.../websites/tools/games/codenames/frontend.nix | 22 -
.../websites/tools/games/codenames/greenapid.nix | 18 -
.../websites/tools/games/codenames/greenapid.patch | 39 -
.../tools/games/codenames/node-packages.nix | 7621 ----------------
.../websites/tools/games/codenames/registry.dat | Bin 105421 -> 0 bytes
.../websites/tools/games/codenames/shell.nix | 50 -
.../tools/games/codenames/wordlists/french.txt | 694 --
.../tools/games/terraforming-mars/default.nix | 48 -
.../games/terraforming-mars/node-packages.nix | 4353 ---------
.../games/terraforming-mars/terraforming-mars.nix | 36 -
modules/private/websites/tools/git/default.nix | 49 -
modules/private/websites/tools/git/gitweb.nix | 119 -
modules/private/websites/tools/git/mantisbt.nix | 91 -
modules/private/websites/tools/im/default.nix | 42 -
.../private/websites/tools/im/www/converse.html | 57 -
modules/private/websites/tools/im/www/index.html | 47 -
modules/private/websites/tools/mail/default.nix | 79 -
modules/private/websites/tools/mail/mta-sts.nix | 54 -
modules/private/websites/tools/mail/rainloop.nix | 54 -
.../private/websites/tools/mail/roundcubemail.nix | 118 -
modules/private/websites/tools/mail/www/index.html | 74 -
.../private/websites/tools/mastodon/default.nix | 136 -
modules/private/websites/tools/mgoblin/default.nix | 134 -
.../private/websites/tools/peertube/default.nix | 94 -
.../private/websites/tools/performance/default.nix | 88 -
modules/private/websites/tools/stats/default.nix | 51 -
modules/private/websites/tools/tools/adminer.nix | 46 -
.../private/websites/tools/tools/csp_reports.nix | 11 -
modules/private/websites/tools/tools/default.nix | 429 -
.../private/websites/tools/tools/dmarc_reports.nix | 59 -
.../websites/tools/tools/dmarc_reports/api.php | 122 -
.../websites/tools/tools/dmarc_reports/app.js | 103 -
.../websites/tools/tools/dmarc_reports/default.css | 130 -
.../websites/tools/tools/dmarc_reports/index.html | 128 -
modules/private/websites/tools/tools/dokuwiki.nix | 56 -
modules/private/websites/tools/tools/grocy.nix | 48 -
modules/private/websites/tools/tools/kanboard.nix | 80 -
modules/private/websites/tools/tools/landing.nix | 29 -
.../websites/tools/tools/landing/ldap_password.php | 140 -
.../websites/tools/tools/landing/ldap_ssh_keys.php | 348 -
.../private/websites/tools/tools/landing/myip.php | 1 -
.../websites/tools/tools/landing/node-packages.nix | 130 -
.../tools/tools/landing/report_csp_violation.php | 22 -
.../websites/tools/tools/landing/yarn-packages.nix | 9357 --------------------
modules/private/websites/tools/tools/ldap.nix | 69 -
modules/private/websites/tools/tools/phpbb.nix | 55 -
modules/private/websites/tools/tools/rompr.nix | 72 -
modules/private/websites/tools/tools/shaarli.nix | 66 -
modules/private/websites/tools/tools/ttrss.nix | 129 -
modules/private/websites/tools/tools/wallabag.nix | 142 -
modules/private/websites/tools/tools/webhooks.nix | 17 -
modules/private/websites/tools/tools/ympd.nix | 40 -
modules/private/websites/tools/tools/yourls.nix | 86 -
modules/private/websites/tools/vpn/default.nix | 13 -
modules/private/websites/tools/vpn/www/index.html | 91 -
modules/private/websites/tools/vpn/www/style.css | 61 -
modules/webapps/diaspora.nix | 173 -
modules/webapps/etherpad-lite.nix | 162 -
modules/webapps/mastodon.nix | 265 -
modules/webapps/mediagoblin.nix | 231 -
modules/webapps/webstats/default.nix | 80 -
modules/webapps/webstats/goaccess.conf | 100 -
modules/websites/default.nix | 281 -
modules/websites/httpd-service-builder.nix | 735 --
modules/websites/httpd-service-builder.patch | 150 -
modules/websites/nosslVhost/index.html | 11 -
modules/websites/php-application.nix | 224 -
modules/zrepl.nix | 45 -
306 files changed, 75788 deletions(-)
delete mode 100644 modules/default.nix
delete mode 100644 modules/duply_backup/default.nix
delete mode 100644 modules/naemon/default.nix
delete mode 100644 modules/naemon/naemon.cfg
delete mode 100644 modules/private/buildbot/common/build_helpers.py
delete mode 100644 modules/private/buildbot/common/libvirt.py
delete mode 100644 modules/private/buildbot/common/master.cfg
delete mode 100644 modules/private/buildbot/default.nix
delete mode 100644 modules/private/buildbot/projects/caldance/__init__.py
delete mode 100644 modules/private/buildbot/projects/cryptoportfolio/__init__.py
delete mode 100644 modules/private/buildbot/projects/denise/__init__.py
delete mode 100644 modules/private/buildbot/projects/immaeEu/__init__.py
delete mode 100755 modules/private/buildbot/projects/immaeEu/scripts/lacells_download
delete mode 100644 modules/private/buildbot/projects/test/__init__.py
delete mode 100644 modules/private/certificates.nix
delete mode 100644 modules/private/databases/default.nix
delete mode 100644 modules/private/databases/mariadb.nix
delete mode 100644 modules/private/databases/mariadb_replication.nix
delete mode 100644 modules/private/databases/openldap/default.nix
delete mode 100644 modules/private/databases/openldap/eldiron_schemas.nix
delete mode 100644 modules/private/databases/openldap/immae.schema
delete mode 100644 modules/private/databases/openldap_replication.nix
delete mode 100644 modules/private/databases/postgresql.nix
delete mode 100644 modules/private/databases/postgresql_replication.nix
delete mode 100644 modules/private/databases/redis.nix
delete mode 100644 modules/private/databases/redis_replication.nix
delete mode 100644 modules/private/databases/utils.nix
delete mode 100644 modules/private/default.nix
delete mode 100644 modules/private/dns.nix
delete mode 100644 modules/private/ejabberd/default.nix
delete mode 100644 modules/private/ejabberd/ejabberd.yml
delete mode 100644 modules/private/environment.nix
delete mode 100644 modules/private/ftp.nix
delete mode 100755 modules/private/ftp_sync.sh
delete mode 100644 modules/private/gemini/default.nix
delete mode 100644 modules/private/gemini/public/index.gmi
delete mode 100644 modules/private/gitolite/default.nix
delete mode 100755 modules/private/gitolite/gitolite_ldap_groups.sh
delete mode 100644 modules/private/gitolite/ldap_gitolite.sh
delete mode 100644 modules/private/irc.nix
delete mode 100644 modules/private/loginctl-linger.nix
delete mode 100644 modules/private/mail/default.nix
delete mode 100644 modules/private/mail/dovecot.nix
delete mode 100755 modules/private/mail/filter-rewrite-from.py
delete mode 100644 modules/private/mail/milters.nix
delete mode 100644 modules/private/mail/opensmtpd.nix
delete mode 100644 modules/private/mail/postfix.nix
delete mode 100644 modules/private/mail/relay.nix
delete mode 100644 modules/private/mail/rspamd.nix
delete mode 100755 modules/private/mail/scan_reported_mails
delete mode 100755 modules/private/mail/sieve_bin/imapsieve_copy
delete mode 100644 modules/private/mail/sieve_scripts/backup.sieve
delete mode 100644 modules/private/mail/sieve_scripts/report_ham.sieve
delete mode 100644 modules/private/mail/sieve_scripts/report_spam.sieve
delete mode 100644 modules/private/mail/sympa.nix
delete mode 100755 modules/private/mail/verify_from.py
delete mode 100644 modules/private/monitoring/default.nix
delete mode 100644 modules/private/monitoring/myplugins.nix
delete mode 100644 modules/private/monitoring/nagios-cli.cfg
delete mode 100644 modules/private/monitoring/objects_backup-2.nix
delete mode 100644 modules/private/monitoring/objects_common.nix
delete mode 100644 modules/private/monitoring/objects_dilion.nix
delete mode 100644 modules/private/monitoring/objects_eban.nix
delete mode 100644 modules/private/monitoring/objects_eldiron.nix
delete mode 100644 modules/private/monitoring/objects_master.nix
delete mode 100644 modules/private/monitoring/objects_monitoring-1.nix
delete mode 100644 modules/private/monitoring/objects_phare.nix
delete mode 100644 modules/private/monitoring/objects_quatresaisons.nix
delete mode 100644 modules/private/monitoring/objects_tiboqorl-fr.nix
delete mode 100644 modules/private/monitoring/objects_ulminfo-fr.nix
delete mode 100755 modules/private/monitoring/plugins/check_backup_age
delete mode 100755 modules/private/monitoring/plugins/check_bandwidth
delete mode 100755 modules/private/monitoring/plugins/check_command
delete mode 100755 modules/private/monitoring/plugins/check_emails
delete mode 100755 modules/private/monitoring/plugins/check_eriomem
delete mode 100755 modules/private/monitoring/plugins/check_ftp_database
delete mode 100755 modules/private/monitoring/plugins/check_git
delete mode 100755 modules/private/monitoring/plugins/check_imap_connection
delete mode 100755 modules/private/monitoring/plugins/check_last_file_date
delete mode 100755 modules/private/monitoring/plugins/check_mem.sh
delete mode 100755 modules/private/monitoring/plugins/check_mysql_replication
delete mode 100755 modules/private/monitoring/plugins/check_openldap_replication
delete mode 100755 modules/private/monitoring/plugins/check_ovh_sms
delete mode 100755 modules/private/monitoring/plugins/check_postgres_database_count
delete mode 100755 modules/private/monitoring/plugins/check_postgres_replication
delete mode 100755 modules/private/monitoring/plugins/check_redis_replication
delete mode 100755 modules/private/monitoring/plugins/check_zfs_snapshot
delete mode 100755 modules/private/monitoring/plugins/notify_by_email
delete mode 100755 modules/private/monitoring/plugins/notify_by_slack
delete mode 100755 modules/private/monitoring/plugins/notify_eban_url
delete mode 100755 modules/private/monitoring/plugins/send_nrdp.sh
delete mode 100755 modules/private/monitoring/send_mails
delete mode 100644 modules/private/monitoring/status.nix
delete mode 100755 modules/private/monitoring/status/app.py
delete mode 100644 modules/private/monitoring/status_engine.nix
delete mode 100644 modules/private/monitoring/to_objects.nix
delete mode 100644 modules/private/mpd.nix
delete mode 100644 modules/private/pub/default.nix
delete mode 100644 modules/private/pub/ldap_pub.sh
delete mode 100644 modules/private/pub/restrict
delete mode 100644 modules/private/pub/tmux.restrict.conf
delete mode 100644 modules/private/ssh/default.nix
delete mode 100755 modules/private/ssh/ldap_authorized_keys.sh
delete mode 100644 modules/private/ssh/ldap_regular.sh
delete mode 100644 modules/private/system.nix
delete mode 100644 modules/private/system/backup-2.nix
delete mode 100644 modules/private/system/dilion.nix
delete mode 100644 modules/private/system/dilion/vms.nix
delete mode 100644 modules/private/system/dilion/vms/base_configuration.nix
delete mode 100644 modules/private/system/dilion/vms/base_image.nix
delete mode 100644 modules/private/system/dilion/vms/buildbot_configuration.nix
delete mode 100644 modules/private/system/eldiron.nix
delete mode 100644 modules/private/system/monitoring-1.nix
delete mode 100644 modules/private/system/quatresaisons.nix
delete mode 100644 modules/private/system/quatresaisons/databases.nix
delete mode 100644 modules/private/system/quatresaisons/landing.yml
delete mode 100644 modules/private/system/quatresaisons/landing_4c.yml
delete mode 100644 modules/private/system/quatresaisons/nextcloud.nix
delete mode 100644 modules/private/tasks/default.nix
delete mode 100644 modules/private/tasks/www/index.php
delete mode 100644 modules/private/vpn/default.nix
delete mode 100755 modules/private/vpn/tinc/host-down
delete mode 100755 modules/private/vpn/tinc/host-up
delete mode 100755 modules/private/vpn/tinc/tinc-down
delete mode 100755 modules/private/vpn/tinc/tinc-up
delete mode 100644 modules/private/vpn/tinc/tinc.conf
delete mode 100644 modules/private/websites/_www/googleb6d69446ff4ca3e5.html
delete mode 100644 modules/private/websites/_www/index.htm
delete mode 100644 modules/private/websites/_www/maintenance_immae.html
delete mode 100644 modules/private/websites/_www/nossl.html
delete mode 100644 modules/private/websites/bakeer/cloud.nix
delete mode 100644 modules/private/websites/capitaines/discourse_static/discourse.png
delete mode 100644 modules/private/websites/capitaines/discourse_static/index.html
delete mode 100644 modules/private/websites/capitaines/landing_pages.nix
delete mode 100644 modules/private/websites/capitaines/mastodon_static/index.html
delete mode 100644 modules/private/websites/capitaines/mastodon_static/oops.png
delete mode 100644 modules/private/websites/chloe/app/default.nix
delete mode 100644 modules/private/websites/chloe/config/chmod.php
delete mode 100644 modules/private/websites/chloe/config/connect.php
delete mode 100644 modules/private/websites/chloe/config/ldap.php
delete mode 100644 modules/private/websites/chloe/integration.nix
delete mode 100644 modules/private/websites/chloe/production.nix
delete mode 100644 modules/private/websites/cip-ca/sympa.nix
delete mode 100644 modules/private/websites/commons/adminer.nix
delete mode 100644 modules/private/websites/connexionswing/app/default.nix
delete mode 100644 modules/private/websites/connexionswing/app/php-packages.nix
delete mode 100644 modules/private/websites/connexionswing/integration.nix
delete mode 100644 modules/private/websites/connexionswing/production.nix
delete mode 100644 modules/private/websites/default.nix
delete mode 100644 modules/private/websites/denise/aventuriers.nix
delete mode 100644 modules/private/websites/denise/bingo.nix
delete mode 100644 modules/private/websites/denise/denisejerome.nix
delete mode 100644 modules/private/websites/denise/evariste.nix
delete mode 100644 modules/private/websites/denise/oms.nix
delete mode 100644 modules/private/websites/denise/production.nix
delete mode 100644 modules/private/websites/emilia/atelierfringant.nix
delete mode 100644 modules/private/websites/emilia/moodle.nix
delete mode 100644 modules/private/websites/emilia/moodle/pause.html
delete mode 100644 modules/private/websites/florian/app.nix
delete mode 100644 modules/private/websites/florian/app/default.nix
delete mode 100644 modules/private/websites/florian/app/php-packages.nix
delete mode 100644 modules/private/websites/florian/integration.nix
delete mode 100644 modules/private/websites/florian/production.nix
delete mode 100644 modules/private/websites/immae/chatons/immae-eu.properties
delete mode 100644 modules/private/websites/immae/chatons/service-etherpad.properties
delete mode 100644 modules/private/websites/immae/eurl/certificates/2021-certificate.crt
delete mode 100644 modules/private/websites/immae/matrix/client
delete mode 100644 modules/private/websites/immae/matrix/server
delete mode 100644 modules/private/websites/immae/production.nix
delete mode 100644 modules/private/websites/immae/release.nix
delete mode 100644 modules/private/websites/immae/temp.nix
delete mode 100644 modules/private/websites/isabelle/aten_app/default.nix
delete mode 100644 modules/private/websites/isabelle/aten_app/php-packages.nix
delete mode 100644 modules/private/websites/isabelle/aten_app/yarn-packages.nix
delete mode 100644 modules/private/websites/isabelle/aten_integration.nix
delete mode 100644 modules/private/websites/isabelle/aten_production.nix
delete mode 100644 modules/private/websites/isabelle/config/chmod.php
delete mode 100644 modules/private/websites/isabelle/config/connect.php
delete mode 100644 modules/private/websites/isabelle/config/ldap.php
delete mode 100644 modules/private/websites/isabelle/iridologie.nix
delete mode 100644 modules/private/websites/isabelle/iridologie_app/default.nix
delete mode 100644 modules/private/websites/jerome/naturaloutil.nix
delete mode 100644 modules/private/websites/leila/production.nix
delete mode 100644 modules/private/websites/ludivine/app/default.nix
delete mode 100644 modules/private/websites/ludivine/app/php-packages.nix
delete mode 100644 modules/private/websites/ludivine/integration.nix
delete mode 100644 modules/private/websites/ludivine/production.nix
delete mode 100644 modules/private/websites/moomin.txt
delete mode 100644 modules/private/websites/nassime/production.nix
delete mode 100644 modules/private/websites/nath/villon.nix
delete mode 100644 modules/private/websites/papa/maison_bbc.nix
delete mode 100644 modules/private/websites/papa/maison_bbc_static/data.json
delete mode 100644 modules/private/websites/papa/maison_bbc_static/favicon.ico
delete mode 100644 modules/private/websites/papa/maison_bbc_static/index.html
delete mode 100644 modules/private/websites/papa/maison_bbc_static/lamaison.png
delete mode 100644 modules/private/websites/papa/surveillance.nix
delete mode 100644 modules/private/websites/patrick_fodella/altermondia.nix
delete mode 100644 modules/private/websites/patrick_fodella/ecolyeu.nix
delete mode 100644 modules/private/websites/piedsjaloux/app/default.nix
delete mode 100644 modules/private/websites/piedsjaloux/app/php-packages.nix
delete mode 100644 modules/private/websites/piedsjaloux/integration.nix
delete mode 100644 modules/private/websites/piedsjaloux/production.nix
delete mode 100644 modules/private/websites/ressourcerie_banon/cloud.nix
delete mode 100644 modules/private/websites/ressourcerie_banon/cryptpad.nix
delete mode 100644 modules/private/websites/ressourcerie_banon/production.nix
delete mode 100644 modules/private/websites/richie/production.nix
delete mode 100644 modules/private/websites/syden/peertube.nix
delete mode 100644 modules/private/websites/telio_tortay/production.nix
delete mode 100644 modules/private/websites/tools/assets/default.nix
delete mode 100644 modules/private/websites/tools/assets/static/favicon.png
delete mode 100644 modules/private/websites/tools/assets/static/logger.png
delete mode 100644 modules/private/websites/tools/assets/static/logger.txt
delete mode 100644 modules/private/websites/tools/assets/static/logo.jpg
delete mode 100644 modules/private/websites/tools/assets/static/logo.txt
delete mode 100644 modules/private/websites/tools/assets/static/logo_big.jpg
delete mode 100644 modules/private/websites/tools/assets/static/logo_big.txt
delete mode 100644 modules/private/websites/tools/assets/static/logo_center.jpg
delete mode 100644 modules/private/websites/tools/assets/static/logo_center.txt
delete mode 100644 modules/private/websites/tools/assets/static/monitoring.png
delete mode 100644 modules/private/websites/tools/assets/static/monitoring.txt
delete mode 100644 modules/private/websites/tools/assets/static/photos/ct.jpg
delete mode 100644 modules/private/websites/tools/assets/static/photos/fretlink.jpg
delete mode 100644 modules/private/websites/tools/assets/static/photos/raton.jpg
delete mode 100644 modules/private/websites/tools/cloud/default.nix
delete mode 100644 modules/private/websites/tools/cloud/farm.nix
delete mode 100644 modules/private/websites/tools/commento/default.nix
delete mode 100644 modules/private/websites/tools/cryptpad/default.nix
delete mode 100644 modules/private/websites/tools/cryptpad/farm.nix
delete mode 100644 modules/private/websites/tools/dav/davical.nix
delete mode 100644 modules/private/websites/tools/dav/default.nix
delete mode 100644 modules/private/websites/tools/dav/www/index.html
delete mode 100644 modules/private/websites/tools/db/default.nix
delete mode 100644 modules/private/websites/tools/diaspora/default.nix
delete mode 100644 modules/private/websites/tools/ether/default.nix
delete mode 100644 modules/private/websites/tools/games/codenames/codenames.patch
delete mode 100644 modules/private/websites/tools/games/codenames/default.nix
delete mode 100644 modules/private/websites/tools/games/codenames/deps.nix
delete mode 100644 modules/private/websites/tools/games/codenames/elm-srcs.nix
delete mode 100644 modules/private/websites/tools/games/codenames/frontend.nix
delete mode 100644 modules/private/websites/tools/games/codenames/greenapid.nix
delete mode 100644 modules/private/websites/tools/games/codenames/greenapid.patch
delete mode 100644 modules/private/websites/tools/games/codenames/node-packages.nix
delete mode 100644 modules/private/websites/tools/games/codenames/registry.dat
delete mode 100644 modules/private/websites/tools/games/codenames/shell.nix
delete mode 100644 modules/private/websites/tools/games/codenames/wordlists/french.txt
delete mode 100644 modules/private/websites/tools/games/terraforming-mars/default.nix
delete mode 100644 modules/private/websites/tools/games/terraforming-mars/node-packages.nix
delete mode 100644 modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix
delete mode 100644 modules/private/websites/tools/git/default.nix
delete mode 100644 modules/private/websites/tools/git/gitweb.nix
delete mode 100644 modules/private/websites/tools/git/mantisbt.nix
delete mode 100644 modules/private/websites/tools/im/default.nix
delete mode 100644 modules/private/websites/tools/im/www/converse.html
delete mode 100644 modules/private/websites/tools/im/www/index.html
delete mode 100644 modules/private/websites/tools/mail/default.nix
delete mode 100644 modules/private/websites/tools/mail/mta-sts.nix
delete mode 100644 modules/private/websites/tools/mail/rainloop.nix
delete mode 100644 modules/private/websites/tools/mail/roundcubemail.nix
delete mode 100644 modules/private/websites/tools/mail/www/index.html
delete mode 100644 modules/private/websites/tools/mastodon/default.nix
delete mode 100644 modules/private/websites/tools/mgoblin/default.nix
delete mode 100644 modules/private/websites/tools/peertube/default.nix
delete mode 100644 modules/private/websites/tools/performance/default.nix
delete mode 100644 modules/private/websites/tools/stats/default.nix
delete mode 100644 modules/private/websites/tools/tools/adminer.nix
delete mode 100644 modules/private/websites/tools/tools/csp_reports.nix
delete mode 100644 modules/private/websites/tools/tools/default.nix
delete mode 100644 modules/private/websites/tools/tools/dmarc_reports.nix
delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/api.php
delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/app.js
delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/default.css
delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/index.html
delete mode 100644 modules/private/websites/tools/tools/dokuwiki.nix
delete mode 100644 modules/private/websites/tools/tools/grocy.nix
delete mode 100644 modules/private/websites/tools/tools/kanboard.nix
delete mode 100644 modules/private/websites/tools/tools/landing.nix
delete mode 100644 modules/private/websites/tools/tools/landing/ldap_password.php
delete mode 100644 modules/private/websites/tools/tools/landing/ldap_ssh_keys.php
delete mode 100644 modules/private/websites/tools/tools/landing/myip.php
delete mode 100644 modules/private/websites/tools/tools/landing/node-packages.nix
delete mode 100644 modules/private/websites/tools/tools/landing/report_csp_violation.php
delete mode 100644 modules/private/websites/tools/tools/landing/yarn-packages.nix
delete mode 100644 modules/private/websites/tools/tools/ldap.nix
delete mode 100644 modules/private/websites/tools/tools/phpbb.nix
delete mode 100644 modules/private/websites/tools/tools/rompr.nix
delete mode 100644 modules/private/websites/tools/tools/shaarli.nix
delete mode 100644 modules/private/websites/tools/tools/ttrss.nix
delete mode 100644 modules/private/websites/tools/tools/wallabag.nix
delete mode 100644 modules/private/websites/tools/tools/webhooks.nix
delete mode 100644 modules/private/websites/tools/tools/ympd.nix
delete mode 100644 modules/private/websites/tools/tools/yourls.nix
delete mode 100644 modules/private/websites/tools/vpn/default.nix
delete mode 100644 modules/private/websites/tools/vpn/www/index.html
delete mode 100644 modules/private/websites/tools/vpn/www/style.css
delete mode 100644 modules/webapps/diaspora.nix
delete mode 100644 modules/webapps/etherpad-lite.nix
delete mode 100644 modules/webapps/mastodon.nix
delete mode 100644 modules/webapps/mediagoblin.nix
delete mode 100644 modules/webapps/webstats/default.nix
delete mode 100644 modules/webapps/webstats/goaccess.conf
delete mode 100644 modules/websites/default.nix
delete mode 100644 modules/websites/httpd-service-builder.nix
delete mode 100644 modules/websites/httpd-service-builder.patch
delete mode 100644 modules/websites/nosslVhost/index.html
delete mode 100644 modules/websites/php-application.nix
delete mode 100644 modules/zrepl.nix
(limited to 'modules')
diff --git a/modules/default.nix b/modules/default.nix
deleted file mode 100644
index 2f06eb1..0000000
--- a/modules/default.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-let
- flakeCompat = import ../lib/flake-compat.nix;
- flakeLib = (flakeCompat ../flakes/lib).lib;
-in
-{
- myids = (flakeCompat ../flakes/myuids).nixosModule;
- secrets = flakeLib.withNarKeyCompat flakeCompat ../flakes/secrets "nixosModule";
- filesWatcher = flakeLib.withNarKeyCompat flakeCompat ../flakes/files-watcher "nixosModule";
-
- webstats = ./webapps/webstats;
- diaspora = ./webapps/diaspora.nix;
- etherpad-lite = ./webapps/etherpad-lite.nix;
- mastodon = ./webapps/mastodon.nix;
- mediagoblin = ./webapps/mediagoblin.nix;
- peertube = (flakeCompat ../flakes/peertube).nixosModule;
- fiche = flakeLib.withNarKeyCompat flakeCompat ../flakes/fiche "nixosModule";
- paste = flakeLib.withNarKeyCompat flakeCompat ../flakes/paste "nixosModule";
-
- opendmarc = flakeLib.withNarKeyCompat flakeCompat ../flakes/opendmarc "nixosModule";
- openarc = flakeLib.withNarKeyCompat flakeCompat ../flakes/openarc "nixosModule";
-
- duplyBackup = ./duply_backup;
- rsyncBackup = flakeLib.withNarKeyCompat flakeCompat ../flakes/rsync_backup "nixosModule";
- naemon = ./naemon;
-
- php-application = ./websites/php-application.nix;
- zrepl = ./zrepl.nix;
- websites = ./websites;
-} // (if builtins.pathExists ./private then import ./private else {})
diff --git a/modules/duply_backup/default.nix b/modules/duply_backup/default.nix
deleted file mode 100644
index 846b1d4..0000000
--- a/modules/duply_backup/default.nix
+++ /dev/null
@@ -1,124 +0,0 @@
-{ lib, pkgs, config, name, ... }:
-
-let
- cfg = config.myEnv.backup;
- varDir = "/var/lib/duply";
- duplyProfile = profile: remote: prefix: ''
- GPG_PW="${cfg.password}"
- TARGET="${cfg.remotes.${remote}.remote profile.bucket}${prefix}"
- export AWS_ACCESS_KEY_ID="${cfg.remotes.${remote}.accessKeyId}"
- export AWS_SECRET_ACCESS_KEY="${cfg.remotes.${remote}.secretAccessKey}"
- SOURCE="${profile.rootDir}"
- FILENAME=".duplicity-ignore"
- DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'"
- VERBOSITY=4
- ARCH_DIR="${varDir}/caches"
-
- # Do a full backup after 1 month
- MAX_FULLBKP_AGE=1M
- DUPL_PARAMS="$DUPL_PARAMS --allow-source-mismatch --exclude-other-filesystems --full-if-older-than $MAX_FULLBKP_AGE "
- # Backups older than 2months are deleted
- MAX_AGE=2M
- # Keep 2 full backups
- MAX_FULL_BACKUPS=2
- MAX_FULLS_WITH_INCRS=2
- '';
- action = "bkp_purge_purgeFull_purgeIncr";
- varName = k: remoteName:
- if remoteName == "eriomem" then k else remoteName + "_" + k;
-in
-{
- options = {
- services.duplyBackup.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable remote backups.
- '';
- };
- services.duplyBackup.profiles = lib.mkOption {
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- rootDir = lib.mkOption {
- type = lib.types.path;
- description = ''
- Path to backup
- '';
- };
- bucket = lib.mkOption {
- type = lib.types.str;
- default = "immae-${name}";
- description = ''
- Bucket to use
- '';
- };
- remotes = lib.mkOption {
- type = lib.types.listOf lib.types.str;
- default = ["eriomem"];
- description = ''
- Remotes to use for backup
- '';
- };
- excludeFile = lib.mkOption {
- type = lib.types.lines;
- default = "";
- description = ''
- Content to put in exclude file
- '';
- };
- };
- });
- };
- };
-
- config = lib.mkIf config.services.duplyBackup.enable {
- system.activationScripts.backup = ''
- install -m 0700 -o root -g root -d ${varDir} ${varDir}/caches
- '';
- secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v:
- map (remote: [
- (lib.nameValuePair "backup/${varName k remote}/conf" {
- permissions = "0400";
- text = duplyProfile v remote "${k}/";
- })
- (lib.nameValuePair "backup/${varName k remote}/exclude" {
- permissions = "0400";
- text = v.excludeFile;
- })
- (lib.nameValuePair "backup/${varName k remote}" {
- permissions = "0500";
- isDir = true;
- })
- ]) v.remotes) config.services.duplyBackup.profiles));
-
- services.cron = {
- enable = true;
- systemCronJobs = let
- backups = pkgs.writeScript "backups" ''
- #!${pkgs.stdenv.shell}
-
- ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v:
- map (remote: [
- ''
- touch ${varDir}/${varName k remote}.log
- ${pkgs.duply}/bin/duply ${config.secrets.fullPaths."backup/${varName k remote}"}/ ${action} --force >> ${varDir}/${varName k remote}.log
- [[ $? = 0 ]] || echo -e "Error when doing backup for ${varName k remote}, see above\n---------------------------------------" >&2
- ''
- ]) v.remotes
- ) config.services.duplyBackup.profiles))}
- '';
- in
- [
- "0 2 * * * root ${backups}"
- ];
-
- };
-
- security.pki.certificateFiles = [
- (pkgs.fetchurl {
- url = "http://downloads.e.eriomem.net/eriomemca.pem";
- sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh";
- })
- ];
- };
-}
diff --git a/modules/naemon/default.nix b/modules/naemon/default.nix
deleted file mode 100644
index 60a75b3..0000000
--- a/modules/naemon/default.nix
+++ /dev/null
@@ -1,183 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
- cfg = config.services.naemon;
-
- naemonConfig = pkgs.runCommand "naemon-config" {
- objectsFile = pkgs.writeText "naemon_objects.cfg" cfg.objectDefs;
- resourceFile = config.secrets.fullPaths."naemon/resources.cfg";
- extraConfig = pkgs.writeText "extra.cfg" cfg.extraConfig;
- inherit (cfg) logDir varDir runDir cacheDir;
- } ''
- substituteAll ${./naemon.cfg} $out
- cat $extraConfig >> $out
- '';
-in
-{
- options = {
- services.naemon = {
- enable = mkOption {
- default = false;
- description = "
- Whether to use Naemon to monitor
- your system or network.
- ";
- };
-
- objectDefs = mkOption {
- type = types.lines;
- default = "";
- description = "
- A list of Naemon object configuration that must define
- the hosts, host groups, services and contacts for the
- network that you want Naemon to monitor.
- ";
- };
-
- extraResource = mkOption {
- type = types.lines;
- default = "";
- example = ''
- # Sets $USER2$ to be the path to event handlers
- #$USER2$=/usr/lib/monitoring-plugins/eventhandlers
-
- # Store some usernames and passwords (hidden from the CGIs)
- #$USER3$=someuser
- #$USER4$=somepassword
- '';
- description = "
- Lines to add to the resource file
- # You can define $USERx$ macros in this file, which can in turn be used
- # in command definitions in your host config file(s). $USERx$ macros are
- # useful for storing sensitive information such as usernames, passwords,
- # etc. They are also handy for specifying the path to plugins and
- # event handlers - if you decide to move the plugins or event handlers to
- # a different directory in the future, you can just update one or two
- # $USERx$ macros, instead of modifying a lot of command definitions.
- #
- # Naemon supports up to 256 $USERx$ macros ($USER1$ through $USER256$)
- #
- # Resource files may also be used to store configuration directives for
- # external data sources like MySQL...
- #
- ";
- };
-
- extraConfig = mkOption {
- type = types.lines;
- default = "";
- description = "
- Extra config to append to main config
- ";
- };
-
- user = mkOption {
- type = types.str;
- default = "naemon";
- description = "User for naemon";
- };
-
- group = mkOption {
- type = types.str;
- default = "naemon";
- description = "Group for naemon";
- };
-
- varDir = mkOption {
- type = types.path;
- default = "/var/lib/naemon";
- description = "The directory where naemon stores its data";
- };
-
- cacheDir = mkOption {
- type = types.path;
- default = "/var/cache/naemon";
- description = "The directory where naemon stores its cache";
- };
-
- runDir = mkOption {
- type = types.path;
- default = "/run/naemon";
- description = "The directory where naemon stores its runtime files";
- };
-
- logDir = mkOption {
- type = types.path;
- default = "/var/log/naemon";
- description = "The directory where naemon stores its log files";
- };
-
- package = mkOption {
- type = types.package;
- default = pkgs.naemon.override {
- inherit (cfg) varDir cacheDir logDir runDir user group;
- };
- description = ''
- Naemon package to use
- '';
- };
- };
- };
-
-
- config = mkIf cfg.enable {
- secrets.keys = {
- "naemon/resources.cfg" = {
- user = cfg.user;
- group = cfg.group;
- permissions = "0400";
- text = ''
- $USER1$=${pkgs.monitoring-plugins}/libexec
- ${cfg.extraResource}
- '';
- };
- };
-
- users.users = optionalAttrs (cfg.user == "naemon") {
- naemon = {
- group = cfg.group;
- uid = config.ids.uids.nagios;
- extraGroups = [ "keys" ];
- };
- };
- users.groups = optionalAttrs (cfg.user == "naemon") {
- naemon = {
- gid = config.ids.gids.nagios;
- };
- };
-
- services.filesWatcher.naemon = {
- paths = [ config.secrets.fullPaths."naemon/resources.cfg" ];
- };
- systemd.services.naemon = {
- description = "Naemon monitoring daemon";
- path = [ cfg.package pkgs.monitoring-plugins ];
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- preStart = "${cfg.package}/bin/naemon -vp ${naemonConfig}";
- script = "${cfg.package}/bin/naemon --daemon ${naemonConfig}";
- reload = "${pkgs.utillinux}/bin/kill -HUP $MAINPID";
- serviceConfig = {
- User = cfg.user;
- Restart = "always";
- RestartSec = 2;
- StandardOutput = "journal";
- StandardError = "inherit";
- PIDFile = "${cfg.runDir}/naemon.pid";
- LogsDirectory = assert lib.strings.hasPrefix "/var/log/" cfg.logDir;
- lib.strings.removePrefix "/var/log/" cfg.logDir;
- CacheDirectory = assert lib.strings.hasPrefix "/var/cache/" cfg.cacheDir;
- let unprefixed = lib.strings.removePrefix "/var/cache/" cfg.cacheDir;
- in [ unprefixed "${unprefixed}/checkresults" ];
- StateDirectory = assert lib.strings.hasPrefix "/var/lib/" cfg.varDir;
- lib.strings.removePrefix "/var/lib/" cfg.varDir;
- RuntimeDirectory = assert lib.strings.hasPrefix "/run/" cfg.runDir;
- lib.strings.removePrefix "/run/" cfg.runDir;
- };
- };
- };
-}
diff --git a/modules/naemon/naemon.cfg b/modules/naemon/naemon.cfg
deleted file mode 100644
index 792e03b..0000000
--- a/modules/naemon/naemon.cfg
+++ /dev/null
@@ -1,1059 +0,0 @@
-##############################################################################
-#
-# naemon.cfg - Sample Main Config File for Naemon 1.0.10.gc2a87305.dirty.20190703.source
-#
-# Read the documentation for more information on this configuration
-# file. I've provided some comments here, but things may not be so
-# clear without further explanation.
-#
-#
-##############################################################################
-
-
-# LOG FILE
-# This is the main log file where service and host events are logged
-# for historical purposes. This should be the first option specified
-# in the config file!!!
-
-log_file=@logDir@/naemon.log
-
-
-
-# OBJECT CONFIGURATION FILE(S)
-# These are the object configuration files in which you define hosts,
-# host groups, contacts, contact groups, services, etc.
-# You can split your object definitions across several config files
-# if you wish (as shown below), or keep them all in a single config file.
-
-# You can specify individual object config files as shown below:
-#cfg_file=/etc/naemon/objects/commands.cfg
-#cfg_file=/etc/naemon/objects/contacts.cfg
-#cfg_file=/etc/naemon/objects/timeperiods.cfg
-#cfg_file=/etc/naemon/objects/templates.cfg
-cfg_file=@objectsFile@
-
-
-# You can also tell naemon to process all config files (with a .cfg
-# extension) in a particular directory by using the cfg_dir
-# directive as shown below:
-#cfg_dir=/etc/naemon/conf.d
-
-
-
-
-# OBJECT CACHE FILE
-# This option determines where object definitions are cached when
-# naemon starts/restarts. The CGIs read object definitions from
-# this cache file (rather than looking at the object config files
-# directly) in order to prevent inconsistencies that can occur
-# when the config files are modified after naemon starts.
-
-object_cache_file=@varDir@/objects.cache
-
-
-
-# PRE-CACHED OBJECT FILE
-# This options determines the location of the precached object file.
-# If you run naemon with the -p command line option, it will preprocess
-# your object configuration file(s) and write the cached config to this
-# file. You can then start naemon with the -u option to have it read
-# object definitions from this precached file, rather than the standard
-# object configuration files (see the cfg_file and cfg_dir options above).
-# Using a precached object file can speed up the time needed to (re)start
-# the naemon process if you've got a large and/or complex configuration.
-# Read the documentation section on optimizing naemon to find our more
-# about how this feature works.
-
-precached_object_file=@varDir@/objects.precache
-
-
-
-# RESOURCE FILE
-# This is an optional resource file that contains $USERx$ macro
-# definitions. Multiple resource files can be specified by using
-# multiple resource_file definitions. The CGIs will not attempt to
-# read the contents of resource files, so information that is
-# considered to be sensitive (usernames, passwords, etc) can be
-# defined as macros in this file and restrictive permissions (600)
-# can be placed on this file.
-
-resource_file=@resourceFile@
-
-
-
-# STATUS FILE
-# This is where the current status of all monitored services and
-# hosts is stored. Its contents are read and processed by the CGIs.
-# The contents of the status file are deleted every time naemon
-# restarts.
-
-status_file=@varDir@/status.dat
-
-
-
-# STATUS FILE UPDATE INTERVAL
-# This option determines the frequency (in seconds) that
-# naemon will periodically dump program, host, and
-# service status data. Set it to 0 to disable updates.
-
-status_update_interval=10
-
-
-
-# EXTERNAL COMMAND OPTION
-# This option allows you to specify whether or not Naemon should check
-# for external commands (in the command file defined below). By default
-# Naemon will *not* check for external commands, just to be on the
-# cautious side. If you want to be able to use the CGI command interface
-# you will have to enable this.
-# Values: 0 = disable commands, 1 = enable commands
-
-check_external_commands=1
-
-
-
-# EXTERNAL COMMAND FILE
-# This is the file that Naemon checks for external command requests.
-# It is also where the command CGI will write commands that are submitted
-# by users, so it must be writeable by the user that the web server
-# is running as (usually 'nobody'). Permissions should be set at the
-# directory level instead of on the file, as the file is deleted every
-# time its contents are processed.
-
-command_file=@runDir@/naemon.cmd
-
-
-
-# QUERY HANDLER INTERFACE
-# This is the socket that is created for the Query Handler interface
-
-query_socket=@runDir@/naemon.qh
-
-
-
-# LOCK FILE
-# This is the lockfile that Naemon will use to store its PID number
-# in when it is running in daemon mode.
-
-lock_file=@runDir@/naemon.pid
-
-
-
-# TEMP FILE
-# This is a temporary file that is used as scratch space when Naemon
-# updates the status log, cleans the comment file, etc. This file
-# is created, used, and deleted throughout the time that Naemon is
-# running.
-
-temp_file=@cacheDir@/naemon.tmp
-
-
-
-# TEMP PATH
-# This is path where Naemon can create temp files for service and
-# host check results, etc.
-
-temp_path=@cacheDir@
-
-
-
-# EVENT BROKER OPTIONS
-# Controls what (if any) data gets sent to the event broker.
-# Values: 0 = Broker nothing
-# -1 = Broker everything
-# = See documentation
-
-event_broker_options=-1
-
-
-
-# EVENT BROKER MODULE(S)
-# This directive is used to specify an event broker module that should
-# be loaded by Naemon at startup. Use multiple directives if you want
-# to load more than one module. Arguments that should be passed to
-# the module at startup are seperated from the module path by a space.
-#
-# Example:
-#
-# broker_module= [moduleargs]
-
-#broker_module=/usr/lib/naemon/naemon-livestatus/livestatus.so @cacheDir@/live
-#broker_module=/somewhere/module1.o
-#broker_module=/somewhere/module2.o arg1 arg2=3 debug=0
-
-# In order to provide drop-in support for new modules, you can also make use of
-# the include_dir directive. The include_dir directive causes Naemon to parse
-# any configuration (not just object configuration, as with cfg_dir) as if the
-# contents of the files in the pointed-to directory was included on this line.
-# The path to the directory is relative to the path of the main naemon.cfg
-# file.
-#include_dir=module-conf.d
-
-# LOG ARCHIVE PATH
-# This is the directory where archived (rotated) log files are placed by the
-# logrotate daemon. It is used by out of core add-ons to discover the logfiles.
-
-log_archive_path=@logDir@/archives
-
-
-
-# LOGGING OPTIONS
-# If you want messages logged to the syslog facility, as well as the
-# Naemon log file set this option to 1. If not, set it to 0.
-
-use_syslog=0
-
-# NOTIFICATION LOGGING OPTION
-# If you don't want notifications to be logged, set this value to 0.
-# If notifications should be logged, set the value to 1.
-
-log_notifications=1
-
-# Notification suppression reason (NSR) logging causes the reason for a
-# notification suppression to be logged, when it occurs. This can potentially
-# add some noise to your log file, but is highly useful when troubleshooting
-# missing notifications.
-
-enable_notification_suppression_reason_logging=1
-
-
-# SERVICE RETRY LOGGING OPTION
-# If you don't want service check retries to be logged, set this value
-# to 0. If retries should be logged, set the value to 1.
-
-log_service_retries=1
-
-
-
-# HOST RETRY LOGGING OPTION
-# If you don't want host check retries to be logged, set this value to
-# 0. If retries should be logged, set the value to 1.
-
-log_host_retries=1
-
-
-
-# EVENT HANDLER LOGGING OPTION
-# If you don't want host and service event handlers to be logged, set
-# this value to 0. If event handlers should be logged, set the value
-# to 1.
-
-log_event_handlers=1
-
-
-
-# INITIAL STATES LOGGING OPTION
-# If you want Naemon to log all initial host and service states to
-# the main log file (the first time the service or host is checked)
-# you can enable this option by setting this value to 1. If you
-# are not using an external application that does long term state
-# statistics reporting, you do not need to enable this option. In
-# this case, set the value to 0.
-
-log_initial_states=0
-
-
-
-# CURRENT STATES LOGGING OPTION
-# If you don't want Naemon to log all current host and service states
-# after log has been rotated to the main log file, you can disable this
-# option by setting this value to 0. Default value is 1.
-
-log_current_states=1
-
-
-
-# EXTERNAL COMMANDS LOGGING OPTION
-# If you don't want Naemon to log external commands, set this value
-# to 0. If external commands should be logged, set this value to 1.
-# Note: This option does not include logging of passive service
-# checks - see the option below for controlling whether or not
-# passive checks are logged.
-
-log_external_commands=1
-
-
-
-# PASSIVE CHECKS LOGGING OPTION
-# If you don't want Naemon to log passive host and service checks, set
-# this value to 0. If passive checks should be logged, set
-# this value to 1.
-
-log_passive_checks=1
-
-
-
-# GLOBAL HOST AND SERVICE EVENT HANDLERS
-# These options allow you to specify a host and service event handler
-# command that is to be run for every host or service state change.
-# The global event handler is executed immediately prior to the event
-# handler that you have optionally specified in each host or
-# service definition. The command argument is the short name of a
-# command definition that you define in your host configuration file.
-# Read the HTML docs for more information.
-
-#global_host_event_handler=somecommand
-#global_service_event_handler=somecommand
-
-
-
-# MAXIMUM CONCURRENT SERVICE CHECKS
-# This option allows you to specify the maximum number of
-# service checks that can be run in parallel at any given time.
-# Specifying a value of 1 for this variable essentially prevents
-# any service checks from being parallelized. A value of 0
-# will not restrict the number of concurrent checks that are
-# being executed.
-
-max_concurrent_checks=0
-
-
-# CHECK RESULT PATH
-# This is directory where Naemon reads check results of host and
-# service checks to further process them.
-#
-# Note: Naemon does not require this folder internally but it still
-# can be used to pass check results to Naemon.
-
-check_result_path=@cacheDir@/checkresults
-
-
-# CACHED HOST CHECK HORIZON
-# This option determines the maximum amount of time (in seconds)
-# that the state of a previous host check is considered current.
-# Cached host states (from host checks that were performed more
-# recently that the timeframe specified by this value) can immensely
-# improve performance in regards to the host check logic.
-# Too high of a value for this option may result in inaccurate host
-# states being used by Naemon, while a lower value may result in a
-# performance hit for host checks. Use a value of 0 to disable host
-# check caching.
-
-cached_host_check_horizon=15
-
-
-
-# CACHED SERVICE CHECK HORIZON
-# This option determines the maximum amount of time (in seconds)
-# that the state of a previous service check is considered current.
-# Cached service states (from service checks that were performed more
-# recently that the timeframe specified by this value) can immensely
-# improve performance in regards to predictive dependency checks.
-# Use a value of 0 to disable service check caching.
-
-cached_service_check_horizon=15
-
-
-
-# ENABLE PREDICTIVE HOST DEPENDENCY CHECKS
-# This option determines whether or not Naemon will attempt to execute
-# checks of hosts when it predicts that future dependency logic test
-# may be needed. These predictive checks can help ensure that your
-# host dependency logic works well.
-# Values:
-# 0 = Disable predictive checks
-# 1 = Enable predictive checks (default)
-
-enable_predictive_host_dependency_checks=1
-
-
-
-# ENABLE PREDICTIVE SERVICE DEPENDENCY CHECKS
-# This option determines whether or not Naemon will attempt to execute
-# checks of service when it predicts that future dependency logic test
-# may be needed. These predictive checks can help ensure that your
-# service dependency logic works well.
-# Values:
-# 0 = Disable predictive checks
-# 1 = Enable predictive checks (default)
-
-enable_predictive_service_dependency_checks=1
-
-
-
-# SOFT STATE DEPENDENCIES
-# This option determines whether or not Naemon will use soft state
-# information when checking host and service dependencies. Normally
-# Naemon will only use the latest hard host or service state when
-# checking dependencies. If you want it to use the latest state (regardless
-# of whether its a soft or hard state type), enable this option.
-# Values:
-# 0 = Don't use soft state dependencies (default)
-# 1 = Use soft state dependencies
-
-soft_state_dependencies=0
-
-
-
-# TIME CHANGE ADJUSTMENT THRESHOLDS
-# These options determine when Naemon will react to detected changes
-# in system time (either forward or backwards).
-
-#time_change_threshold=900
-
-
-
-# TIMEOUT VALUES
-# These options control how much time Naemon will allow various
-# types of commands to execute before killing them off. Options
-# are available for controlling maximum time allotted for
-# service checks, host checks, event handlers, notifications, the
-# ocsp command, and performance data commands. All values are in
-# seconds.
-
-service_check_timeout=60
-host_check_timeout=30
-event_handler_timeout=30
-notification_timeout=30
-ocsp_timeout=5
-perfdata_timeout=5
-
-
-
-# RETAIN STATE INFORMATION
-# This setting determines whether or not Naemon will save state
-# information for services and hosts before it shuts down. Upon
-# startup Naemon will reload all saved service and host state
-# information before starting to monitor. This is useful for
-# maintaining long-term data on state statistics, etc, but will
-# slow Naemon down a bit when it (re)starts. Since its only
-# a one-time penalty, I think its well worth the additional
-# startup delay.
-
-retain_state_information=1
-
-
-
-# STATE RETENTION FILE
-# This is the file that Naemon should use to store host and
-# service state information before it shuts down. The state
-# information in this file is also read immediately prior to
-# starting to monitor the network when Naemon is restarted.
-# This file is used only if the retain_state_information
-# variable is set to 1.
-
-state_retention_file=@varDir@/retention.dat
-
-
-
-# RETENTION DATA UPDATE INTERVAL
-# This setting determines how often (in minutes) that Naemon
-# will automatically save retention data during normal operation.
-# If you set this value to 0, Naemon will not save retention
-# data at regular interval, but it will still save retention
-# data before shutting down or restarting. If you have disabled
-# state retention, this option has no effect.
-
-retention_update_interval=60
-
-
-
-# USE RETAINED PROGRAM STATE
-# This setting determines whether or not Naemon will set
-# program status variables based on the values saved in the
-# retention file. If you want to use retained program status
-# information, set this value to 1. If not, set this value
-# to 0.
-
-use_retained_program_state=1
-
-
-
-# USE RETAINED SCHEDULING INFO
-# This setting determines whether or not Naemon will retain
-# the scheduling info (next check time) for hosts and services
-# based on the values saved in the retention file. If you
-# If you want to use retained scheduling info, set this
-# value to 1. If not, set this value to 0.
-
-use_retained_scheduling_info=1
-
-
-# RETAINED_SCHEDULING_RANDOMIZE_WINDOW
-# If use_retained_scheduling info is enabled, this setting
-# sets the window (in seconds), in which checks that were
-# supposed to executed during a restart, is rescheduled.
-# That is, if set to 60 seconds, then all checks that were
-# missed due to a restart will be scheduled randomly to be
-# executed in the first 60 seconds after a restart.
-# If the retained_scheduling_randomize_window is larger than
-# the objects check_interval, the check_interval is used
-# instead.
-
-retained_scheduling_randomize_window=60
-
-
-# RETAINED ATTRIBUTE MASKS (ADVANCED FEATURE)
-# The following variables are used to specify specific host and
-# service attributes that should *not* be retained by Naemon during
-# program restarts.
-#
-# The values of the masks are bitwise ANDs of values specified
-# by the "MODATTR_" definitions found in include/common.h.
-# For example, if you do not want the current enabled/disabled state
-# of flap detection and event handlers for hosts to be retained, you
-# would use a value of 24 for the host attribute mask...
-# MODATTR_EVENT_HANDLER_ENABLED (8) + MODATTR_FLAP_DETECTION_ENABLED (16) = 24
-
-# This mask determines what host attributes are not retained
-retained_host_attribute_mask=0
-
-# This mask determines what service attributes are not retained
-retained_service_attribute_mask=0
-
-# These two masks determine what process attributes are not retained.
-# There are two masks, because some process attributes have host and service
-# options. For example, you can disable active host checks, but leave active
-# service checks enabled.
-retained_process_host_attribute_mask=0
-retained_process_service_attribute_mask=0
-
-# These two masks determine what contact attributes are not retained.
-# There are two masks, because some contact attributes have host and
-# service options. For example, you can disable host notifications for
-# a contact, but leave service notifications enabled for them.
-retained_contact_host_attribute_mask=0
-retained_contact_service_attribute_mask=0
-
-
-
-# INTERVAL LENGTH
-# This is the seconds per unit interval as used in the
-# host/contact/service configuration files. Setting this to 60 means
-# that each interval is one minute long (60 seconds). Other settings
-# have not been tested much, so your mileage is likely to vary...
-
-interval_length=60
-
-
-
-# AGGRESSIVE HOST CHECKING OPTION
-# If you don't want to turn on aggressive host checking features, set
-# this value to 0 (the default). Otherwise set this value to 1 to
-# enable the aggressive check option. Read the docs for more info
-# on what aggressive host check is or check out the source code in
-# base/checks.c
-
-use_aggressive_host_checking=0
-
-
-
-# SERVICE CHECK EXECUTION OPTION
-# This determines whether or not Naemon will actively execute
-# service checks when it initially starts. If this option is
-# disabled, checks are not actively made, but Naemon can still
-# receive and process passive check results that come in. Unless
-# you're implementing redundant hosts or have a special need for
-# disabling the execution of service checks, leave this enabled!
-# Values: 1 = enable checks, 0 = disable checks
-
-execute_service_checks=1
-
-
-
-# PASSIVE SERVICE CHECK ACCEPTANCE OPTION
-# This determines whether or not Naemon will accept passive
-# service checks results when it initially (re)starts.
-# Values: 1 = accept passive checks, 0 = reject passive checks
-
-accept_passive_service_checks=1
-
-
-
-# HOST CHECK EXECUTION OPTION
-# This determines whether or not Naemon will actively execute
-# host checks when it initially starts. If this option is
-# disabled, checks are not actively made, but Naemon can still
-# receive and process passive check results that come in. Unless
-# you're implementing redundant hosts or have a special need for
-# disabling the execution of host checks, leave this enabled!
-# Values: 1 = enable checks, 0 = disable checks
-
-execute_host_checks=1
-
-
-
-# PASSIVE HOST CHECK ACCEPTANCE OPTION
-# This determines whether or not Naemon will accept passive
-# host checks results when it initially (re)starts.
-# Values: 1 = accept passive checks, 0 = reject passive checks
-
-accept_passive_host_checks=1
-
-
-
-# NOTIFICATIONS OPTION
-# This determines whether or not Naemon will sent out any host or
-# service notifications when it is initially (re)started.
-# Values: 1 = enable notifications, 0 = disable notifications
-
-enable_notifications=1
-
-
-
-# EVENT HANDLER USE OPTION
-# This determines whether or not Naemon will run any host or
-# service event handlers when it is initially (re)started. Unless
-# you're implementing redundant hosts, leave this option enabled.
-# Values: 1 = enable event handlers, 0 = disable event handlers
-
-enable_event_handlers=1
-
-
-
-# PROCESS PERFORMANCE DATA OPTION
-# This determines whether or not Naemon will process performance
-# data returned from service and host checks. If this option is
-# enabled, host performance data will be processed using the
-# host_perfdata_command (defined below) and service performance
-# data will be processed using the service_perfdata_command (also
-# defined below). Read the HTML docs for more information on
-# performance data.
-# Values: 1 = process performance data, 0 = do not process performance data
-
-process_performance_data=0
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA PROCESSING COMMANDS
-# These commands are run after every host and service check is
-# performed. These commands are executed only if the
-# enable_performance_data option (above) is set to 1. The command
-# argument is the short name of a command definition that you
-# define in your host configuration file. Read the HTML docs for
-# more information on performance data.
-
-#host_perfdata_command=process-host-perfdata
-#service_perfdata_command=process-service-perfdata
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA FILES
-# These files are used to store host and service performance data.
-# Performance data is only written to these files if the
-# enable_performance_data option (above) is set to 1.
-
-#host_perfdata_file=@varDir@/host-perfdata
-#service_perfdata_file=@varDir@/service-perfdata
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA FILE TEMPLATES
-# These options determine what data is written (and how) to the
-# performance data files. The templates may contain macros, special
-# characters (\t for tab, \r for carriage return, \n for newline)
-# and plain text. A newline is automatically added after each write
-# to the performance data file. Some examples of what you can do are
-# shown below.
-
-#host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
-#service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA FILE MODES
-# This option determines whether or not the host and service
-# performance data files are opened in write ("w") or append ("a")
-# mode. If you want to use named pipes, you should use the special
-# pipe ("p") mode which avoid blocking at startup, otherwise you will
-# likely want the defult append ("a") mode.
-
-#host_perfdata_file_mode=a
-#service_perfdata_file_mode=a
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING INTERVAL
-# These options determine how often (in seconds) the host and service
-# performance data files are processed using the commands defined
-# below. A value of 0 indicates the files should not be periodically
-# processed.
-
-#host_perfdata_file_processing_interval=0
-#service_perfdata_file_processing_interval=0
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING COMMANDS
-# These commands are used to periodically process the host and
-# service performance data files. The interval at which the
-# processing occurs is determined by the options above.
-
-#host_perfdata_file_processing_command=process-host-perfdata-file
-#service_perfdata_file_processing_command=process-service-perfdata-file
-
-
-
-# HOST AND SERVICE PERFORMANCE DATA PROCESS EMPTY RESULTS
-# These options determine wether the core will process empty perfdata
-# results or not. This is needed for distributed monitoring, and intentionally
-# turned on by default.
-# If you don't require empty perfdata - saving some cpu cycles
-# on unwanted macro calculation - you can turn that off. Be careful!
-# Values: 1 = enable, 0 = disable
-
-#host_perfdata_process_empty_results=1
-#service_perfdata_process_empty_results=1
-
-
-# OBSESS OVER SERVICE CHECKS OPTION
-# This determines whether or not Naemon will obsess over service
-# checks and run the ocsp_command defined below. Unless you're
-# planning on implementing distributed monitoring, do not enable
-# this option. Read the HTML docs for more information on
-# implementing distributed monitoring.
-# Values: 1 = obsess over services, 0 = do not obsess (default)
-
-obsess_over_services=0
-
-
-
-# OBSESSIVE COMPULSIVE SERVICE PROCESSOR COMMAND
-# This is the command that is run for every service check that is
-# processed by Naemon. This command is executed only if the
-# obsess_over_services option (above) is set to 1. The command
-# argument is the short name of a command definition that you
-# define in your host configuration file. Read the HTML docs for
-# more information on implementing distributed monitoring.
-
-#ocsp_command=somecommand
-
-
-
-# OBSESS OVER HOST CHECKS OPTION
-# This determines whether or not Naemon will obsess over host
-# checks and run the ochp_command defined below. Unless you're
-# planning on implementing distributed monitoring, do not enable
-# this option. Read the HTML docs for more information on
-# implementing distributed monitoring.
-# Values: 1 = obsess over hosts, 0 = do not obsess (default)
-
-obsess_over_hosts=0
-
-
-
-# OBSESSIVE COMPULSIVE HOST PROCESSOR COMMAND
-# This is the command that is run for every host check that is
-# processed by Naemon. This command is executed only if the
-# obsess_over_hosts option (above) is set to 1. The command
-# argument is the short name of a command definition that you
-# define in your host configuration file. Read the HTML docs for
-# more information on implementing distributed monitoring.
-
-#ochp_command=somecommand
-
-
-
-# TRANSLATE PASSIVE HOST CHECKS OPTION
-# This determines whether or not Naemon will translate
-# DOWN/UNREACHABLE passive host check results into their proper
-# state for this instance of Naemon. This option is useful
-# if you have distributed or failover monitoring setup. In
-# these cases your other Naemon servers probably have a different
-# "view" of the network, with regards to the parent/child relationship
-# of hosts. If a distributed monitoring server thinks a host
-# is DOWN, it may actually be UNREACHABLE from the point of
-# this Naemon instance. Enabling this option will tell Naemon
-# to translate any DOWN or UNREACHABLE host states it receives
-# passively into the correct state from the view of this server.
-# Values: 1 = perform translation, 0 = do not translate (default)
-
-translate_passive_host_checks=0
-
-
-
-# PASSIVE HOST CHECKS ARE SOFT OPTION
-# This determines whether or not Naemon will treat passive host
-# checks as being HARD or SOFT. By default, a passive host check
-# result will put a host into a HARD state type. This can be changed
-# by enabling this option.
-# Values: 0 = passive checks are HARD, 1 = passive checks are SOFT
-
-passive_host_checks_are_soft=0
-
-
-
-# ORPHANED HOST/SERVICE CHECK OPTIONS
-# These options determine whether or not Naemon will periodically
-# check for orphaned host service checks. Since service checks are
-# not rescheduled until the results of their previous execution
-# instance are processed, there exists a possibility that some
-# checks may never get rescheduled. A similar situation exists for
-# host checks, although the exact scheduling details differ a bit
-# from service checks. Orphaned checks seem to be a rare
-# problem and should not happen under normal circumstances.
-# If you have problems with service checks never getting
-# rescheduled, make sure you have orphaned service checks enabled.
-# Values: 1 = enable checks, 0 = disable checks
-
-check_for_orphaned_services=1
-check_for_orphaned_hosts=1
-
-
-
-# SERVICE FRESHNESS CHECK OPTION
-# This option determines whether or not Naemon will periodically
-# check the "freshness" of service results. Enabling this option
-# is useful for ensuring passive checks are received in a timely
-# manner.
-# Values: 1 = enabled freshness checking, 0 = disable freshness checking
-
-check_service_freshness=1
-
-
-
-# SERVICE FRESHNESS CHECK INTERVAL
-# This setting determines how often (in seconds) Naemon will
-# check the "freshness" of service check results. If you have
-# disabled service freshness checking, this option has no effect.
-
-service_freshness_check_interval=60
-
-
-
-# SERVICE CHECK TIMEOUT STATE
-# This setting determines the state Naemon will report when a
-# service check times out - that is does not respond within
-# service_check_timeout seconds. This can be useful if a
-# machine is running at too high a load and you do not want
-# to consider a failed service check to be critical (the default).
-# Valid settings are:
-# c - Critical (default)
-# u - Unknown
-# w - Warning
-# o - OK
-
-service_check_timeout_state=c
-
-
-
-# HOST FRESHNESS CHECK OPTION
-# This option determines whether or not Naemon will periodically
-# check the "freshness" of host results. Enabling this option
-# is useful for ensuring passive checks are received in a timely
-# manner.
-# Values: 1 = enabled freshness checking, 0 = disable freshness checking
-
-check_host_freshness=0
-
-
-
-# HOST FRESHNESS CHECK INTERVAL
-# This setting determines how often (in seconds) Naemon will
-# check the "freshness" of host check results. If you have
-# disabled host freshness checking, this option has no effect.
-
-host_freshness_check_interval=60
-
-
-
-
-# ADDITIONAL FRESHNESS THRESHOLD LATENCY
-# This setting determines the number of seconds that Naemon
-# will add to any host and service freshness thresholds that
-# it calculates (those not explicitly specified by the user).
-
-additional_freshness_latency=15
-
-
-
-
-# FLAP DETECTION OPTION
-# This option determines whether or not Naemon will try
-# and detect hosts and services that are "flapping".
-# Flapping occurs when a host or service changes between
-# states too frequently. When Naemon detects that a
-# host or service is flapping, it will temporarily suppress
-# notifications for that host/service until it stops
-# flapping. Flap detection is very experimental, so read
-# the HTML documentation before enabling this feature!
-# Values: 1 = enable flap detection
-# 0 = disable flap detection (default)
-
-enable_flap_detection=1
-
-
-
-# FLAP DETECTION THRESHOLDS FOR HOSTS AND SERVICES
-# Read the HTML documentation on flap detection for
-# an explanation of what this option does. This option
-# has no effect if flap detection is disabled.
-
-low_service_flap_threshold=5.0
-high_service_flap_threshold=20.0
-low_host_flap_threshold=5.0
-high_host_flap_threshold=20.0
-
-
-
-# DATE FORMAT OPTION
-# This option determines how short dates are displayed. Valid options
-# include:
-# us (MM-DD-YYYY HH:MM:SS)
-# euro (DD-MM-YYYY HH:MM:SS)
-# iso8601 (YYYY-MM-DD HH:MM:SS)
-# strict-iso8601 (YYYY-MM-DDTHH:MM:SS)
-#
-
-date_format=us
-
-
-
-
-# TIMEZONE OFFSET
-# This option is used to override the default timezone that this
-# instance of Naemon runs in. If not specified, Naemon will use
-# the system configured timezone.
-
-#use_timezone=US/Mountain
-#use_timezone=Australia/Brisbane
-
-
-
-# ILLEGAL OBJECT NAME CHARACTERS
-# This option allows you to specify illegal characters that cannot
-# be used in host names, service descriptions, or names of other
-# object types.
-
-illegal_object_name_chars=`~!$%^&*|'"<>?,()=
-
-
-
-# ILLEGAL MACRO OUTPUT CHARACTERS
-# This option allows you to specify illegal characters that are
-# stripped from macros before being used in notifications, event
-# handlers, etc. This DOES NOT affect macros used in service or
-# host check commands.
-# The following macros are stripped of the characters you specify:
-# $HOSTOUTPUT$
-# $HOSTPERFDATA$
-# $HOSTACKAUTHOR$
-# $HOSTACKCOMMENT$
-# $SERVICEOUTPUT$
-# $SERVICEPERFDATA$
-# $SERVICEACKAUTHOR$
-# $SERVICEACKCOMMENT$
-
-illegal_macro_output_chars=`~$&|'"<>
-
-
-
-# REGULAR EXPRESSION MATCHING
-# This option controls whether or not regular expression matching
-# takes place in the object config files. Regular expression
-# matching is used to match host, hostgroup, service, and service
-# group names/descriptions in some fields of various object types.
-# Values: 1 = enable regexp matching, 0 = disable regexp matching
-
-use_regexp_matching=0
-
-
-
-# "TRUE" REGULAR EXPRESSION MATCHING
-# This option controls whether or not "true" regular expression
-# matching takes place in the object config files. This option
-# only has an effect if regular expression matching is enabled
-# (see above). If this option is DISABLED, regular expression
-# matching only occurs if a string contains wildcard characters
-# (* and ?). If the option is ENABLED, regexp matching occurs
-# all the time (which can be annoying).
-# Values: 1 = enable true matching, 0 = disable true matching
-
-use_true_regexp_matching=0
-
-
-
-# ADMINISTRATOR EMAIL/PAGER ADDRESSES
-# The email and pager address of a global administrator (likely you).
-# Naemon never uses these values itself, but you can access them by
-# using the $ADMINEMAIL$ and $ADMINPAGER$ macros in your notification
-# commands.
-
-admin_email=naemon@localhost
-admin_pager=pagenaemon@localhost
-
-
-
-# DEBUG LEVEL
-# This option determines how much (if any) debugging information will
-# be written to the debug file. OR values together to log multiple
-# types of information.
-# Values:
-# -1 = Everything
-# 0 = Nothing
-# 1 = Functions
-# 2 = Configuration
-# 4 = Process information
-# 8 = Scheduled events
-# 16 = Host/service checks
-# 32 = Notifications
-# 64 = Event broker
-# 128 = External commands
-# 256 = Commands
-# 512 = Scheduled downtime
-# 1024 = Comments
-# 2048 = Macros
-
-debug_level=0
-
-
-
-# DEBUG VERBOSITY
-# This option determines how verbose the debug log out will be.
-# Values: 0 = Brief output
-# 1 = More detailed
-# 2 = Very detailed
-
-debug_verbosity=1
-
-
-
-# DEBUG FILE
-# This option determines where Naemon should write debugging information.
-
-debug_file=@cacheDir@/naemon.debug
-
-
-
-# MAX DEBUG FILE SIZE
-# This option determines the maximum size (in bytes) of the debug file. If
-# the file grows larger than this size, it will be renamed with a .old
-# extension. If a file already exists with a .old extension it will
-# automatically be deleted. This helps ensure your disk space usage doesn't
-# get out of control when debugging Naemon.
-
-max_debug_file_size=1000000
-
-
-
-# Should we allow hostgroups to have no hosts, we default this to off since
-# that was the old behavior
-
-allow_empty_hostgroup_assignment=0
-
-
-
-# Normally worker count is dynamically allocated based on 1.5 * number of cpu's
-# with a minimum of 4 workers. This value will override the defaults
-
-#check_workers=3
-
-
-# DISABLE SERVICE CHECKS WHEN HOST DOWN
-# This option will disable all service checks if the host is not in an UP state
-#
-# While desirable in some environments, enabling this value can distort report
-# values as the expected quantity of checks will not have been performed
-
-#host_down_disable_service_checks=0
-
-
-# CIRCULAR DEPENDENCIES (EXPERIMENTAL)
-# Allow for circular dependencies in naemon's host graph.
-# Enabaling this will cause propagation the following to stop working:
-# * scheduling downtime
-# * enabling notification
-# * disabling notification
-# This feature is experimental and bugs might occur.
-
-allow_circular_dependencies=0
diff --git a/modules/private/buildbot/common/build_helpers.py b/modules/private/buildbot/common/build_helpers.py
deleted file mode 100644
index acea905..0000000
--- a/modules/private/buildbot/common/build_helpers.py
+++ /dev/null
@@ -1,277 +0,0 @@
-from buildbot.plugins import util, steps, schedulers
-from buildbot_buildslist import BuildsList
-from shutil import which
-
-__all__ = [
- "force_scheduler", "deploy_scheduler", "hook_scheduler",
- "clean_branch", "package_and_upload", "SlackStatusPush",
- "XMPPStatusPush", "NixShellCommand"
- ]
-
-# Small helpers"
-@util.renderer
-def clean_branch(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0:
- return props["branch"].replace("/", "_")
- else:
- return "HEAD"
-
-def package_and_upload(package, package_dest, package_url):
- return [
- steps.ShellCommand(name="build package",
- logEnviron=False, haltOnFailure=True, workdir="source",
- command=["git", "archive", "HEAD", "-o", package]),
-
- steps.FileUpload(name="upload package", workersrc=package,
- workdir="source", masterdest=package_dest,
- url=package_url, mode=0o644),
-
- steps.ShellCommand(name="cleanup package", logEnviron=False,
- haltOnFailure=True, workdir="source", alwaysRun=True,
- command=["rm", "-f", package]),
- ]
-
-# Steps
-class NixShellCommand(steps.ShellCommand):
- def __init__(self, command=None, pure=True, nixfile=None, **kwargs):
- assert(isinstance(command, str))
- oldpath = kwargs.get("env", {}).get("PATH", None)
- if which("nix-shell", path=oldpath) is None:
- kwargs["env"] = kwargs.get("env", {})
- if isinstance(oldpath, str):
- kwargs["env"]["PATH"] = "/run/current-system/sw/bin:" + oldpath
- elif isinstance(oldpath, list):
- kwargs["env"]["PATH"] = ["/run/current-system/sw/bin"] + oldpath
- nixcommand = ["nix-shell"]
- if pure:
- nixcommand.append("--pure")
- nixcommand.append("--run")
- nixcommand.append(command)
- if nixfile is not None:
- nixcommand.append(nixfile)
- super().__init__(command=nixcommand, **kwargs)
-
-# Schedulers
-def force_scheduler(name, builders):
- return schedulers.ForceScheduler(name=name,
- label="Force build", buttonName="Force build",
- reason=util.StringParameter(name="reason", label="Reason", default="Force build"),
- codebases=[
- util.CodebaseParameter("",
- branch=util.StringParameter(
- name="branch", label="Git reference (tag, branch)", required=True),
- revision=util.FixedParameter(name="revision", default=""),
- repository=util.FixedParameter(name="repository", default=""),
- project=util.FixedParameter(name="project", default=""),
- ),
- ],
- username=util.FixedParameter(name="username", default="Web button"),
- builderNames=builders)
-
-def deploy_scheduler(name, builders):
- return schedulers.ForceScheduler(name=name,
- builderNames=builders,
- label="Deploy built package", buttonName="Deploy",
- username=util.FixedParameter(name="username", default="Web button"),
- codebases=[
- util.CodebaseParameter(codebase="",
- branch=util.FixedParameter(name="branch", default=""),
- revision=util.FixedParameter(name="revision", default=""),
- repository=util.FixedParameter(name="repository", default=""),
- project=util.FixedParameter(name="project", default=""))],
- reason=util.FixedParameter(name="reason", default="Deploy"),
- properties=[
- util.ChoiceStringParameter(label="Environment",
- name="environment", default="integration",
- choices=["integration", "production"]),
- BuildsList(label="Build to deploy", name="build"),
- ]
- )
-
-def hook_scheduler(project, timer=10):
- return schedulers.AnyBranchScheduler(
- change_filter=util.ChangeFilter(category="hooks", project=project),
- name=project, treeStableTimer=timer, builderNames=["{}_build".format(project)])
-
-# Slack/XMPP status push
-from buildbot.reporters.http import HttpStatusPushBase
-from twisted.internet import defer
-from twisted.python import log
-from buildbot.util import httpclientservice
-from buildbot.reporters import utils
-from buildbot.process import results
-from twisted.words.protocols.jabber.jid import JID
-from wokkel import client, xmppim
-from functools import partial
-
-class SlackStatusPush(HttpStatusPushBase):
- name = "SlackStatusPush"
-
- @defer.inlineCallbacks
- def reconfigService(self, serverUrl, **kwargs):
- yield HttpStatusPushBase.reconfigService(self, **kwargs)
- self._http = yield httpclientservice.HTTPClientService.getService(
- self.master, serverUrl)
-
- @defer.inlineCallbacks
- def send(self, build):
- yield utils.getDetailsForBuild(self.master, build, wantProperties=True)
- response = yield self._http.post("", json=self.format(build))
- if response.code != 200:
- log.msg("%s: unable to upload status: %s" %
- (response.code, response.content))
-
- def format(self, build):
- colors = [
- "#36A64F", # success
- "#F1E903", # warnings
- "#DA0505", # failure
- "#FFFFFF", # skipped
- "#000000", # exception
- "#FFFFFF", # retry
- "#D02CA9", # cancelled
- ]
-
- if "environment" in build["properties"]:
- msg = "{} environment".format(build["properties"]["environment"][0])
- if "build" in build["properties"]:
- msg = "of archive {} in ".format(build["properties"]["build"][0]) + msg
- elif len(build["buildset"]["sourcestamps"][0]["branch"] or []) > 0:
- msg = "revision {}".format(build["buildset"]["sourcestamps"][0]["branch"])
- else:
- msg = "build"
-
- if build["complete"]:
- timedelta = int((build["complete_at"] - build["started_at"]).total_seconds())
- hours, rest = divmod(timedelta, 3600)
- minutes, seconds = divmod(rest, 60)
- if hours > 0:
- duration = "{}h {}min {}s".format(hours, minutes, seconds)
- elif minutes > 0:
- duration = "{}min {}s".format(minutes, seconds)
- else:
- duration = "{}s".format(seconds)
-
- text = "Build <{}|{}> of {}'s {} was {} in {}.".format(
- build["url"], build["buildid"],
- build["builder"]["name"],
- msg,
- results.Results[build["results"]],
- duration,
- )
- fields = [
- {
- "title": "Build",
- "value": "<{}|{}>".format(build["url"], build["buildid"]),
- "short": True,
- },
- {
- "title": "Project",
- "value": build["builder"]["name"],
- "short": True,
- },
- {
- "title": "Build status",
- "value": results.Results[build["results"]],
- "short": True,
- },
- {
- "title": "Build duration",
- "value": duration,
- "short": True,
- },
- ]
- if "environment" in build["properties"]:
- fields.append({
- "title": "Environment",
- "value": build["properties"]["environment"][0],
- "short": True,
- })
- if "build" in build["properties"]:
- fields.append({
- "title": "Archive",
- "value": build["properties"]["build"][0],
- "short": True,
- })
- attachments = [{
- "fallback": "",
- "color": colors[build["results"]],
- "fields": fields
- }]
- else:
- text = "Build <{}|{}> of {}'s {} started.".format(
- build["url"], build["buildid"],
- build["builder"]["name"],
- msg,
- )
- attachments = []
-
- return {
- "username": "Buildbot",
- "icon_url": "http://docs.buildbot.net/current/_static/icon.png",
- "text": text,
- "attachments": attachments,
- }
-
-class XMPPStatusPush(HttpStatusPushBase):
- name = "XMPPStatusPush"
-
- @defer.inlineCallbacks
- def reconfigService(self, password, recipients, **kwargs):
- yield HttpStatusPushBase.reconfigService(self, **kwargs)
- self.password = password
- self.recipients = recipients
-
- @defer.inlineCallbacks
- def send(self, build):
- yield utils.getDetailsForBuild(self.master, build, wantProperties=True)
- body = self.format(build)
- factory = client.DeferredClientFactory(JID("notify_bot@immae.fr/buildbot"), self.password)
- d = client.clientCreator(factory)
- def send_message(recipient, stream):
- message = xmppim.Message(recipient=JID(recipient), body=body)
- message.stanzaType = 'chat'
- stream.send(message.toElement())
- # To allow chaining
- return stream
- for recipient in self.recipients:
- d.addCallback(partial(send_message, recipient))
- d.addCallback(lambda _: factory.streamManager.xmlstream.sendFooter())
- d.addErrback(log.err)
-
- def format(self, build):
- if "environment" in build["properties"]:
- msg = "{} environment".format(build["properties"]["environment"][0])
- if "build" in build["properties"]:
- msg = "of archive {} in ".format(build["properties"]["build"][0]) + msg
- elif len(build["buildset"]["sourcestamps"][0]["branch"] or []) > 0:
- msg = "revision {}".format(build["buildset"]["sourcestamps"][0]["branch"])
- else:
- msg = "build"
-
- if build["complete"]:
- timedelta = int((build["complete_at"] - build["started_at"]).total_seconds())
- hours, rest = divmod(timedelta, 3600)
- minutes, seconds = divmod(rest, 60)
- if hours > 0:
- duration = "{}h {}min {}s".format(hours, minutes, seconds)
- elif minutes > 0:
- duration = "{}min {}s".format(minutes, seconds)
- else:
- duration = "{}s".format(seconds)
-
- text = "Build {} ( {} ) of {}'s {} was {} in {}.".format(
- build["buildid"], build["url"],
- build["builder"]["name"],
- msg,
- results.Results[build["results"]],
- duration,
- )
- else:
- text = "Build {} ( {} ) of {}'s {} started.".format(
- build["buildid"], build["url"],
- build["builder"]["name"],
- msg,
- )
-
- return text
diff --git a/modules/private/buildbot/common/libvirt.py b/modules/private/buildbot/common/libvirt.py
deleted file mode 100644
index e250627..0000000
--- a/modules/private/buildbot/common/libvirt.py
+++ /dev/null
@@ -1,318 +0,0 @@
-# This file was part of Buildbot. Buildbot is free software: you can
-# redistribute it and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Portions Copyright Buildbot Team Members
-# Portions Copyright 2010 Isotoma Limited
-
-
-import os
-
-from twisted.internet import defer
-from twisted.internet import threads
-from twisted.internet import utils
-from twisted.python import failure
-from twisted.python import log
-
-from buildbot import config
-from buildbot.util.eventual import eventually
-from buildbot.worker import AbstractLatentWorker
-
-try:
- import libvirt
-except ImportError:
- libvirt = None
-
-import random
-import string
-
-def random_string_generator():
- chars = string.ascii_letters
- return ''.join(random.choice(chars) for x in range(6))
-
-class WorkQueue:
-
- """
- I am a class that turns parallel access into serial access.
-
- I exist because we want to run libvirt access in threads as we don't
- trust calls not to block, but under load libvirt doesn't seem to like
- this kind of threaded use.
- """
-
- def __init__(self):
- self.queue = []
-
- def _process(self):
- log.msg("Looking to start a piece of work now...")
-
- # Is there anything to do?
- if not self.queue:
- log.msg("_process called when there is no work")
- return
-
- # Peek at the top of the stack - get a function to call and
- # a deferred to fire when its all over
- d, next_operation, args, kwargs = self.queue[0]
-
- # Start doing some work - expects a deferred
- try:
- d2 = next_operation(*args, **kwargs)
- except Exception:
- d2 = defer.fail()
-
- # Whenever a piece of work is done, whether it worked or not
- # call this to schedule the next piece of work
- @d2.addBoth
- def _work_done(res):
- log.msg("Completed a piece of work")
- self.queue.pop(0)
- if self.queue:
- log.msg("Preparing next piece of work")
- eventually(self._process)
- return res
-
- # When the work is done, trigger d
- d2.chainDeferred(d)
-
- def execute(self, cb, *args, **kwargs):
- kickstart_processing = not self.queue
- d = defer.Deferred()
- self.queue.append((d, cb, args, kwargs))
- if kickstart_processing:
- self._process()
- return d
-
- def executeInThread(self, cb, *args, **kwargs):
- return self.execute(threads.deferToThread, cb, *args, **kwargs)
-
-
-# A module is effectively a singleton class, so this is OK
-queue = WorkQueue()
-
-
-class Domain:
-
- """
- I am a wrapper around a libvirt Domain object
- """
-
- def __init__(self, connection, domain):
- self.connection = connection
- self.domain = domain
-
- def name(self):
- return queue.executeInThread(self.domain.name)
-
- def create(self):
- return queue.executeInThread(self.domain.create)
-
- def shutdown(self):
- return queue.executeInThread(self.domain.shutdown)
-
- def destroy(self):
- return queue.executeInThread(self.domain.destroy)
-
-class Volume:
- def __init__(self, connection, volume):
- self.connection = connection
- self.volume = volume
-
- @defer.inlineCallbacks
- def destroy(self):
- yield queue.executeInThread(self.volume.wipe)
- yield queue.executeInThread(self.volume.delete)
-
-class Pool:
- VolumeClass = Volume
- def __init__(self, connection, pool):
- self.connection = connection
- self.pool = pool
-
- @defer.inlineCallbacks
- def create_volume(self, xml):
- res = yield queue.executeInThread(self.pool.createXML, xml)
- return self.VolumeClass(self.connection, res)
-
-class Connection:
-
- """
- I am a wrapper around a libvirt Connection object.
- """
-
- DomainClass = Domain
- PoolClass = Pool
-
- def __init__(self, uri):
- self.uri = uri
- self._connection = None
-
- @property
- def connection(self):
- if self._connection is not None:
- try:
- if not self._connection.isAlive():
- self._connection = None
- except:
- self._connection = None
- if self._connection is None:
- self._connection = libvirt.open(self.uri)
- return self._connection
-
- @defer.inlineCallbacks
- def create(self, xml):
- """ I take libvirt XML and start a new VM """
- res = yield queue.executeInThread(self.connection.createXML, xml, 0)
- return self.DomainClass(self, res)
-
- @defer.inlineCallbacks
- def lookup_pool(self, name):
- res = yield queue.executeInThread(self.connection.storagePoolLookupByName, name)
- return self.PoolClass(self, res)
-
-class LibVirtWorker(AbstractLatentWorker):
-
- def __init__(self, name, password, connection, master_url, base_image=None, **kwargs):
- super().__init__(name, password, **kwargs)
- if not libvirt:
- config.error(
- "The python module 'libvirt' is needed to use a LibVirtWorker")
-
- self.master_url = master_url
- self.random_name = random_string_generator()
- self.connection = connection
- self.base_image = base_image
-
- self.domain = None
- self.domain_name = "buildbot-" + self.workername + "-" + self.random_name
- self.volume = None
- self.volume_name = "buildbot-" + self.workername + "-" + self.random_name
- self.pool_name = "buildbot-disks"
-
- def reconfigService(self, *args, **kwargs):
- if 'build_wait_timeout' not in kwargs:
- kwargs['build_wait_timeout'] = 0
- return super().reconfigService(*args, **kwargs)
-
- def canStartBuild(self):
- if self.domain and not self.isConnected():
- log.msg(
- "Not accepting builds as existing domain but worker not connected")
- return False
-
- return super().canStartBuild()
-
- @defer.inlineCallbacks
- def _prepare_image(self):
- log.msg("Creating temporary image {}".format(self.volume_name))
- pool = yield self.connection.lookup_pool(self.pool_name)
- vol_xml = """
-
- {vol_name}
- 10
-
-
-
- 0600
- 0
- 0
-
-
-
- /etc/libvirtd/base-images/buildbot.qcow2
-
-
-
- """.format(vol_name = self.volume_name)
- self.volume = yield pool.create_volume(vol_xml)
-
- @defer.inlineCallbacks
- def start_instance(self, build):
- """
- I start a new instance of a VM.
-
- If a base_image is specified, I will make a clone of that otherwise i will
- use image directly.
-
- If i'm not given libvirt domain definition XML, I will look for my name
- in the list of defined virtual machines and start that.
- """
- domain_xml = """
-
- {domain_name}
- 2
- 1
-
-
- buildbot_master_url={master_url}
- buildbot_worker_name={worker_name}
-
-
-
- hvm
-
-
-
- /run/current-system/sw/bin/qemu-system-x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- """.format(volume_name = self.volume_name, master_url = self.master_url, pool_name =
- self.pool_name, domain_name = self.domain_name, worker_name = self.workername)
-
- yield self._prepare_image()
-
- try:
- self.domain = yield self.connection.create(domain_xml)
- except Exception:
- log.err(failure.Failure(),
- ("Cannot start a VM ({}), failing gracefully and triggering"
- "a new build check").format(self.workername))
- self.domain = None
- return False
-
- return [self.domain_name]
-
- def stop_instance(self, fast=False):
- """
- I attempt to stop a running VM.
- I make sure any connection to the worker is removed.
- If the VM was using a cloned image, I remove the clone
- When everything is tidied up, I ask that bbot looks for work to do
- """
-
- log.msg("Attempting to stop '{}'".format(self.workername))
- if self.domain is None:
- log.msg("I don't think that domain is even running, aborting")
- return defer.succeed(None)
-
- domain = self.domain
- self.domain = None
-
- d = domain.destroy()
- if self.volume is not None:
- self.volume.destroy()
-
- return d
diff --git a/modules/private/buildbot/common/master.cfg b/modules/private/buildbot/common/master.cfg
deleted file mode 100644
index abe08e0..0000000
--- a/modules/private/buildbot/common/master.cfg
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- python -*-
-# ex: set filetype=python:
-
-from buildbot.plugins import secrets, util, webhooks
-from buildbot.util import bytes2unicode
-import re
-import os
-from buildbot_config import E, configure
-import json
-
-class CustomBase(webhooks.base):
- def getChanges(self, request):
- try:
- content = request.content.read()
- args = json.loads(bytes2unicode(content))
- except Exception as e:
- raise ValueError("Error loading JSON: " + str(e))
-
- args.setdefault("comments", "")
- args.setdefault("repository", "")
- args.setdefault("author", args.get("who"))
-
- return ([args], None)
-
-userInfoProvider = util.LdapUserInfo(
- uri=E.LDAP_URL,
- bindUser=E.LDAP_ADMIN_USER,
- bindPw=open(E.SECRETS_FILE + "/ldap", "r").read().rstrip(),
- accountBase=E.LDAP_BASE,
- accountPattern=E.LDAP_PATTERN,
- accountFullName='cn',
- accountEmail='mail',
- avatarData="jpegPhoto",
- groupBase=E.LDAP_BASE,
- groupName="cn",
- groupMemberPattern=E.LDAP_GROUP_PATTERN,
- )
-
-c = BuildmasterConfig = {
- "title": E.TITLE,
- "titleURL": E.TITLE_URL,
- "db": {
- "db_url": "sqlite:///state.sqlite"
- },
- "protocols": { "pb": { "port": E.PB_SOCKET } },
- "workers": [],
- "change_source": [],
- "schedulers": [],
- "builders": [],
- "services": [],
- "secretsProviders": [
- secrets.SecretInAFile(E.SECRETS_FILE),
- ],
- "www": {
- "change_hook_dialects": { "base": { "custom_class": CustomBase } },
- "plugins": {
- "waterfall_view": {},
- "console_view": {},
- "grid_view": {},
- "buildslist": {},
- },
- "auth": util.RemoteUserAuth(
- header=b"X-Remote-User",
- userInfoProvider=userInfoProvider,
- headerRegex=re.compile(br"(?P[^ @]+)")),
- }
- }
-
-configure(c)
diff --git a/modules/private/buildbot/default.nix b/modules/private/buildbot/default.nix
deleted file mode 100644
index ec28b63..0000000
--- a/modules/private/buildbot/default.nix
+++ /dev/null
@@ -1,244 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- varDir = "/var/lib/buildbot";
- buildbot_common = pkgs.python3Packages.buildPythonPackage rec {
- name = "buildbot_common";
- src = ./common;
- format = "other";
- installPhase = ''
- mkdir -p $out/${pkgs.python3.pythonForBuild.sitePackages}
- cp -a $src $out/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_common
- '';
- };
- buildbot = pkgs.python3Packages.buildbot-full;
-in
-{
- options = {
- myServices.buildbot.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable buildbot.
- '';
- };
- };
-
- config = lib.mkIf config.myServices.buildbot.enable {
- ids.uids.buildbot = config.myEnv.buildbot.user.uid;
- ids.gids.buildbot = config.myEnv.buildbot.user.gid;
-
- users.groups.buildbot.gid = config.ids.gids.buildbot;
- users.users.buildbot = {
- name = "buildbot";
- uid = config.ids.uids.buildbot;
- group = "buildbot";
- description = "Buildbot user";
- home = varDir;
- extraGroups = [ "keys" ];
- };
-
- services.websites.env.tools.watchPaths = lib.attrsets.mapAttrsToList
- (k: project: config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include")
- config.myEnv.buildbot.projects;
-
- services.websites.env.tools.vhostConfs.git.extraConfig = lib.attrsets.mapAttrsToList (k: project: ''
- RedirectMatch permanent "^/buildbot/${project.name}$" "/buildbot/${project.name}/"
- RewriteEngine On
- RewriteRule ^/buildbot/${project.name}/ws(.*)$ unix:///run/buildbot/${project.name}.sock|ws://git.immae.eu/ws$1 [P,NE,QSA,L]
- ProxyPass /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/
- ProxyPassReverse /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/
-
- Use LDAPConnect
- Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu
-
- SetEnvIf X-Url-Scheme https HTTPS=1
- ProxyPreserveHost On
-
-
-
- Require local
- Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu
- Include ${config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include"}
-
-
- '') config.myEnv.buildbot.projects;
-
- system.activationScripts = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" {
- deps = [ "users" "wrappers" ];
- text = ''
- install -m 755 -o buildbot -g buildbot -d ${varDir}/${project.name}
-
- ${project.activationScript}
- '';
- }) config.myEnv.buildbot.projects;
-
- secrets.keys = lib.listToAttrs (
- lib.lists.flatten (
- lib.attrsets.mapAttrsToList (k: project:
- lib.attrsets.mapAttrsToList (k: v:
- (lib.nameValuePair "buildbot/${project.name}/${k}" {
- permissions = "0600";
- user = "buildbot";
- group = "buildbot";
- text = v;
- })
- ) project.secrets
- ++ [
- (lib.nameValuePair "buildbot/${project.name}/webhook-httpd-include" {
- permissions = "0600";
- user = "wwwrun";
- group = "wwwrun";
- text = lib.optionalString (project.webhookTokens != null) ''
- Require expr "req('Access-Key') in { ${builtins.concatStringsSep ", " (map (x: "'${x}'") project.webhookTokens)} }"
- '';
- })
- (lib.nameValuePair "buildbot/${project.name}/environment_file" {
- permissions = "0600";
- user = "buildbot";
- group = "buildbot";
- text = let
- project_env = with lib.attrsets;
- mapAttrs' (k: v: nameValuePair "BUILDBOT_${k}" v) project.environment //
- mapAttrs' (k: v: nameValuePair "BUILDBOT_PATH_${k}" (v pkgs)) (attrByPath ["builderPaths"] {} project) //
- {
- BUILDBOT_PROJECT_DIR = ./projects + "/${project.name}";
- BUILDBOT_WORKER_PORT = builtins.toString project.workerPort;
- BUILDBOT_HOST = config.hostEnv.fqdn;
- BUILDBOT_VIRT_URL = "qemu+ssh://libvirt@dilion.immae.eu/system";
- };
- in builtins.concatStringsSep "\n"
- (lib.mapAttrsToList (envK: envV: "${envK}=${envV}") project_env);
- })
- ]
- ) config.myEnv.buildbot.projects
- )
- ) // {
- "buildbot/ldap" = {
- permissions = "0600";
- user = "buildbot";
- group = "buildbot";
- text = config.myEnv.buildbot.ldap.password;
- };
- "buildbot/worker_password" = {
- permissions = "0600";
- user = "buildbot";
- group = "buildbot";
- text = config.myEnv.buildbot.workerPassword;
- };
- "buildbot/ssh_key" = {
- permissions = "0600";
- user = "buildbot";
- group = "buildbot";
- text = config.myEnv.buildbot.ssh_key.private;
- };
- };
-
- services.filesWatcher = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" {
- restart = true;
- paths = [
- config.secrets.fullPaths."buildbot/ldap"
- config.secrets.fullPaths."buildbot/worker_password"
- config.secrets.fullPaths."buildbot/ssh_key"
- config.secrets.fullPaths."buildbot/${project.name}/environment_file"
- ] ++ lib.attrsets.mapAttrsToList (k: v: config.secrets.fullPaths."buildbot/${project.name}/${k}") project.secrets;
- }) config.myEnv.buildbot.projects;
-
- systemd.slices.buildbot = {
- description = "buildbot slice";
- };
-
- networking.firewall.allowedTCPPorts = lib.attrsets.mapAttrsToList (k: v: v.workerPort) config.myEnv.buildbot.projects;
- systemd.services = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" {
- description = "Buildbot Continuous Integration Server ${project.name}.";
- after = [ "network-online.target" ];
- wantedBy = [ "multi-user.target" ];
- path = project.packages pkgs ++ (project.pythonPackages buildbot.pythonModule pkgs);
- preStart = let
- master-cfg = "${buildbot_common}/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_common/master.cfg";
- tac_file = pkgs.writeText "buildbot.tac" ''
- import os
-
- from twisted.application import service
- from buildbot.master import BuildMaster
-
- basedir = '${varDir}/${project.name}'
- rotateLength = 10000000
- maxRotatedFiles = 10
- configfile = '${master-cfg}'
-
- # Default umask for server
- umask = None
-
- # if this is a relocatable tac file, get the directory containing the TAC
- if basedir == '.':
- import os
- basedir = os.path.abspath(os.path.dirname(__file__))
-
- # note: this line is matched against to check that this is a buildmaster
- # directory; do not edit it.
- application = service.Application('buildmaster')
- from twisted.python.logfile import LogFile
- from twisted.python.log import ILogObserver, FileLogObserver
- logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength,
- maxRotatedFiles=maxRotatedFiles)
- application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
-
- m = BuildMaster(basedir, configfile, umask)
- m.setServiceParent(application)
- m.log_rotation.rotateLength = rotateLength
- m.log_rotation.maxRotatedFiles = maxRotatedFiles
- '';
- in ''
- if [ ! -f ${varDir}/${project.name}/buildbot.tac ]; then
- ${buildbot}/bin/buildbot create-master -c "${master-cfg}" "${varDir}/${project.name}"
- rm -f ${varDir}/${project.name}/master.cfg.sample
- rm -f ${varDir}/${project.name}/buildbot.tac
- fi
- ln -sf ${tac_file} ${varDir}/${project.name}/buildbot.tac
- # different buildbots may be trying that simultaneously, add the || true to avoid complaining in case of race
- install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_key"} ${varDir}/buildbot_key || true
- buildbot_secrets=${varDir}/${project.name}/secrets
- install -m 0700 -o buildbot -g buildbot -d $buildbot_secrets
- install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ldap"} $buildbot_secrets/ldap
- install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/worker_password"} $buildbot_secrets/worker_password
- ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList
- (k: v: "install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/${project.name}/${k}"} $buildbot_secrets/${k}") project.secrets
- )}
- ${buildbot}/bin/buildbot upgrade-master ${varDir}/${project.name}
- '';
- environment = let
- buildbot_config = pkgs.python3Packages.buildPythonPackage (rec {
- name = "buildbot_config-${project.name}";
- src = ./projects + "/${project.name}";
- format = "other";
- installPhase = ''
- mkdir -p $out/${pkgs.python3.pythonForBuild.sitePackages}
- cp -a $src $out/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_config
- '';
- });
- HOME = "${varDir}/${project.name}";
- PYTHONPATH = "${buildbot.pythonModule.withPackages (self: project.pythonPackages self pkgs ++ [
- pkgs.python3Packages.libvirt
- pkgs.python3Packages.wokkel
- pkgs.python3Packages.treq pkgs.python3Packages.ldap3 buildbot
- pkgs.python3Packages.buildbot-worker
- buildbot_common buildbot_config
- ])}/${buildbot.pythonModule.sitePackages}${if project.pythonPathHome then ":${varDir}/${project.name}/.local/${pkgs.python3.pythonForBuild.sitePackages}" else ""}";
- in { inherit PYTHONPATH HOME; };
-
- serviceConfig = {
- Slice = "buildbot.slice";
- Type = "forking";
- User = "buildbot";
- Group = "buildbot";
- RuntimeDirectory = "buildbot";
- RuntimeDirectoryPreserve = "yes";
- StateDirectory = "buildbot";
- SupplementaryGroups = "keys";
- WorkingDirectory = "${varDir}/${project.name}";
- ExecStart = "${buildbot}/bin/buildbot start";
- EnvironmentFile = config.secrets.fullPaths."buildbot/${project.name}/environment_file";
- };
- }) config.myEnv.buildbot.projects;
- };
-}
diff --git a/modules/private/buildbot/projects/caldance/__init__.py b/modules/private/buildbot/projects/caldance/__init__.py
deleted file mode 100644
index 2074d9e..0000000
--- a/modules/private/buildbot/projects/caldance/__init__.py
+++ /dev/null
@@ -1,198 +0,0 @@
-from buildbot.plugins import *
-from buildbot_common.build_helpers import *
-import os
-from buildbot.util import bytes2unicode
-import json
-
-__all__ = [ "configure", "E" ]
-
-class E():
- PROJECT = "caldance"
- BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT)
- SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT)
- PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT)
- RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT)
- RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT)
- GIT_URL = "gitolite@git.immae.eu:perso/simon_descarpentries/www.cal-dance.com"
- SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key"
- SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF"
- LDAP_HOST = "ldap.immae.eu"
- LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu"
- XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ")
-
- PUPPET_HOST = {
- "integration": [ "-p8022", "root@caldance.cs.immae.dev"],
- }
-
- # master.cfg
- SECRETS_FILE = os.getcwd() + "/secrets"
- LDAP_URL = "ldaps://ldap.immae.eu:636"
- LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_BASE = "dc=immae,dc=eu"
- LDAP_PATTERN = "(uid=%(username)s)"
- LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=caldance,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
- TITLE_URL = "https://caldance.cs.immae.dev"
- TITLE = "Caldance"
-
-class CustomBase(webhooks.base):
- def getChanges(self, request):
- try:
- content = request.content.read()
- args = json.loads(bytes2unicode(content))
- except Exception as e:
- raise ValueError("Error loading JSON: " + str(e))
-
- args.setdefault("comments", "")
- args.setdefault("repository", "")
- args.setdefault("author", args.get("who", "unknown"))
-
- if args["category"] == "deploy_webhook":
- args = {
- "category": "deploy_webhook",
- "comments": "",
- "repository": "",
- "author": "webhook",
- "project": "Caldance",
- "properties": {
- "environment": args.get("environment", "integration"),
- "build": "caldance_{}.tar.gz".format(args.get("build", "master"))
- }
- }
-
- return ([args], None)
-
-def deploy_hook_scheduler(project, timer=1):
- return schedulers.AnyBranchScheduler(
- change_filter=util.ChangeFilter(category="deploy_webhook", project=project),
- name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)])
-
-def configure(c):
- c["buildbotURL"] = E.BUILDBOT_URL
- c["www"]["port"] = E.SOCKET
-
- c["www"]["change_hook_dialects"]["base"] = {
- "custom_class": CustomBase
- }
- c['workers'].append(worker.LocalWorker("generic-worker"))
- c['workers'].append(worker.LocalWorker("deploy-worker"))
-
- db_lock = util.MasterLock("deploy_after_build")
-
- c['schedulers'].append(hook_scheduler("Caldance", timer=1))
- c['schedulers'].append(force_scheduler("force_caldance", ["Caldance_build"]))
- c['schedulers'].append(deploy_scheduler("deploy_caldance", ["Caldance_deploy"]))
- c['schedulers'].append(deploy_hook_scheduler("Caldance", timer=1))
-
- c['builders'].append(factory("caldance", locks=[db_lock.access('exclusive')]))
-
- c['builders'].append(deploy_factory("caldance", locks=[db_lock.access('exclusive')]))
-
- c['services'].append(SlackStatusPush(
- name="slack_status_caldance",
- builders=["Caldance_build", "Caldance_deploy"],
- serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip()))
- c['services'].append(XMPPStatusPush(
- name="xmpp_status_caldance",
- builders=["Caldance_build", "Caldance_deploy"],
- recipients=E.XMPP_RECIPIENTS,
- password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip()))
-
-def factory(project, locks=[], ignore_fails=False):
- release_file = "{1}/{0}_%(kw:clean_branch)s.tar.gz"
-
- package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch)
- package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch)
- package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch)
-
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.GIT_URL,
- sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addSteps(package_and_upload(package, package_dest, package_url))
-
- return util.BuilderConfig(
- name="{}_build".format(project.capitalize()),
- locks=locks,
- workernames=["generic-worker"], factory=factory)
-
-def compute_build_infos(project):
- @util.renderer
- def compute(props):
- import re, hashlib
- build_file = props.getProperty("build")
- package_dest = "{1}/{0}".format(build_file, E.RELEASE_PATH)
- version = re.match(r"{0}_(.*).tar.gz".format(project), build_file).group(1)
- with open(package_dest, "rb") as f:
- sha = hashlib.sha256(f.read()).hexdigest()
- return {
- "build_version": version,
- "build_hash": sha,
- }
- return compute
-
-@util.renderer
-def puppet_ssh_command(props):
- environment = props["environment"] if props.hasProperty("environment") else "integration"
- ssh_command = [
- "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no",
- "-i", E.SSH_KEY_PATH ]
- return ssh_command + E.PUPPET_HOST.get(environment, ["host.invalid"])
-
-def deploy_factory(project, locks=[]):
- package_dest = util.Interpolate("{0}/%(prop:build)s".format(E.RELEASE_PATH))
-
- factory = util.BuildFactory()
- factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest]))
- factory.addStep(steps.SetProperties(properties=compute_build_infos(project)))
- factory.addStep(LdapPush(environment=util.Property("environment"),
- project=project, build_version=util.Property("build_version"),
- build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap")))
- factory.addStep(steps.MasterShellCommand(command=puppet_ssh_command))
- return util.BuilderConfig(
- name="{}_deploy".format(project.capitalize()),
- locks=locks,
- workernames=["deploy-worker"], factory=factory)
-
-from twisted.internet import defer
-from buildbot.process.buildstep import FAILURE
-from buildbot.process.buildstep import SUCCESS
-from buildbot.process.buildstep import BuildStep
-
-class LdapPush(BuildStep):
- name = "LdapPush"
- renderables = ["environment", "project", "build_version", "build_hash", "ldap_password"]
-
- def __init__(self, **kwargs):
- self.environment = kwargs.pop("environment")
- self.project = kwargs.pop("project")
- self.build_version = kwargs.pop("build_version")
- self.build_hash = kwargs.pop("build_hash")
- self.ldap_password = kwargs.pop("ldap_password")
- self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST)
- super().__init__(**kwargs)
-
- def run(self):
- import json
- from ldap3 import Reader, Writer, Server, Connection, ObjectDef
- server = Server(self.ldap_host)
- conn = Connection(server,
- user=E.LDAP_DN,
- password=self.ldap_password)
- conn.bind()
- obj = ObjectDef("immaePuppetClass", conn)
- r = Reader(conn, obj,
- "cn=caldance.{},{}".format(self.environment, E.LDAP_ROLES_BASE))
- r.search()
- if len(r) > 0:
- w = Writer.from_cursor(r)
- for value in w[0].immaePuppetJson.values:
- config = json.loads(value)
- if "role::caldance::{}_version".format(self.project) in config:
- config["role::caldance::{}_version".format(self.project)] = self.build_version
- config["role::caldance::{}_sha256".format(self.project)] = self.build_hash
- w[0].immaePuppetJson -= value
- w[0].immaePuppetJson += json.dumps(config, indent=" ")
- w.commit()
- return defer.succeed(SUCCESS)
- return defer.succeed(FAILURE)
diff --git a/modules/private/buildbot/projects/cryptoportfolio/__init__.py b/modules/private/buildbot/projects/cryptoportfolio/__init__.py
deleted file mode 100644
index 5d70f95..0000000
--- a/modules/private/buildbot/projects/cryptoportfolio/__init__.py
+++ /dev/null
@@ -1,169 +0,0 @@
-from buildbot.plugins import *
-from buildbot_common.build_helpers import *
-import os
-
-__all__ = [ "configure", "E" ]
-
-class E():
- PROJECT = "cryptoportfolio"
- BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT)
- SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT)
- PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT)
- RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT)
- RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT)
- GIT_URL = "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/{0}.git"
- SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key"
- LDAP_HOST = "ldap.immae.eu"
- LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu"
-
- PUPPET_HOST = {
- "production": "root@cryptoportfolio.immae.eu",
- "integration": "root@cryptoportfolio-dev.immae.eu"
- }
-
- # master.cfg
- SECRETS_FILE = os.getcwd() + "/secrets"
- LDAP_URL = "ldaps://ldap.immae.eu:636"
- LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_BASE = "dc=immae,dc=eu"
- LDAP_PATTERN = "(uid=%(username)s)"
- LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=cryptoportfolio,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
- TITLE_URL = "https://git.immae.eu"
- TITLE = "Cryptoportfolio"
-
-# eval .. dans .zshrc_local
-# mkdir -p $BUILD/go
-# export GOPATH=$BUILD/go
-# go get -u github.com/golang/dep/cmd/dep
-# export PATH=$PATH:$BUILD/go/bin
-# go get git.immae.eu/Cryptoportfolio/Front.git
-# cd $BUILD/go/src/git.immae.eu/Cryptoportfolio/Front.git
-# git checkout dev
-# dep ensure
-def configure(c):
- c["buildbotURL"] = E.BUILDBOT_URL
- c["www"]["port"] = E.SOCKET
-
- c['workers'].append(worker.LocalWorker("generic-worker"))
- c['workers'].append(worker.LocalWorker("deploy-worker"))
-
- c['schedulers'].append(hook_scheduler("Trader"))
- c['schedulers'].append(hook_scheduler("Front"))
- c['schedulers'].append(force_scheduler(
- "force_cryptoportfolio", ["Trader_build", "Front_build"]))
- c['schedulers'].append(deploy_scheduler("deploy_cryptoportfolio",
- ["Trader_deploy", "Front_deploy"]))
-
- c['builders'].append(factory("trader"))
- c['builders'].append(factory("front", ignore_fails=True))
-
- c['builders'].append(deploy_factory("trader"))
- c['builders'].append(deploy_factory("front"))
-
- c['services'].append(SlackStatusPush(
- name="slack_status_cryptoportfolio",
- builders=["Front_build", "Trader_build", "Front_deploy", "Trader_deploy"],
- serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip()))
-
-def factory(project, ignore_fails=False):
- release_file = "{1}/{0}/{0}_%(kw:clean_branch)s.tar.gz"
-
- url = E.GIT_URL.format(project.capitalize())
-
- package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch)
- package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch)
- package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch)
-
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=url,
- mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="make install",
- logEnviron=False, haltOnFailure=(not ignore_fails),
- warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails),
- command=["make", "install"]))
- factory.addStep(steps.ShellCommand(name="make test",
- logEnviron=False, haltOnFailure=(not ignore_fails),
- warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails),
- command=["make", "test"]))
- factory.addSteps(package_and_upload(package, package_dest, package_url))
-
- return util.BuilderConfig(
- name="{}_build".format(project.capitalize()),
- workernames=["generic-worker"], factory=factory)
-
-def compute_build_infos(project):
- @util.renderer
- def compute(props):
- import re, hashlib
- build_file = props.getProperty("build")
- package_dest = "{2}/{0}/{1}".format(project, build_file, E.RELEASE_PATH)
- version = re.match(r"{0}_(.*).tar.gz".format(project), build_file).group(1)
- with open(package_dest, "rb") as f:
- sha = hashlib.sha256(f.read()).hexdigest()
- return {
- "build_version": version,
- "build_hash": sha,
- }
- return compute
-
-@util.renderer
-def puppet_host(props):
- environment = props["environment"] if props.hasProperty("environment") else "integration"
- return E.PUPPET_HOST.get(environment, "host.invalid")
-
-def deploy_factory(project):
- package_dest = util.Interpolate("{1}/{0}/%(prop:build)s".format(project, E.RELEASE_PATH))
-
- factory = util.BuildFactory()
- factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest]))
- factory.addStep(steps.SetProperties(properties=compute_build_infos(project)))
- factory.addStep(LdapPush(environment=util.Property("environment"),
- project=project, build_version=util.Property("build_version"),
- build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap")))
- factory.addStep(steps.MasterShellCommand(command=[
- "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host]))
- return util.BuilderConfig(name="{}_deploy".format(project.capitalize()), workernames=["deploy-worker"], factory=factory)
-
-from twisted.internet import defer
-from buildbot.process.buildstep import FAILURE
-from buildbot.process.buildstep import SUCCESS
-from buildbot.process.buildstep import BuildStep
-
-class LdapPush(BuildStep):
- name = "LdapPush"
- renderables = ["environment", "project", "build_version", "build_hash", "ldap_password"]
-
- def __init__(self, **kwargs):
- self.environment = kwargs.pop("environment")
- self.project = kwargs.pop("project")
- self.build_version = kwargs.pop("build_version")
- self.build_hash = kwargs.pop("build_hash")
- self.ldap_password = kwargs.pop("ldap_password")
- self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST)
- super().__init__(**kwargs)
-
- def run(self):
- import json
- from ldap3 import Reader, Writer, Server, Connection, ObjectDef
- server = Server(self.ldap_host)
- conn = Connection(server,
- user=E.LDAP_DN,
- password=self.ldap_password)
- conn.bind()
- obj = ObjectDef("immaePuppetClass", conn)
- r = Reader(conn, obj,
- "cn=cryptoportfolio.{},{}".format(self.environment, E.LDAP_ROLES_BASE))
- r.search()
- if len(r) > 0:
- w = Writer.from_cursor(r)
- for value in w[0].immaePuppetJson.values:
- config = json.loads(value)
- if "role::cryptoportfolio::{}_version".format(self.project) in config:
- config["role::cryptoportfolio::{}_version".format(self.project)] = self.build_version
- config["role::cryptoportfolio::{}_sha256".format(self.project)] = self.build_hash
- w[0].immaePuppetJson -= value
- w[0].immaePuppetJson += json.dumps(config, indent=" ")
- w.commit()
- return defer.succeed(SUCCESS)
- return defer.succeed(FAILURE)
diff --git a/modules/private/buildbot/projects/denise/__init__.py b/modules/private/buildbot/projects/denise/__init__.py
deleted file mode 100644
index abeba3c..0000000
--- a/modules/private/buildbot/projects/denise/__init__.py
+++ /dev/null
@@ -1,186 +0,0 @@
-from buildbot.plugins import *
-from buildbot_common.build_helpers import *
-import os
-from buildbot.util import bytes2unicode
-import json
-
-__all__ = [ "configure", "E" ]
-
-class E():
- PROJECT = "denise"
- BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT)
- SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT)
- PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT)
- SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key"
- SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF"
-
- BINGO_RELEASE_PATH = "/var/lib/buildbot/outputs/denise/bingo"
- BINGO_BETA_PATH = "/var/lib/buildbot/outputs/denise/bingo_beta"
- BINGO_GIT_URL = "gitolite@git.immae.eu:perso/Denise/bingo"
-
- OMS_RELEASE_PATH = "/var/lib/buildbot/outputs/denise/oms"
- OMS_BETA_PATH = "/var/lib/buildbot/outputs/denise/oms_beta"
- OMS_GIT_URL = "gitolite@git.immae.eu:perso/Denise/oms"
-
- AVENTURIERS_RELEASE_PATH = "/var/lib/buildbot/outputs/denise/aventuriers"
- AVENTURIERS_GIT_URL = "https://git.immae.eu/perso/Denise/aventuriers.git"
-
- # master.cfg
- SECRETS_FILE = os.getcwd() + "/secrets"
- LDAP_URL = "ldaps://ldap.immae.eu:636"
- LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_BASE = "dc=immae,dc=eu"
- LDAP_PATTERN = "(uid=%(username)s)"
- LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=denise,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
- TITLE_URL = "https://oms.syanni.eu"
- TITLE = "Syanni website"
-
-class CustomBase(webhooks.base):
- def getChanges(self, request):
- try:
- content = request.content.read()
- args = json.loads(bytes2unicode(content))
- except Exception as e:
- raise ValueError("Error loading JSON: " + str(e))
-
- args.setdefault("comments", "")
- args.setdefault("repository", "")
- args.setdefault("author", args.get("who", "unknown"))
-
- return ([args], None)
-
-def configure(c):
- c["buildbotURL"] = E.BUILDBOT_URL
- c["www"]["port"] = E.SOCKET
-
- c["www"]["change_hook_dialects"]["base"] = {
- "custom_class": CustomBase
- }
- c['workers'].append(worker.LocalWorker("generic-worker-denise"))
-
- c['schedulers'].append(hook_scheduler("DeniseBingo", timer=1))
- c['schedulers'].append(hook_scheduler("DeniseOMS", timer=1))
- c['schedulers'].append(hook_scheduler("DeniseAventuriers", timer=1))
- c['schedulers'].append(force_scheduler("force_denise", [
- "DeniseBingo_build", "DeniseOMS_build", "DeniseAventuriers_build"
- ]))
-
- c['builders'].append(denise_oms_factory())
- c['builders'].append(denise_bingo_factory())
- c['builders'].append(denise_aventuriers_factory())
-
-def denise_bingo_factory():
- @util.renderer
- def bingo_run_path(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return "/run/denise_bingo/gunicorn.pid"
- else:
- return "/run/denise_bingo_beta/gunicorn.pid"
-
- @util.renderer
- def bingo_systemd_service(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return "denise-bingo"
- else:
- return "denise-bingo-beta"
-
- @util.renderer
- def bingo_url(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return "https://bingo.syanni.eu"
- else:
- return "https://beta.bingo.syanni.eu"
-
- @util.renderer
- def bingo_path(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return E.BINGO_RELEASE_PATH
- else:
- return E.BINGO_BETA_PATH
-
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.BINGO_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.MasterShellCommand(command=util.Interpolate("rm -rf %(kw:bingo_path)s", bingo_path=bingo_path)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source",
- masterdest=bingo_path,
- url=bingo_url))
- factory.addStep(steps.MasterShellCommand(command=util.Interpolate("chmod -R a+rX %(kw:bingo_path)s", bingo_path=bingo_path)))
- factory.addStep(steps.MasterShellCommand(command=util.Interpolate("/run/wrappers/bin/sudo systemctl restart %(kw:bingo_service)s.service", bingo_service=bingo_systemd_service)))
-
- return util.BuilderConfig(name="DeniseBingo_build", workernames=["generic-worker-denise"], factory=factory)
-
-def denise_oms_factory():
- @util.renderer
- def oms_run_path(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return "/run/denise_oms/gunicorn.pid"
- else:
- return "/run/denise_oms_beta/gunicorn.pid"
-
- @util.renderer
- def oms_systemd_service(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return "denise-oms"
- else:
- return "denise-oms-beta"
-
- @util.renderer
- def oms_url(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return "https://oms.syanni.eu"
- else:
- return "https://beta.oms.syanni.eu"
-
- @util.renderer
- def oms_path(props):
- if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master":
- return E.OMS_RELEASE_PATH
- else:
- return E.OMS_BETA_PATH
-
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.OMS_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.MasterShellCommand(command=util.Interpolate("rm -rf %(kw:oms_path)s", oms_path=oms_path)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source",
- masterdest=oms_path,
- url=oms_url))
- factory.addStep(steps.MasterShellCommand(command=util.Interpolate("chmod -R a+rX %(kw:oms_path)s", oms_path=oms_path)))
- factory.addStep(steps.MasterShellCommand(command=util.Interpolate("/run/wrappers/bin/sudo systemctl restart %(kw:oms_service)s.service", oms_service=oms_systemd_service)))
-
- return util.BuilderConfig(name="DeniseOMS_build", workernames=["generic-worker-denise"], factory=factory)
-
-def denise_aventuriers_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_Aventuriers"] + ":${PATH}",
- "TZ": "Europe/Paris",
- }
-
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.AVENTURIERS_GIT_URL,
- submodules=True, mode="full", method="fresh"))
- factory.addStep(steps.ShellCommand(name="build files",
- logEnviron=False, haltOnFailure=True, workdir="build",
- env=path_env, command=["make", "tout", "encyclo"]))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.AVENTURIERS_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../build/html",
- masterdest=E.AVENTURIERS_RELEASE_PATH,
- url="https://aventuriers.syanni.eu"))
- factory.addStep(steps.FileUpload(name="upload epub file", workersrc="aventuriers.epub",
- workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/aventuriers.epub",
- url="https://aventuriers.syanni.eu/aventuriers.epub", mode=0o644))
- factory.addStep(steps.FileUpload(name="upload mobi file", workersrc="aventuriers.mobi",
- workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/aventuriers.mobi",
- url="https://aventuriers.syanni.eu/aventuriers.mobi", mode=0o644))
- factory.addStep(steps.FileUpload(name="upload pdf file", workersrc="aventuriers.pdf",
- workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/aventuriers.pdf",
- url="https://aventuriers.syanni.eu/aventuriers.pdf", mode=0o644))
- factory.addStep(steps.FileUpload(name="upload encyclo pdf file", workersrc="encyclo.pdf",
- workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/encyclo.pdf",
- url="https://aventuriers.syanni.eu/encyclo.pdf", mode=0o644))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.AVENTURIERS_RELEASE_PATH)))
-
- return util.BuilderConfig(name="DeniseAventuriers_build", workernames=["generic-worker-denise"], factory=factory)
diff --git a/modules/private/buildbot/projects/immaeEu/__init__.py b/modules/private/buildbot/projects/immaeEu/__init__.py
deleted file mode 100644
index 83265cd..0000000
--- a/modules/private/buildbot/projects/immaeEu/__init__.py
+++ /dev/null
@@ -1,314 +0,0 @@
-from buildbot.plugins import *
-from buildbot_common.build_helpers import *
-import os
-from buildbot.util import bytes2unicode
-import json
-
-__all__ = [ "configure", "E" ]
-
-class E():
- PROJECT = "immaeEu"
- BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT)
- SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT)
- PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT)
- SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key"
- SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF"
- XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ")
-
- BIP39_GIT_URL = "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/BIP39.git"
- IMMAE_EU_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Blog"
- HISTORY_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/History"
- RECETTES_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Recettes"
- COURS_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Cours"
- DOCS_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Docs"
- NORMALESUP_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Projets/Sites/Normalesup"
-
- COURS_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/cours"
- COURS_TARBALL_PATH = "/var/lib/ftp/release.immae.eu/cours"
- COURS_TARBALL_URL = "https://release.immae.eu/cours"
- BIP39_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/bip39"
- HISTORY_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/history"
- IMMAE_EU_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/blog"
- DOCS_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/docs"
- RECETTES_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/recettes"
- NORMALESUP_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/recherche"
- GSMCELLS_RELEASE_PATH = "/var/lib/ftp/release.immae.eu/gsm_cells"
- GSMCELLS_RELEASE_URL = "https://release.immae.eu/gsm_cells"
-
- # master.cfg
- SECRETS_FILE = os.getcwd() + "/secrets"
- LDAP_URL = "ldaps://ldap.immae.eu:636"
- LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_BASE = "dc=immae,dc=eu"
- LDAP_PATTERN = "(uid=%(username)s)"
- LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=immaeEu,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
- TITLE_URL = "https://www.immae.eu"
- TITLE = "Immae website"
-
-class CustomBase(webhooks.base):
- def getChanges(self, request):
- try:
- content = request.content.read()
- args = json.loads(bytes2unicode(content))
- except Exception as e:
- raise ValueError("Error loading JSON: " + str(e))
-
- args.setdefault("comments", "")
- args.setdefault("repository", "")
- args.setdefault("author", args.get("who", "unknown"))
-
- return ([args], None)
-
-def configure(c):
- c["buildbotURL"] = E.BUILDBOT_URL
- c["www"]["port"] = E.SOCKET
-
- c["www"]["change_hook_dialects"]["base"] = {
- "custom_class": CustomBase
- }
- c['workers'].append(worker.LocalWorker("generic-worker-immae-eu"))
-
- c['schedulers'].append(hook_scheduler("ImmaeEu", timer=1))
- c['schedulers'].append(hook_scheduler("Normalesup", timer=1))
- c['schedulers'].append(hook_scheduler("Cours", timer=1))
- c['schedulers'].append(hook_scheduler("Recettes", timer=1))
- c['schedulers'].append(hook_scheduler("Docs", timer=1))
- c['schedulers'].append(hook_scheduler("History", timer=1))
- c['schedulers'].append(hook_scheduler("BIP39", timer=1))
- c['schedulers'].append(schedulers.Nightly(name="GSMCells-weekly",
- builderNames=["GSMCells_build"], dayOfWeek=6, hour=3))
- c['schedulers'].append(force_scheduler("force_immae_eu", [
- "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
- "Recettes_build", "History_build", "BIP39_build"
- ]))
- c['schedulers'].append(schedulers.ForceScheduler(
- name="GSMCells-force", label="Force build",
- buttonName="Force build",
- reason=util.StringParameter(name="reason", label="Reason", default="Force build"),
- codebases=[
- util.CodebaseParameter("",
- branch=util.FixedParameter(name="branch", default=""),
- revision=util.FixedParameter(name="revision", default=""),
- repository=util.FixedParameter(name="repository", default=""),
- project=util.FixedParameter(name="project", default=""),
- ),
- ],
- username=util.FixedParameter(name="username", default="Web button"),
- builderNames=["GSMCells_build"]
- ))
-
- c['builders'].append(immae_eu_factory())
- c['builders'].append(normalesup_factory())
- c['builders'].append(cours_factory())
- c['builders'].append(gsm_cells_factory())
- c['builders'].append(recettes_factory())
- c['builders'].append(docs_factory())
- c['builders'].append(history_factory())
- c['builders'].append(bip39_factory())
-
- c['services'].append(SlackStatusPush(
- name="slack_status_immae_eu_project",
- builders=[
- "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
- "GSMCells_build", "Recettes_build", "History_build",
- "BIP39_build"
- ],
- serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip()))
- c['services'].append(XMPPStatusPush(
- name="xmpp_status_immae_eu_project",
- builders=[
- "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
- "GSMCells_build", "Recettes_build", "History_build",
- "BIP39_build"
- ],
- recipients=E.XMPP_RECIPIENTS,
- password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip()))
-
-def history_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_History"] + ":${PATH}"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.HISTORY_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build website",
- logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command=["jekyll", "build"]))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.HISTORY_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source/_site",
- masterdest=E.HISTORY_RELEASE_PATH,
- url="https://www.immae.eu/history"))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.HISTORY_RELEASE_PATH)))
-
- return util.BuilderConfig(name="History_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def docs_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_Docs"] + ":${PATH}"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.DOCS_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build website",
- logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command=["make", "clean", "html"]))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.DOCS_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source/_build/html",
- masterdest=E.DOCS_RELEASE_PATH,
- url="https://www.immae.eu/docs"))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.DOCS_RELEASE_PATH)))
-
- return util.BuilderConfig(name="Docs_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def recettes_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_Recettes"] + ":${PATH}"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.RECETTES_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(NixShellCommand(name="build website",
- logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command="jekyll build --trace --baseurl /recettes"))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.RECETTES_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source/_site",
- masterdest=E.RECETTES_RELEASE_PATH,
- url="https://www.immae.eu/recettes"))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.RECETTES_RELEASE_PATH)))
-
- return util.BuilderConfig(name="Recettes_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def bip39_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_BIP39"] + ":${PATH}"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.BIP39_GIT_URL,
- submodules=True, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build file",
- logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command=["python", "compile.py"]))
- factory.addStep(steps.FileUpload(name="upload file", workersrc="bip39-standalone.html",
- workdir="source", masterdest=E.BIP39_RELEASE_PATH + "/index.html",
- url="https://tools.immae.eu/BIP39", mode=0o644))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.BIP39_RELEASE_PATH)))
-
- return util.BuilderConfig(name="BIP39_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def immae_eu_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_ImmaeEu"] + ":${PATH}"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.IMMAE_EU_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build website",
- logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command=["make", "html"]))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.IMMAE_EU_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source/output",
- masterdest=E.IMMAE_EU_RELEASE_PATH,
- url="https://www.immae.eu"))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.IMMAE_EU_RELEASE_PATH)))
-
- return util.BuilderConfig(name="ImmaeEu_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def cours_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_Cours"] + ":${PATH}",
- "CI": "yes"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.COURS_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build website",
- logEnviron=False, haltOnFailure=True, workdir="source",
- command=["make", "build"], env=path_env))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.COURS_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source/build",
- masterdest=E.COURS_RELEASE_PATH,
- url="https://www.immae.eu/cours"))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.COURS_RELEASE_PATH)))
-
- factory.addStep(steps.ShellCommand(name="build pdfs",
- logEnviron=False, haltOnFailure=True, workdir="source",
- command=["make", "pdfs"], env=path_env))
-
- package = util.Interpolate("cours_%(kw:clean_branch)s.tar.gz", clean_branch=clean_branch)
- release_file = "{0}/cours_%(kw:clean_branch)s.tar.gz"
- package_dest = util.Interpolate(release_file.format(E.COURS_TARBALL_PATH), clean_branch=clean_branch)
- package_url = util.Interpolate(release_file.format(E.COURS_TARBALL_URL), clean_branch=clean_branch)
- factory.addStep(steps.ShellCommand(name="build pdf tarball",
- logEnviron=False, haltOnFailure=True, workdir="source",
- command=["tar", "-cvf", package, "-C", "pdfs", "mp", "mpsi"], env=path_env))
- factory.addStep(steps.FileUpload(name="upload package", workersrc=package,
- workdir="source", masterdest=package_dest,
- url=package_url, mode=0o644))
-
- return util.BuilderConfig(name="Cours_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def normalesup_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_Normalesup"] + ":${PATH}"
- }
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False, repourl=E.NORMALESUP_GIT_URL,
- submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
- sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build website",
- logEnviron=False, haltOnFailure=True, workdir="source",
- command=["make", "build"], env=path_env))
- factory.addStep(steps.ShellCommand(name="give read access to all files",
- logEnviron=False, haltOnFailure=True, workdir="source",
- command="chmod -R a+rX build", env=path_env))
- factory.addStep(steps.ShellCommand(name="synchronize with phare",
- logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command=[
- "rsync", "-av", "--delete",
- "-e", "ssh -i {} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no".format(E.SSH_KEY_PATH),
- "build/",
- os.environ["BUILDBOT_NORMALESUP_HOST"]
- ]))
- factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.NORMALESUP_RELEASE_PATH)))
- factory.addStep(steps.DirectoryUpload(workersrc="../source/build", masterdest=E.NORMALESUP_RELEASE_PATH,
- url="https://www.immae.eu/recherche"))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.NORMALESUP_RELEASE_PATH)))
-
- return util.BuilderConfig(name="Normalesup_build", workernames=["generic-worker-immae-eu"], factory=factory)
-
-def gsm_cells_factory():
- path_env = {
- "PATH": os.environ["BUILDBOT_PATH_GSMCells"] + ":${PATH}",
- "IN_BUILDBOT": "yes",
- }
- master_env = {
- "HTACCESS": '''
- Options +FollowSymLinks
- IndexIgnore *
- '''
- }
- for k, v in os.environ.items():
- if k.startswith("BUILDBOT_GSM_CELLS_"):
- path_env[k[len("BUILDBOT_GSM_CELLS_"):]] = v
-
- script = os.environ["BUILDBOT_PROJECT_DIR"] + "/scripts/lacells_download"
- factory = util.BuildFactory()
- factory.addStep(steps.ShellCommand(name="download files",
- logEnviron=False, haltOnFailure=True, command=[script], env=path_env))
- factory.addStep(steps.ShellCommand(name="give read access to all files",
- logEnviron=False, haltOnFailure=True,
- command="chmod a+r lacells.db", env=path_env))
- factory.addStep(steps.FileUpload(workersrc="lacells.db",
- masterdest=(E.GSMCELLS_RELEASE_PATH+"/lacells.db"), url=(E.GSMCELLS_RELEASE_URL+"/lacells.db")))
- factory.addStep(steps.MasterShellCommand(command="touch {}/.duplicity-ignore".format(E.GSMCELLS_RELEASE_PATH)))
- factory.addStep(steps.MasterShellCommand(command='echo "$HTACCESS" > {}/.htaccess'.format(E.GSMCELLS_RELEASE_PATH),
- env=master_env))
- factory.addStep(steps.MasterShellCommand(command="ln -sf lacells.db {}/lacells.db.new".format(E.GSMCELLS_RELEASE_PATH)))
- factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.GSMCELLS_RELEASE_PATH)))
-
- return util.BuilderConfig(name="GSMCells_build", workernames=["generic-worker-immae-eu"], factory=factory)
diff --git a/modules/private/buildbot/projects/immaeEu/scripts/lacells_download b/modules/private/buildbot/projects/immaeEu/scripts/lacells_download
deleted file mode 100755
index 1193cf3..0000000
--- a/modules/private/buildbot/projects/immaeEu/scripts/lacells_download
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env bash
-
-# FLG - Fast Lacells.db Generator
-#
-# Simple script to quickly download and generate lacells.db for LocalGSMBackend by n76
-# https://github.com/n76/Local-GSM-Backend
-# Uses Mozilla Location Service, OpenCellID and radiocells.org databases as source
-# Based on lacells-creator by wvengen and n76
-#
-# Licensed under GPLv3 or later
-# (C)2016 Sebastian Obrusiewicz
-# sobrus@o2.pl
-
-if [ -z "$IN_BUILDBOT" ]; then
-#DEFAULT_CONFIG_BEGIN
-ENABLE_OCI=1 #enable OpenCellID data source
-ENABLE_MOZ=1 #enable Mozilla Location Services (MLS) data source
-ENABLE_RCO=0 #enable radiocells.org data source (it can be quite slow)
-
-# See https://en.wikipedia.org/wiki/Mobile_country_code
-# 208 France
-MCC="" #contry codes separated with "|", for example "260|262". Leave dot+asterisk ".*" for all countries
-RCO_SRC_FILE="fr.sqlite" #radiocells.org source database file, set "openbmap.sqlite" for entire world database, see https://radiocells.org/downloads for smaller country specific files, for example "pl.sqlite" for Poland
-RADIO="" #you can remove LTE if your phone does not support it
-TOKEN="" #your OCID token, required to download from OpenCellID. Get your free token at https://opencellid.org/
-fi
-TMPDIR='.' #for temporary files only, use disk if you don't have enough RAM, AND remember to have enough disk space in /var/tmp for sqlite temporary files
-KEEP_FILES=1 #whether to keep (1) or delete (0) the CSV files after processing
-
-#do not edit following variables, unless you know what you're doing
-EMPTY=',,,,,,,,,,,,,' #dummy empty file for disabled sources
-OCI_FILE=$TMPDIR"/ocid.csv" #opencellid temporary file
-MOZ_FILE=$TMPDIR"/mozilla.csv" #mozilla temporary file
-RCO_FILE=$TMPDIR"/rco.csv" #radiocells.org temporary file
-#DEFAULT_CONFIG_END
-
-#USER_CONFIG_BEGIN
-BINDIR=$( dirname "$(readlink -f "$0")" ) #"
-if [[ -f "${BINDIR}/config" ]]; then
- . "${BINDIR}/config"
-fi
-#USER_CONFIG_END
-
-function manage_backup
-{
- file=$1
- if [ -s $file ]
- then
- if [ $KEEP_FILES == "1" ]
- then
- gzip -kf $file
- fi
- elif [ -s $file".gz" ] && [ "${file##*.}" == "csv" ]
- then
- echo "Using" $file".gz backup file"
- gzip -dkf $file".gz"
- fi
-}
-
-
-function download_ocid
-{
- URL="https://opencellid.org/ocid/downloads?token=${TOKEN}&type=full&file=cell_towers.csv.gz"
- if [ $ENABLE_OCI == "1" ]
- then
- wget -qO- "$URL" | gunzip | egrep "^($RADIO),($MCC)," > $OCI_FILE
- manage_backup $OCI_FILE
- else
- echo $EMPTY > $OCI_FILE
- fi
-}
-
-function download_mozilla
-{
- if [ $ENABLE_MOZ == "1" ]
- then
- NW=`date -u "+%Y-%m-%d"`
- wget -qO- "https://d17pt8qph6ncyq.cloudfront.net/export/MLS-full-cell-export-${NW}T000000.csv.gz" | gunzip | egrep "^($RADIO),($MCC)," > $MOZ_FILE
- manage_backup $MOZ_FILE
- else
- echo $EMPTY > $MOZ_FILE
- fi
-}
-
-function download_radiocells
-{
- if [ $ENABLE_RCO == "1" ]
- then
- RCO_SELECT="SELECT technology, mcc, mnc, area, cid, NULL, longitude, latitude, 1000 accuracy, measurements, NULL, NULL, NULL, NULL FROM cell_zone;"
- wget -qO- "https://cdn.radiocells.org/"$RCO_SRC_FILE > $TMPDIR"/"$RCO_SRC_FILE
- sqlite3 -header -csv $TMPDIR"/"$RCO_SRC_FILE "$RCO_SELECT" | egrep "^($RADIO),($MCC)," > $RCO_FILE
- rm $TMPDIR"/"$RCO_SRC_FILE
- manage_backup $RCO_FILE
- else
- echo $EMPTY > $RCO_FILE
- fi
-}
-
-echo "Downloading data"
-
-download_ocid &
-OP=$!
-download_mozilla &
-MO=$!
-download_radiocells &
-RO=$!
-
-wait $OP
-wait $MO
-wait $RO
-
-if [ -s $MOZ_FILE ] && [ -s $OCI_FILE ] && [ -s $RCO_FILE ]
-then
-
-manage_backup lacells.db
-rm lacells.db
-
-echo "Generating database"
-
-sqlite3 lacells.db <<-SQL
-PRAGMA synchronous = OFF;
-PRAGMA journal_mode = OFF;
-
-CREATE TEMP TABLE cells_import (radio TEXT,mcc INTEGER,mnc INTEGER,lac INTEGER,cid INTEGER,unit STRING,longitude NUMERIC,latitude NUMERIC,accuracy INTEGER,samples INTEGER,changeable BOOLEAN,created INTEGER,updated INTEGER, avgSignal INTEGER);
-CREATE TABLE cells (mcc INTEGER,mnc INTEGER,lac INTEGER,cid INTEGER,longitude REAL,latitude REAL,altitude REAL,accuracy REAL,samples INTEGER);
-
-.header on
-.mode csv
-
-.import "$OCI_FILE" cells_import
-.import "$MOZ_FILE" cells_import
-.import "$RCO_FILE" cells_import
-
-UPDATE cells_import SET samples=1 WHERE samples IS NULL OR samples < 1;
-
-INSERT INTO cells
-SELECT mcc, mnc, lac, cid,
- sum(longitude * samples) / sum(samples) as longitude,
- sum(latitude * samples) / sum(samples) as latitude,
- -1 as altitude,
- sum(accuracy * samples) / sum(samples) as accuracy,
- sum(samples) as samples
-FROM cells_import
-GROUP BY mcc, mnc, lac, cid;
-
-DROP TABLE cells_import;
-
-UPDATE cells SET accuracy=500 WHERE accuracy < 500;
-UPDATE cells SET accuracy=100000 WHERE accuracy > 100000;
-
-CREATE INDEX _idx1 ON cells (mcc, mnc, lac, cid);
-CREATE INDEX _idx2 ON cells (lac, cid);
-
-VACUUM;
-SQL
-
-else
- echo "Download error"
-fi
-
-rm $OCI_FILE
-rm $MOZ_FILE
-rm $RCO_FILE
diff --git a/modules/private/buildbot/projects/test/__init__.py b/modules/private/buildbot/projects/test/__init__.py
deleted file mode 100644
index e2f6f82..0000000
--- a/modules/private/buildbot/projects/test/__init__.py
+++ /dev/null
@@ -1,197 +0,0 @@
-from buildbot.plugins import *
-from buildbot_common.build_helpers import *
-import buildbot_common.libvirt as ilibvirt
-import os
-from buildbot.util import bytes2unicode
-import json
-
-__all__ = [ "configure", "E" ]
-
-class E():
- PROJECT = "test"
- BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT)
- SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT)
- PB_SOCKET = os.environ["BUILDBOT_WORKER_PORT"]
- WORKER_HOST = "{}:{}".format(os.environ["BUILDBOT_HOST"], PB_SOCKET)
- RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT)
- RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT)
- GIT_URL = "https://git.immae.eu/perso/Immae/TestProject.git"
- SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key"
- LIBVIRT_URL = os.environ["BUILDBOT_VIRT_URL"] + "?keyfile=" + SSH_KEY_PATH
- PUPPET_HOST = "root@backup-1.v.immae.eu"
- LDAP_HOST = "ldap.immae.eu"
- LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu"
- XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ")
-
- # master.cfg
- SECRETS_FILE = os.getcwd() + "/secrets"
- LDAP_URL = "ldaps://ldap.immae.eu:636"
- LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu"
- LDAP_BASE = "dc=immae,dc=eu"
- LDAP_PATTERN = "(uid=%(username)s)"
- LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=test,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
- TITLE_URL = "https://git.immae.eu/?p=perso/Immae/TestProject.git;a=summary"
- TITLE = "Test project"
-
-class CustomBase(webhooks.base):
- def getChanges(self, request):
- try:
- content = request.content.read()
- args = json.loads(bytes2unicode(content))
- except Exception as e:
- raise ValueError("Error loading JSON: " + str(e))
-
- args.setdefault("comments", "")
- args.setdefault("repository", "")
- args.setdefault("author", args.get("who", "unknown"))
-
- if args["category"] == "deploy_webhook":
- args = {
- "category": "deploy_webhook",
- "comments": "",
- "repository": "",
- "author": "unknown",
- "project": "TestProject",
- "properties": {
- "environment": args.get("environment", "integration"),
- "build": "test_{}.tar.gz".format(args.get("branch", "master"))
- }
- }
-
- return ([args], None)
-
-def deploy_hook_scheduler(project, timer=1):
- return schedulers.AnyBranchScheduler(
- change_filter=util.ChangeFilter(category="deploy_webhook", project=project),
- name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)])
-
-def configure(c):
- c["buildbotURL"] = E.BUILDBOT_URL
- c["www"]["port"] = E.SOCKET
-
- c["www"]["change_hook_dialects"]["base"] = {
- "custom_class": CustomBase
- }
- c['workers'].append(ilibvirt.LibVirtWorker("test-build",
- open(E.SECRETS_FILE + "/worker_password", "r").read().rstrip(),
- ilibvirt.Connection(E.LIBVIRT_URL),
- E.WORKER_HOST))
- c['workers'].append(ilibvirt.LibVirtWorker("test-deploy",
- open(E.SECRETS_FILE + "/worker_password", "r").read().rstrip(),
- ilibvirt.Connection(E.LIBVIRT_URL),
- E.WORKER_HOST))
-
- c['schedulers'].append(hook_scheduler("TestProject", timer=1))
- c['schedulers'].append(force_scheduler("force_test", ["TestProject_build"]))
- c['schedulers'].append(deploy_scheduler("deploy_test", ["TestProject_deploy"]))
- c['schedulers'].append(deploy_hook_scheduler("TestProject", timer=1))
-
- c['builders'].append(factory())
- c['builders'].append(deploy_factory())
-
- c['services'].append(SlackStatusPush(
- name="slack_status_test_project",
- builders=["TestProject_build", "TestProject_deploy"],
- serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip()))
- c['services'].append(XMPPStatusPush(
- name="xmpp_status_test_project",
- builders=["TestProject_build", "TestProject_deploy"],
- recipients=E.XMPP_RECIPIENTS,
- password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip()))
-
-def factory():
- package = util.Interpolate("test_%(kw:clean_branch)s.tar.gz", clean_branch=clean_branch)
- package_dest = util.Interpolate("{}/test_%(kw:clean_branch)s.tar.gz".format(E.RELEASE_PATH), clean_branch=clean_branch)
- package_url = util.Interpolate("{}/test_%(kw:clean_branch)s.tar.gz".format(E.RELEASE_URL), clean_branch=clean_branch)
-
- factory = util.BuildFactory()
- factory.addStep(steps.Git(logEnviron=False,
- repourl=E.GIT_URL, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="env",
- logEnviron=False, command=["env"]))
- factory.addStep(steps.ShellCommand(name="pwd",
- logEnviron=False, command=["pwd"]))
- factory.addStep(steps.ShellCommand(name="true",
- logEnviron=False, command=["true"]))
- factory.addStep(steps.ShellCommand(name="echo",
- logEnviron=False, command=["echo", package]))
- factory.addSteps(package_and_upload(package, package_dest, package_url))
-
- return util.BuilderConfig(name="TestProject_build", workernames=["test-build"], factory=factory)
-
-
-def compute_build_infos():
- @util.renderer
- def compute(props):
- import re, hashlib
- build_file = props.getProperty("build")
- package_dest = "{}/{}".format(E.RELEASE_PATH, build_file)
- version = re.match(r"{0}_(.*).tar.gz".format("test"), build_file).group(1)
- with open(package_dest, "rb") as f:
- sha = hashlib.sha256(f.read()).hexdigest()
- return {
- "build_version": version,
- "build_hash": sha,
- }
- return compute
-
-@util.renderer
-def puppet_host(props):
- return E.PUPPET_HOST
-
-def deploy_factory():
- package_dest = util.Interpolate("{}/%(prop:build)s".format(E.RELEASE_PATH))
-
- factory = util.BuildFactory()
- factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest]))
- factory.addStep(steps.SetProperties(properties=compute_build_infos()))
- factory.addStep(LdapPush(environment=util.Property("environment"),
- build_version=util.Property("build_version"),
- build_hash=util.Property("build_hash"),
- ldap_password=util.Secret("ldap")))
- factory.addStep(steps.MasterShellCommand(command=[
- "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host]))
- return util.BuilderConfig(name="TestProject_deploy", workernames=["test-deploy"], factory=factory)
-
-from twisted.internet import defer
-from buildbot.process.buildstep import FAILURE
-from buildbot.process.buildstep import SUCCESS
-from buildbot.process.buildstep import BuildStep
-
-class LdapPush(BuildStep):
- name = "LdapPush"
- renderables = ["environment", "build_version", "build_hash", "ldap_password"]
-
- def __init__(self, **kwargs):
- self.environment = kwargs.pop("environment")
- self.build_version = kwargs.pop("build_version")
- self.build_hash = kwargs.pop("build_hash")
- self.ldap_password = kwargs.pop("ldap_password")
- self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST)
- super().__init__(**kwargs)
-
- def run(self):
- import json
- from ldap3 import Reader, Writer, Server, Connection, ObjectDef
- server = Server(self.ldap_host)
- conn = Connection(server,
- user=E.LDAP_DN,
- password=self.ldap_password)
- conn.bind()
- obj = ObjectDef("immaePuppetClass", conn)
- r = Reader(conn, obj,
- "cn=test.{},{}".format(self.environment, E.LDAP_ROLES_BASE))
- r.search()
- if len(r) > 0:
- w = Writer.from_cursor(r)
- for value in w[0].immaePuppetJson.values:
- config = json.loads(value)
- if "test_version" in config:
- config["test_version"] = self.build_version
- config["test_sha256"] = self.build_hash
- w[0].immaePuppetJson -= value
- w[0].immaePuppetJson += json.dumps(config, indent=" ")
- w.commit()
- return defer.succeed(SUCCESS)
- return defer.succeed(FAILURE)
diff --git a/modules/private/certificates.nix b/modules/private/certificates.nix
deleted file mode 100644
index 9879946..0000000
--- a/modules/private/certificates.nix
+++ /dev/null
@@ -1,199 +0,0 @@
-{ lib, pkgs, config, name, ... }:
-{
- options.myServices.certificates = {
- enable = lib.mkEnableOption "enable certificates";
- webroot = lib.mkOption {
- readOnly = true;
- default = "/var/lib/acme/acme-challenges";
- };
- certConfig = lib.mkOption {
- default = {
- webroot = lib.mkForce null; # avoids creation of tmpfiles
- email = "ismael@bouya.org";
- postRun = builtins.concatStringsSep "\n" [
- (lib.optionalString config.services.httpd.Prod.enable "systemctl reload httpdProd.service")
- (lib.optionalString config.services.httpd.Tools.enable "systemctl reload httpdTools.service")
- (lib.optionalString config.services.httpd.Inte.enable "systemctl reload httpdInte.service")
- (lib.optionalString config.services.nginx.enable "systemctl reload nginx.service")
- ];
- extraLegoRenewFlags = [ "--reuse-key" ];
- keyType = lib.mkDefault "ec256"; # https://github.com/NixOS/nixpkgs/pull/83121
- };
- description = "Default configuration for certificates";
- };
- };
-
- config = lib.mkIf config.myServices.certificates.enable {
- services.nginx = {
- recommendedTlsSettings = true;
- virtualHosts = {
- "${config.hostEnv.fqdn}" = {
- acmeRoot = config.myServices.certificates.webroot;
- useACMEHost = name;
- forceSSL = true;
- };
- };
- };
- services.websites.certs = config.myServices.certificates.certConfig;
- myServices.databasesCerts = config.myServices.certificates.certConfig;
- myServices.ircCerts = config.myServices.certificates.certConfig;
-
- security.acme.acceptTerms = true;
- security.acme.preliminarySelfsigned = true;
-
- security.acme.certs = {
- "${name}" = config.myServices.certificates.certConfig // {
- domain = config.hostEnv.fqdn;
- };
- };
-
- users.users.acme = {
- uid = config.ids.uids.acme;
- group = "acme";
- description = "Acme user";
- };
- users.groups.acme = {
- gid = config.ids.gids.acme;
- };
-
- systemd.services = lib.attrsets.mapAttrs' (k: v:
- lib.attrsets.nameValuePair "acme-selfsigned-${k}" {
- wantedBy = [ "acme-selfsigned-certificates.target" ];
- script = lib.mkAfter ''
- cp $workdir/server.crt ${config.security.acme.certs."${k}".directory}/cert.pem
- chown '${v.user}:${v.group}' ${config.security.acme.certs."${k}".directory}/cert.pem
- chmod ${if v.allowKeysForGroup then "750" else "700"} ${config.security.acme.certs."${k}".directory}/cert.pem
-
- cp $workdir/ca.crt ${config.security.acme.certs."${k}".directory}/chain.pem
- chown '${v.user}:${v.group}' ${config.security.acme.certs."${k}".directory}/chain.pem
- chmod ${if v.allowKeysForGroup then "750" else "700"} ${config.security.acme.certs."${k}".directory}/chain.pem
- '';
- }
- ) config.security.acme.certs //
- lib.attrsets.mapAttrs' (k: data:
- lib.attrsets.nameValuePair "acme-${k}" {
- after = lib.mkAfter [ "bind.service" ];
- serviceConfig =
- let
- cfg = config.security.acme;
- hashOptions = let
- domains = builtins.concatStringsSep "," (
- [ data.domain ] ++ (builtins.attrNames data.extraDomains)
- );
- certOptions = builtins.concatStringsSep "," [
- (if data.ocspMustStaple then "must-staple" else "no-must-staple")
- ];
- in
- builtins.hashString "sha256" (builtins.concatStringsSep ";" [ data.keyType domains certOptions ]);
- accountsDir = "accounts-${data.keyType}";
- lpath = "acme/${k}";
- apath = "/var/lib/${lpath}";
- spath = "/var/lib/acme/.lego/${k}";
- fileMode = if data.allowKeysForGroup then "640" else "600";
- dirFileMode = if data.allowKeysForGroup then "750" else "700";
- globalOpts = [ "-d" data.domain "--email" data.email "--path" "." "--key-type" data.keyType ]
- ++ lib.optionals (cfg.acceptTerms) [ "--accept-tos" ]
- ++ lib.optionals (data.dnsProvider != null && !data.dnsPropagationCheck) [ "--dns.disable-cp" ]
- ++ lib.concatLists (lib.mapAttrsToList (name: root: [ "-d" name ]) data.extraDomains)
- ++ (if data.dnsProvider != null then [ "--dns" data.dnsProvider ] else [ "--http" "--http.webroot" config.myServices.certificates.webroot ])
- ++ lib.optionals (cfg.server != null || data.server != null) ["--server" (if data.server == null then cfg.server else data.server)];
- certOpts = lib.optionals data.ocspMustStaple [ "--must-staple" ];
- runOpts = lib.escapeShellArgs (globalOpts ++ [ "run" ] ++ certOpts);
- renewOpts = lib.escapeShellArgs (globalOpts ++
- [ "renew" "--days" (builtins.toString cfg.validMinDays) ] ++
- certOpts ++ data.extraLegoRenewFlags);
- forceRenewOpts = lib.escapeShellArgs (globalOpts ++
- [ "renew" "--days" "999" ] ++
- certOpts ++ data.extraLegoRenewFlags);
- keyName = builtins.replaceStrings ["*"] ["_"] data.domain;
- in {
- User = lib.mkForce "acme";
- Group = lib.mkForce "acme";
- WorkingDirectory = lib.mkForce spath;
- StateDirectory = lib.mkForce "acme/.lego/${k} acme/.lego/${accountsDir}";
- ExecStartPre =
- let
- script = pkgs.writeScript "acme-prestart" ''
- #!${pkgs.runtimeShell} -e
- install -m 0755 -o acme -g acme -d ${config.myServices.certificates.webroot}
- '';
- in
- lib.mkForce "+${script}";
- ExecStart = lib.mkForce (pkgs.writeScript "acme-start" ''
- #!${pkgs.runtimeShell} -e
- # lego doesn't check key type after initial creation, we
- # need to check for him
- if [ -L ${spath}/accounts -o -d ${spath}/accounts ]; then
- if [ -L ${spath}/accounts -a "$(readlink ${spath}/accounts)" != ../${accountsDir} ]; then
- ln -sfn ../${accountsDir} ${spath}/accounts
- mv -f ${spath}/certificates/${keyName}.key ${spath}/certificates/${keyName}.key.old
- fi
- else
- ln -s ../${accountsDir} ${spath}/accounts
- fi
- # check if domain changed: lego doesn't check by itself
- if [ ! -e ${spath}/certificates/${keyName}.crt -o ! -e ${spath}/certificates/${keyName}.key -o ! -e "${spath}/accounts/acme-v02.api.letsencrypt.org/${data.email}/account.json" ]; then
- ${pkgs.lego}/bin/lego ${runOpts}
- elif [ ! -f ${spath}/currentDomains -o "$(cat ${spath}/currentDomains)" != "${hashOptions}" ]; then
- ${pkgs.lego}/bin/lego ${forceRenewOpts}
- else
- ${pkgs.lego}/bin/lego ${renewOpts}
- fi
- '');
- ExecStartPost =
- let
- ISRG_Root_X1 = pkgs.fetchurl {
- url = "https://letsencrypt.org/certs/isrgrootx1.pem";
- sha256 = "1la36n2f31j9s03v847ig6ny9lr875q3g7smnq33dcsmf2i5gd92";
- };
- fix_ISRG_Root_X1 = pkgs.writeScript "fix-pem" ''
- for file in chain fullchain full; do
- if grep -q MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA "$file.pem"; then
- cat ${ISRG_Root_X1} | grep -v " CERTIFICATE" | \
- sed -i.bak -ne "/MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/ {r /dev/stdin" -e ":a; n; /Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5/ { b }; ba };p" $file.pem
- fi
- done
- '';
- script = pkgs.writeScript "acme-post-start" ''
- #!${pkgs.runtimeShell} -e
- install -m 0755 -o root -g root -d /var/lib/acme
- install -m 0${dirFileMode} -o ${data.user} -g ${data.group} -d /var/lib/acme/${k}
- cd /var/lib/acme/${k}
-
- # Test that existing cert is older than new cert
- KEY=${spath}/certificates/${keyName}.key
- KEY_CHANGED=no
- if [ -e $KEY -a $KEY -nt key.pem ]; then
- KEY_CHANGED=yes
- cp -p ${spath}/certificates/${keyName}.key key.pem
- cp -p ${spath}/certificates/${keyName}.crt fullchain.pem
- cp -p ${spath}/certificates/${keyName}.issuer.crt chain.pem
- ln -sf fullchain.pem cert.pem
- cat key.pem fullchain.pem > full.pem
- echo -n "${hashOptions}" > ${spath}/currentDomains
- fi
-
- ${fix_ISRG_Root_X1}
- chmod ${fileMode} *.pem
- chown '${data.user}:${data.group}' *.pem
-
- if [ "$KEY_CHANGED" = "yes" ]; then
- : # noop in case postRun is empty
- ${data.postRun}
- fi
- '';
- in
- lib.mkForce "+${script}";
- };
- }
- ) config.security.acme.certs //
- {
- httpdProd = lib.mkIf config.services.httpd.Prod.enable
- { after = [ "acme-selfsigned-certificates.target" ]; wants = [ "acme-selfsigned-certificates.target" ]; };
- httpdTools = lib.mkIf config.services.httpd.Tools.enable
- { after = [ "acme-selfsigned-certificates.target" ]; wants = [ "acme-selfsigned-certificates.target" ]; };
- httpdInte = lib.mkIf config.services.httpd.Inte.enable
- { after = [ "acme-selfsigned-certificates.target" ]; wants = [ "acme-selfsigned-certificates.target" ]; };
- };
- };
-}
diff --git a/modules/private/databases/default.nix b/modules/private/databases/default.nix
deleted file mode 100644
index 1241658..0000000
--- a/modules/private/databases/default.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-{ lib, config, nodes, ... }:
-let
- cfg = config.myServices.databases;
-in
-{
- options.myServices = {
- databases.enable = lib.mkEnableOption "my databases service";
- databasesCerts = lib.mkOption {
- description = "Default databases configurations for certificates as accepted by acme";
- };
- };
-
- config.myServices.databases = lib.mkIf cfg.enable {
- mariadb = {
- enable = true;
- ldapConfig = {
- inherit (config.myEnv.ldap) host base;
- inherit (config.myEnv.databases.mysql.pam) dn filter password;
- };
- replicationLdapConfig = {
- inherit (config.myEnv.ldap) host base;
- inherit (config.myEnv.servers.eldiron.ldap) dn password;
- };
- credentials.root = config.myEnv.databases.mysql.systemUsers.root;
- };
-
- openldap = {
- accessFile = ../../../nixops/secrets/ldap.conf;
- baseDn = config.myEnv.ldap.base;
- rootDn = config.myEnv.ldap.root_dn;
- rootPw = config.myEnv.ldap.root_pw;
- enable = true;
- };
-
- postgresql = {
- ldapConfig = {
- inherit (config.myEnv.ldap) host base;
- inherit (config.myEnv.databases.postgresql.pam) dn filter password;
- };
- replicationLdapConfig = {
- inherit (config.myEnv.ldap) host base;
- inherit (config.myEnv.servers.eldiron.ldap) dn password;
- };
- authorizedHosts = {
- };
- replicationHosts = {
- backup-2 = {
- ip4 = [config.myEnv.servers.backup-2.ips.main.ip4];
- ip6 = config.myEnv.servers.backup-2.ips.main.ip6;
- };
- };
- enable = true;
- };
-
- redis.enable = true;
- };
-}
diff --git a/modules/private/databases/mariadb.nix b/modules/private/databases/mariadb.nix
deleted file mode 100644
index 101eb3f..0000000
--- a/modules/private/databases/mariadb.nix
+++ /dev/null
@@ -1,182 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.databases.mariadb;
-in {
- options.myServices.databases = {
- mariadb = {
- enable = lib.mkOption {
- default = false;
- example = true;
- description = "Whether to enable mariadb database";
- type = lib.types.bool;
- };
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.mariadb;
- description = ''
- Mariadb package to use.
- '';
- };
- credentials = lib.mkOption {
- default = {};
- description = "Credentials";
- type = lib.types.attrsOf lib.types.str;
- };
- ldapConfig = lib.mkOption {
- description = "LDAP configuration to allow PAM identification via LDAP";
- type = lib.types.submodule {
- options = {
- host = lib.mkOption { type = lib.types.str; };
- base = lib.mkOption { type = lib.types.str; };
- dn = lib.mkOption { type = lib.types.str; };
- password = lib.mkOption { type = lib.types.str; };
- filter = lib.mkOption { type = lib.types.str; };
- };
- };
- };
- replicationLdapConfig = lib.mkOption {
- description = "LDAP configuration to allow replication";
- type = lib.types.submodule {
- options = {
- host = lib.mkOption { type = lib.types.str; };
- base = lib.mkOption { type = lib.types.str; };
- dn = lib.mkOption { type = lib.types.str; };
- password = lib.mkOption { type = lib.types.str; };
- };
- };
- };
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/mysql";
- description = ''
- The directory where Mariadb stores its data.
- '';
- };
- # Output variables
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/mysqld";
- description = ''
- The directory where Mariadb puts sockets.
- '';
- };
- sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- mysqld = "${cfg.socketsDir}/mysqld.sock";
- };
- readOnly = true;
- description = ''
- Mariadb sockets
- '';
- };
- };
- };
-
- config = lib.mkIf cfg.enable {
- networking.firewall.allowedTCPPorts = [ 3306 ];
-
- # for adminer, ssl is implemented with mysqli only, which is
- # currently disabled because it’s not compatible with pam.
- # Thus we need to generate two users for each 'remote': one remote
- # with SSL, and one localhost without SSL.
- # User identified by LDAP:
- # CREATE USER foo@% IDENTIFIED VIA pam USING 'mysql' REQUIRE SSL;
- # CREATE USER foo@localhost IDENTIFIED VIA pam USING 'mysql';
-
- # To create a user (host) for replication:
- # CREATE USER 'host'@'%' IDENTIFIED VIA pam USING 'mysql_replication' REQUIRE SSL;
- # GRANT REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, LOCK TABLES, SELECT, SHOW VIEW ON *.* TO 'host'@'%';
- # (the lock/select grant permits to let the replication host handle
- # the initial fetch of the database)
- # % should be valid for both localhost (for cron dumps) and the origin host.
- services.mysql = {
- enable = true;
- package = cfg.package;
- dataDir = cfg.dataDir;
- settings = {
- mysqld = {
- ssl_ca = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
- ssl_key = "${config.security.acme.certs.mysql.directory}/key.pem";
- ssl_cert = "${config.security.acme.certs.mysql.directory}/fullchain.pem";
-
- # for replication
- log-bin = "mariadb-bin";
- server-id = "1";
-
- # this introduces a small delay before storing on disk, but
- # makes it order of magnitudes quicker
- innodb_flush_log_at_trx_commit = "0";
- };
- };
- };
-
- users.users.mysql.extraGroups = [ "keys" ];
- security.acme.certs."mysql" = config.myServices.databasesCerts // {
- user = "mysql";
- group = "mysql";
- domain = "db-1.immae.eu";
- postRun = ''
- systemctl restart mysql.service
- '';
- };
-
- secrets.keys = {
- "mysql/mysqldump" = {
- permissions = "0400";
- user = "root";
- group = "root";
- text = ''
- [mysqldump]
- user = root
- password = ${cfg.credentials.root}
- '';
- };
- "mysql/pam" = {
- permissions = "0400";
- user = "mysql";
- group = "mysql";
- text = with cfg.ldapConfig; ''
- host ${host}
- base ${base}
- binddn ${dn}
- bindpw ${password}
- pam_filter ${filter}
- ssl start_tls
- '';
- };
- "mysql/pam_replication" = {
- permissions = "0400";
- user = "mysql";
- group = "mysql";
- text = with cfg.replicationLdapConfig; ''
- host ${host}
- base ${base}
- binddn ${dn}
- bindpw ${password}
- pam_login_attribute cn
- ssl start_tls
- '';
- };
- };
-
- security.pam.services = let
- pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so";
- in {
- mysql = {
- text = ''
- # https://mariadb.com/kb/en/mariadb/pam-authentication-plugin/
- auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"}
- account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"}
- '';
- };
- mysql_replication = {
- text = ''
- auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"}
- account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"}
- '';
- };
- };
-
- };
-}
diff --git a/modules/private/databases/mariadb_replication.nix b/modules/private/databases/mariadb_replication.nix
deleted file mode 100644
index 68e6f7f..0000000
--- a/modules/private/databases/mariadb_replication.nix
+++ /dev/null
@@ -1,251 +0,0 @@
-{ pkgs, config, lib, ... }:
-let
- cfg = config.myServices.databasesReplication.mariadb;
-in
-{
- options.myServices.databasesReplication.mariadb = {
- enable = lib.mkEnableOption "Enable mariadb replication";
- base = lib.mkOption {
- type = lib.types.path;
- description = ''
- Base path to put the replications
- '';
- };
- hosts = lib.mkOption {
- default = {};
- description = ''
- Hosts to backup
- '';
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.mariadb;
- description = ''
- Mariadb package for this host
- '';
- };
- serverId = lib.mkOption {
- type = lib.types.int;
- description = ''
- Server id to use for replication cluster (must be unique among the cluster!)
- '';
- };
- host = lib.mkOption {
- type = lib.types.str;
- description = ''
- Host to connect to
- '';
- };
- port = lib.mkOption {
- type = lib.types.str;
- description = ''
- Port to connect to
- '';
- };
- user = lib.mkOption {
- type = lib.types.str;
- description = ''
- User to connect as
- '';
- };
- password = lib.mkOption {
- type = lib.types.str;
- description = ''
- Password to use
- '';
- };
- dumpUser = lib.mkOption {
- type = lib.types.str;
- description = ''
- User who can do a dump
- '';
- };
- dumpPassword = lib.mkOption {
- type = lib.types.str;
- description = ''
- Password for the dump user
- '';
- };
- };
- });
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users.mysql = {
- description = "MySQL server user";
- group = "mysql";
- uid = config.ids.uids.mysql;
- extraGroups = [ "keys" ];
- };
- users.groups.mysql.gid = config.ids.gids.mysql;
-
- secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (name: hcfg: [
- (lib.nameValuePair "mysql_replication/${name}/slave_init_commands" {
- user = "mysql";
- group = "mysql";
- permissions = "0400";
- text = ''
- CHANGE MASTER TO master_host="${hcfg.host}", master_port=${hcfg.port}, master_user="${hcfg.user}", master_password="${hcfg.password}", master_ssl=1, master_use_gtid=slave_pos;
- START SLAVE;
- '';
- })
- (lib.nameValuePair "mysql_replication/${name}/mysqldump_remote" {
- permissions = "0400";
- user = "root";
- group = "root";
- text = ''
- [mysqldump]
- user = ${hcfg.user}
- password = ${hcfg.password}
- '';
- })
- (lib.nameValuePair "mysql_replication/${name}/mysqldump" {
- permissions = "0400";
- user = "root";
- group = "root";
- text = ''
- [mysqldump]
- user = ${hcfg.dumpUser}
- password = ${hcfg.dumpPassword}
- '';
- })
- (lib.nameValuePair "mysql_replication/${name}/client" {
- permissions = "0400";
- user = "mysql";
- group = "mysql";
- text = ''
- [client]
- user = ${hcfg.dumpUser}
- password = ${hcfg.dumpPassword}
- '';
- })
- ]) cfg.hosts));
-
- services.cron = {
- enable = true;
- systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/mysql";
- backupDir = "${cfg.base}/${name}/mysql_backup";
- backup_script = pkgs.writeScript "backup_mysql_${name}" ''
- #!${pkgs.stdenv.shell}
-
- set -euo pipefail
-
- filename=${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).sql
- ${hcfg.package}/bin/mysqldump \
- --defaults-file=${config.secrets.fullPaths."mysql_replication/${name}/mysqldump"} \
- -S /run/mysqld_${name}/mysqld.sock \
- --gtid \
- --master-data \
- --flush-privileges \
- --ignore-database=netdata \
- --all-databases > $filename
- ${pkgs.gzip}/bin/gzip $filename
- '';
- u = pkgs.callPackage ./utils.nix {};
- cleanup_script = pkgs.writeScript "cleanup_mysql_${name}" (u.exponentialDumps "sql.gz" backupDir);
- in [
- "0 22,4,10,16 * * * root ${backup_script}"
- "0 3 * * * root ${cleanup_script}"
- ]) cfg.hosts);
- };
-
- system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg:
- lib.attrsets.nameValuePair "mysql_replication_${name}" {
- deps = [ "users" "groups" ];
- text = ''
- install -m 0700 -o mysql -g mysql -d ${cfg.base}/${name}/mysql
- install -m 0700 -o mysql -g mysql -d ${cfg.base}/${name}/mysql_backup
- '';
- }) cfg.hosts;
-
- environment.etc = lib.attrsets.mapAttrs' (name: hcfg:
- lib.attrsets.nameValuePair "mysql/${name}_my.cnf" {
- text = ''
- [mysqld]
- skip-networking
- socket = /run/mysqld_${name}/mysqld.sock
- datadir = ${cfg.base}/${name}/mysql/
- log-bin = mariadb-bin
- server-id = ${builtins.toString hcfg.serverId}
- '';
- }
- ) cfg.hosts;
-
- systemd.services = lib.attrsets.mapAttrs' (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/mysql";
- in
- lib.attrsets.nameValuePair "mysql_backup_${name}" {
- description = "Mysql replication for ${name}";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- restartTriggers = [ config.environment.etc."mysql/${name}_my.cnf".source ];
- unitConfig.RequiresMountsFor = dataDir;
-
- preStart = ''
- if ! test -e ${dataDir}/mysql; then
- if ! test -e ${dataDir}/initial.sql; then
- ${hcfg.package}/bin/mysqldump \
- --defaults-file=${config.secrets.fullPaths."mysql_replication/${name}/mysqldump_remote"} \
- -h ${hcfg.host} \
- -P ${hcfg.port} \
- --ssl \
- --gtid \
- --flush-privileges \
- --master-data \
- --all-databases > ${dataDir}/initial.sql
- fi
-
- ${hcfg.package}/bin/mysql_install_db \
- --defaults-file=/etc/mysql/${name}_my.cnf \
- --user=mysql \
- --datadir=${dataDir} \
- --basedir=${hcfg.package}
- fi
- '';
-
- serviceConfig = {
- User = "mysql";
- Group = "mysql";
- RuntimeDirectory = "mysqld_${name}";
- RuntimeDirectoryMode = "0755";
- SupplementaryGroups = "keys";
- PermissionsStartOnly = true;
- Type = "notify";
-
- ExecStart = "${hcfg.package}/bin/mysqld --defaults-file=/etc/mysql/${name}_my.cnf --user=mysql --datadir=${dataDir} --basedir=${hcfg.package}";
- ExecStartPost =
- let
- sql_before = pkgs.writeText "mysql-initial-before" ''
- DROP DATABASE test;
- INSTALL SONAME 'auth_pam';
- '';
- setupScript = pkgs.writeScript "mysql-setup" ''
- #!${pkgs.runtimeShell} -e
-
- if test -e ${dataDir}/initial.sql; then
- cat \
- ${sql_before} \
- ${dataDir}/initial.sql \
- ${config.secrets.fullPaths."mysql_replication/${name}/slave_init_commands"} \
- | ${hcfg.package}/bin/mysql \
- --defaults-file=/etc/mysql/${name}_my.cnf \
- -S /run/mysqld_${name}/mysqld.sock \
- --user=root
- rm -f ${dataDir}/initial.sql
- fi
- '';
- in
- "+${setupScript}";
- # initial dump can take a long time
- TimeoutStartSec="infinity";
- TimeoutStopSec = 120;
- };
- }) cfg.hosts;
- };
-}
-
diff --git a/modules/private/databases/openldap/default.nix b/modules/private/databases/openldap/default.nix
deleted file mode 100644
index d35aca0..0000000
--- a/modules/private/databases/openldap/default.nix
+++ /dev/null
@@ -1,147 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.databases.openldap;
- ldapConfig = let
- eldiron_schemas = pkgs.callPackage ./eldiron_schemas.nix {};
- in ''
- ${eldiron_schemas}
-
- pidfile ${cfg.pids.pid}
- argsfile ${cfg.pids.args}
-
- moduleload back_hdb
- backend hdb
-
- TLSCertificateFile ${config.security.acme.certs.ldap.directory}/cert.pem
- TLSCertificateKeyFile ${config.security.acme.certs.ldap.directory}/key.pem
- TLSCACertificateFile ${config.security.acme.certs.ldap.directory}/fullchain.pem
- TLSCACertificatePath ${pkgs.cacert.unbundled}/etc/ssl/certs/
- #This makes openldap crash
- #TLSCipherSuite DEFAULT
-
- sasl-host kerberos.immae.eu
- '';
-in
-{
- options.myServices.databases = {
- openldap = {
- enable = lib.mkOption {
- default = false;
- example = true;
- description = "Whether to enable ldap";
- type = lib.types.bool;
- };
- baseDn = lib.mkOption {
- type = lib.types.str;
- description = ''
- Base DN for LDAP
- '';
- };
- rootDn = lib.mkOption {
- type = lib.types.str;
- description = ''
- Root DN
- '';
- };
- rootPw = lib.mkOption {
- type = lib.types.str;
- description = ''
- Root (Hashed) password
- '';
- };
- accessFile = lib.mkOption {
- type = lib.types.path;
- description = ''
- The file path that defines the access
- '';
- };
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/openldap";
- description = ''
- The directory where Openldap stores its data.
- '';
- };
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/slapd";
- description = ''
- The directory where Openldap puts sockets and pid files.
- '';
- };
- # Output variables
- pids = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- pid = "${cfg.socketsDir}/slapd.pid";
- args = "${cfg.socketsDir}/slapd.args";
- };
- readOnly = true;
- description = ''
- Slapd pid files
- '';
- };
- };
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "ldap/password" = {
- permissions = "0400";
- user = "openldap";
- group = "openldap";
- text = "rootpw ${cfg.rootPw}";
- };
- "ldap/access" = {
- permissions = "0400";
- user = "openldap";
- group = "openldap";
- text = builtins.readFile cfg.accessFile;
- };
- "ldap" = {
- permissions = "0500";
- user = "openldap";
- group = "openldap";
- isDir = true;
- };
- };
- users.users.openldap.extraGroups = [ "keys" ];
- networking.firewall.allowedTCPPorts = [ 636 389 ];
-
- security.acme.certs."ldap" = config.myServices.databasesCerts // {
- user = "openldap";
- group = "openldap";
- domain = "ldap.immae.eu";
- postRun = ''
- systemctl restart openldap.service
- '';
- };
-
- services.filesWatcher.openldap = {
- restart = true;
- paths = [ config.secrets.fullPaths."ldap" ];
- };
-
- services.openldap = {
- enable = true;
- dataDir = cfg.dataDir;
- urlList = [ "ldap://" "ldaps://" ];
- logLevel = "none";
- extraConfig = ldapConfig;
- extraDatabaseConfig = ''
- moduleload memberof
- overlay memberof
-
- moduleload syncprov
- overlay syncprov
- syncprov-checkpoint 100 10
-
- include ${config.secrets.fullPaths."ldap/access"}
- '';
- rootpwFile = config.secrets.fullPaths."ldap/password";
- suffix = cfg.baseDn;
- rootdn = cfg.rootDn;
- database = "hdb";
- };
- };
-}
diff --git a/modules/private/databases/openldap/eldiron_schemas.nix b/modules/private/databases/openldap/eldiron_schemas.nix
deleted file mode 100644
index cf45ebe..0000000
--- a/modules/private/databases/openldap/eldiron_schemas.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ fetchurl, openldap }:
-let
- kerberosSchema = fetchurl {
- url = "https://raw.githubusercontent.com/krb5/krb5/0bdd3b8058ed4ec9acc050e316bea86f6830b15f/src/plugins/kdb/ldap/libkdb_ldap/kerberos.schema";
- sha256 = "17fnkkf6s3lznsl7wp6914pqsc78d038rh38l638big8z608ksww";
- };
- puppetSchema = fetchurl {
- url = "https://raw.githubusercontent.com/puppetlabs/puppet/bf7c108825ffdb5ea89cf3e500d55d27ab64b8d2/ext/ldap/puppet.schema";
- sha256 = "11bjf5zfvqlim7p9vddcafs0wiq3v8ys77x8h6fbp9c6bdfh0awh";
- };
- schemas = [
- #"${openldap}/etc/schema/core.schema"
- #"${openldap}/etc/schema/cosine.schema"
- #"${openldap}/etc/schema/inetorgperson.schema"
- #"${openldap}/etc/schema/nis.schema"
- puppetSchema
- kerberosSchema
- ./immae.schema
- ];
-in
- builtins.concatStringsSep "\n" (map (v: "include ${v}") schemas)
diff --git a/modules/private/databases/openldap/immae.schema b/modules/private/databases/openldap/immae.schema
deleted file mode 100644
index d2ef972..0000000
--- a/modules/private/databases/openldap/immae.schema
+++ /dev/null
@@ -1,179 +0,0 @@
-# vim: set filetype=slapd:
-objectIdentifier Immaeroot 1.3.6.1.4.1.50071
-
-objectIdentifier Immae Immaeroot:2
-objectIdentifier ImmaeattributeType Immae:3
-objectIdentifier ImmaeobjectClass Immae:4
-
-# TT-RSS
-attributetype ( ImmaeattributeType:1 NAME 'immaeTtrssLogin'
- DESC 'login for TTRSS'
- EQUALITY caseIgnoreMatch
- SUBSTR caseIgnoreSubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-objectclass ( ImmaeobjectClass:1 NAME 'immaeTtrssClass'
- DESC 'Expansion of the existing object classes for ttrss'
- SUP top AUXILIARY
- MUST ( immaeTtrssLogin ) )
-
-# FTP
-attributetype ( ImmaeattributeType:2 NAME 'immaeFtpDirectory'
- DESC 'home directory for ftp'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( ImmaeattributeType:3 NAME 'immaeFtpUid'
- DESC 'user id for ftp'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
-
-attributetype ( ImmaeattributeType:4 NAME 'immaeFtpGid'
- DESC 'group id for ftp'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
-
-objectclass ( ImmaeobjectClass:2 NAME 'immaeFtpClass'
- DESC 'Expansion of the existing object classes for ftp'
- SUP top AUXILIARY
- MUST ( immaeFtpDirectory $ immaeFtpGid $ immaeFtpUid ) )
-
-
-# SSH keys
-attributetype ( ImmaeattributeType:5 NAME 'immaeSshKey'
- DESC 'OpenSSH Public key'
- EQUALITY octetStringMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
-
-objectClass ( ImmaeobjectClass:3 NAME 'immaeSshClass'
- DESC 'OpenSSH class'
- SUP top AUXILIARY
- MAy ( immaeSSHKey ) )
-
-# Specific access
-attributetype (ImmaeattributeType:6 NAME 'immaeAccessDn'
- EQUALITY distinguishedNameMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-attributetype (ImmaeattributeType:17 NAME 'immaeAccessWriteDn'
- EQUALITY distinguishedNameMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-attributetype (ImmaeattributeType:18 NAME 'immaeAccessReadSubtree'
- EQUALITY distinguishedNameMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-objectClass ( ImmaeobjectClass:4 NAME 'immaeAccessClass'
- DESC 'Access class'
- SUP top AUXILIARY
- MAY ( immaeAccessDn $ immaeAccessWriteDn $ immaeAccessReadSubtree ) )
-
-# Xmpp uid
-attributetype ( ImmaeattributeType:7 NAME 'immaeXmppUid'
- DESC 'user part for Xmpp'
- EQUALITY caseIgnoreMatch
- SUBSTR caseIgnoreSubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-objectclass ( ImmaeobjectClass:5 NAME 'immaeXmppClass'
- DESC 'Expansion of the existing object classes for XMPP'
- SUP top AUXILIARY
- MUST ( immaeXmppUid ) )
-
-# Postfix accounts
-attributetype ( ImmaeattributeType:8 NAME 'immaePostfixAddress'
- DESC 'the dovecot address to match as username'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-
-attributetype ( ImmaeattributeType:9 NAME 'immaePostfixHome'
- DESC 'the postfix home directory'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( ImmaeattributeType:10 NAME 'immaePostfixMail'
- DESC 'the dovecot mail location'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( ImmaeattributeType:11 NAME 'immaePostfixUid'
- DESC 'the dovecot uid'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( ImmaeattributeType:12 NAME 'immaePostfixGid'
- DESC 'the dovecot gid'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-objectclass ( ImmaeobjectClass:6 NAME 'immaePostfixClass'
- DESC 'Expansion of the existing object classes for Postfix'
- SUP top AUXILIARY
- MUST ( immaePostfixAddress $ immaePostfixHome $
- immaePostfixMail $ immaePostfixUid $ immaePostfixGid )
- )
-
-# Tinc informations
-# Domaine = une classe a part ou une partie du dn ?
-# attributetype ( ImmaeattributeType:13 NAME 'immaeTincIpSegment'
-# DESC 'the internal ip segment in tinc'
-# EQUALITY caseIgnoreIA5Match
-# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-#
-# attributetype ( ImmaeattributeType:14 NAME 'immaeTincSubdomain'
-# DESC 'the host subdomain'
-# EQUALITY caseIgnoreIA5Match
-# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-#
-# attributetype ( ImmaeattributeType:15 NAME 'immaeTincHostname'
-# DESC 'the host name'
-# EQUALITY caseIgnoreIA5Match
-# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-#
-# objectclass ( ImmaeobjectClass:7 NAME 'immaeTincHostClass'
-# DESC 'Expansion of the existing object classes for Tinc'
-# SUP top AUXILIARY
-# MUST ( immaeTincInternalIp $ immaeTincSubdomain $
-# immaeTincHostname )
-# )
-
-attributetype (ImmaeattributeType:16 NAME 'immaePuppetJson'
- DESC 'Puppet hiera json'
- EQUALITY octetStringMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
-
-objectclass ( ImmaeobjectClass:8 NAME 'immaePuppetClass'
- DESC 'Expansion of the existing object classes for Puppet'
- SUP top AUXILIARY
- MUST ( immaePuppetJson )
- )
-
-attributetype (ImmaeattributeType:19 NAME 'immaeTaskId'
- DESC 'Taskwarrior server Org:Name:Key'
- EQUALITY caseIgnoreMatch
- SUBSTR caseIgnoreSubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-objectclass ( ImmaeobjectClass:9 NAME 'immaeTaskClass'
- DESC 'Expansion of the existing object classes for Task'
- SUP top AUXILIARY
- MUST ( immaeTaskId )
- )
-
-# Peertube uid
-attributetype ( ImmaeattributeType:20 NAME 'immaePeertubeId'
- DESC 'login for Peertube'
- EQUALITY caseIgnoreMatch
- SUBSTR caseIgnoreSubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-objectclass ( ImmaeobjectClass:10 NAME 'immaePeertubeClass'
- DESC 'Expansion of the existing object classes for peertube'
- SUP top AUXILIARY
- MUST ( immaePeertubeId ) )
-
-
-# Last:
-# attributetype ( ImmaeattributeType:20 NAME 'immaePeertubeId'
-# objectclass ( ImmaeobjectClass:10 NAME 'immaePeertubeClass'
diff --git a/modules/private/databases/openldap_replication.nix b/modules/private/databases/openldap_replication.nix
deleted file mode 100644
index b456323..0000000
--- a/modules/private/databases/openldap_replication.nix
+++ /dev/null
@@ -1,166 +0,0 @@
-{ pkgs, config, lib, ... }:
-let
- cfg = config.myServices.databasesReplication.openldap;
- eldiron_schemas = pkgs.callPackage ./openldap/eldiron_schemas.nix {};
- ldapConfig = hcfg: name: pkgs.writeText "slapd.conf" ''
- include ${pkgs.openldap}/etc/schema/core.schema
- include ${pkgs.openldap}/etc/schema/cosine.schema
- include ${pkgs.openldap}/etc/schema/inetorgperson.schema
- include ${pkgs.openldap}/etc/schema/nis.schema
- ${eldiron_schemas}
- pidfile /run/slapd_${name}/slapd.pid
- argsfile /run/slapd_${name}/slapd.args
-
- moduleload back_hdb
- backend hdb
- database hdb
-
- suffix "${hcfg.base}"
- rootdn "cn=root,${hcfg.base}"
- directory ${cfg.base}/${name}/openldap
-
- index objectClass eq
- index uid pres,eq
- index entryUUID eq
-
- include ${config.secrets.fullPaths."openldap_replication/${name}/replication_config"}
- '';
-in
-{
- options.myServices.databasesReplication.openldap = {
- enable = lib.mkEnableOption "Enable openldap replication";
- base = lib.mkOption {
- type = lib.types.path;
- description = ''
- Base path to put the replications
- '';
- };
- hosts = lib.mkOption {
- default = {};
- description = ''
- Hosts to backup
- '';
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.openldap;
- description = ''
- Openldap package for this host
- '';
- };
- url = lib.mkOption {
- type = lib.types.str;
- description = ''
- Host to connect to
- '';
- };
- base = lib.mkOption {
- type = lib.types.str;
- description = ''
- Base DN to replicate
- '';
- };
- dn = lib.mkOption {
- type = lib.types.str;
- description = ''
- DN to use
- '';
- };
- password = lib.mkOption {
- type = lib.types.str;
- description = ''
- Password to use
- '';
- };
- };
- });
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users.openldap = {
- description = "Openldap database user";
- group = "openldap";
- uid = config.ids.uids.openldap;
- extraGroups = [ "keys" ];
- };
- users.groups.openldap.gid = config.ids.gids.openldap;
-
- secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (name: hcfg: [
- (lib.nameValuePair "openldap_replication/${name}/replication_config" {
- user = "openldap";
- group = "openldap";
- permissions = "0400";
- text = ''
- syncrepl rid=000
- provider=${hcfg.url}
- type=refreshAndPersist
- searchbase="${hcfg.base}"
- retry="5 10 300 +"
- attrs="*,+"
- schemachecking=off
- bindmethod=simple
- binddn="${hcfg.dn}"
- credentials="${hcfg.password}"
- '';
- })
- (lib.nameValuePair "openldap_replication/${name}/replication_password" {
- user = "openldap";
- group = "openldap";
- permissions = "0400";
- text = hcfg.password;
- })
- ]) cfg.hosts));
-
- services.cron = {
- enable = true;
- systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/openldap";
- backupDir = "${cfg.base}/${name}/openldap_backup";
- backup_script = pkgs.writeScript "backup_openldap_${name}" ''
- #!${pkgs.stdenv.shell}
-
- ${hcfg.package}/bin/slapcat -b "${hcfg.base}" -f ${ldapConfig hcfg name} -l ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).ldif
- '';
- u = pkgs.callPackage ./utils.nix {};
- cleanup_script = pkgs.writeScript "cleanup_openldap_${name}" (u.exponentialDumps "ldif" backupDir);
- in [
- "0 22,4,10,16 * * * root ${backup_script}"
- "0 3 * * * root ${cleanup_script}"
- ]) cfg.hosts);
- };
-
- system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg:
- lib.attrsets.nameValuePair "openldap_replication_${name}" {
- deps = [ "users" "groups" ];
- text = ''
- install -m 0700 -o openldap -g openldap -d ${cfg.base}/${name}/openldap
- install -m 0700 -o openldap -g openldap -d ${cfg.base}/${name}/openldap_backup
- '';
- }) cfg.hosts;
-
- systemd.services = lib.attrsets.mapAttrs' (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/openldap";
- in
- lib.attrsets.nameValuePair "openldap_backup_${name}" {
- description = "Openldap replication for ${name}";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- unitConfig.RequiresMountsFor = dataDir;
-
- preStart = ''
- mkdir -p /run/slapd_${name}
- chown -R "openldap:openldap" /run/slapd_${name}
- '';
-
- serviceConfig = {
- ExecStart = "${hcfg.package}/libexec/slapd -d 0 -u openldap -g openldap -f ${ldapConfig hcfg name}";
- };
- }) cfg.hosts;
- };
-}
-
-
diff --git a/modules/private/databases/postgresql.nix b/modules/private/databases/postgresql.nix
deleted file mode 100644
index a6c4cc9..0000000
--- a/modules/private/databases/postgresql.nix
+++ /dev/null
@@ -1,228 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.databases.postgresql;
-in {
- options.myServices.databases = {
- postgresql = {
- enable = lib.mkOption {
- default = false;
- example = true;
- description = "Whether to enable postgresql database";
- type = lib.types.bool;
- };
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.postgresql;
- description = ''
- Postgresql package to use.
- '';
- };
- ldapConfig = lib.mkOption {
- description = "LDAP configuration to allow PAM identification via LDAP";
- type = lib.types.submodule {
- options = {
- host = lib.mkOption { type = lib.types.str; };
- base = lib.mkOption { type = lib.types.str; };
- dn = lib.mkOption { type = lib.types.str; };
- password = lib.mkOption { type = lib.types.str; };
- filter = lib.mkOption { type = lib.types.str; };
- };
- };
- };
- replicationLdapConfig = lib.mkOption {
- description = "LDAP configuration to allow replication";
- type = lib.types.submodule {
- options = {
- host = lib.mkOption { type = lib.types.str; };
- base = lib.mkOption { type = lib.types.str; };
- dn = lib.mkOption { type = lib.types.str; };
- password = lib.mkOption { type = lib.types.str; };
- };
- };
- };
- authorizedHosts = lib.mkOption {
- default = {};
- description = "Hosts to allow connections from";
- type = lib.types.attrsOf (lib.types.listOf (lib.types.submodule {
- options = {
- method = lib.mkOption {
- default = "md5";
- type = lib.types.str;
- };
- username = lib.mkOption {
- default = "all";
- type = lib.types.str;
- };
- database = lib.mkOption {
- default = "all";
- type = lib.types.str;
- };
- ip4 = lib.mkOption {
- default = [];
- type = lib.types.listOf lib.types.str;
- };
- ip6 = lib.mkOption {
- default = [];
- type = lib.types.listOf lib.types.str;
- };
- };
- }));
- };
- replicationHosts = lib.mkOption {
- default = {};
- description = "Hosts to allow replication from";
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- ip4 = lib.mkOption {
- type = lib.types.listOf lib.types.str;
- };
- ip6 = lib.mkOption {
- type = lib.types.listOf lib.types.str;
- };
- };
- });
- };
- # Output variables
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/postgresql";
- description = ''
- The directory where Postgresql puts sockets.
- '';
- readOnly = true;
- };
- };
- };
-
- config = lib.mkIf cfg.enable {
- networking.firewall.allowedTCPPorts = [ 5432 ];
-
- security.acme.certs."postgresql" = config.myServices.databasesCerts // {
- user = "postgres";
- group = "postgres";
- domain = "db-1.immae.eu";
- postRun = ''
- systemctl reload postgresql.service
- '';
- };
-
- systemd.services.postgresql.serviceConfig = {
- SupplementaryGroups = "keys";
- };
- systemd.services.postgresql.postStart = lib.mkAfter ''
- # This line is already defined in 19.09
- PSQL="${pkgs.sudo}/bin/sudo -u postgres psql --port=5432"
-
- ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _: ''
- $PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='${role}'" \
- | grep -q 1 \
- || $PSQL -tAc 'CREATE USER "${role}" WITH REPLICATION'
- '') cfg.replicationHosts)}
-
- ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _:
- let
- sname = builtins.replaceStrings ["-"] ["_"] role;
- in
- ''
- $PSQL -tAc "SELECT 1 FROM pg_replication_slots WHERE slot_name='${sname}'" \
- | grep -q 1 \
- || $PSQL -tAc "SELECT * FROM pg_create_physical_replication_slot('${sname}')"
- '') cfg.replicationHosts)}
- '';
-
- services.postgresql = {
- enable = true;
- package = cfg.package;
- enableTCPIP = true;
- extraConfig = ''
- max_connections = 100
- wal_level = logical
- shared_buffers = 512MB
- work_mem = 10MB
- max_wal_size = 1GB
- min_wal_size = 80MB
- log_timezone = 'Europe/Paris'
- datestyle = 'iso, mdy'
- timezone = 'Europe/Paris'
- lc_messages = 'en_US.UTF-8'
- lc_monetary = 'en_US.UTF-8'
- lc_numeric = 'en_US.UTF-8'
- lc_time = 'en_US.UTF-8'
- default_text_search_config = 'pg_catalog.english'
- # this introduces a small delay before storing on disk, but
- # makes it order of magnitudes quicker
- synchronous_commit = off
- ssl = on
- ssl_cert_file = '${config.security.acme.certs.postgresql.directory}/fullchain.pem'
- ssl_key_file = '${config.security.acme.certs.postgresql.directory}/key.pem'
- '';
- authentication = let
- hosts = builtins.concatStringsSep "\n" (
- lib.lists.flatten (lib.mapAttrsToList (k: vs: map (v:
- map (ip6: "hostssl ${v.database} ${v.username} ${ip6}/128 ${v.method}") v.ip6
- ++ map (ip4: "hostssl ${v.database} ${v.username} ${ip4}/32 ${v.method}") v.ip4
- ) vs) cfg.authorizedHosts
- ));
- replication = builtins.concatStringsSep "\n" (
- lib.lists.flatten (lib.mapAttrsToList (k: v:
- map (ip6: "hostssl replication ${k} ${ip6}/128 pam pamservice=postgresql_replication") v.ip6
- ++ map (ip4: "hostssl replication ${k} ${ip4}/32 pam pamservice=postgresql_replication") v.ip4
- ) cfg.replicationHosts
- ));
- in ''
- local all postgres ident
- local all all md5
- ${hosts}
- hostssl all all all pam
- ${replication}
- '';
- };
-
- secrets.keys = {
- "postgresql/pam" = {
- permissions = "0400";
- group = "postgres";
- user = "postgres";
- text = with cfg.ldapConfig; ''
- host ${host}
- base ${base}
- binddn ${dn}
- bindpw ${password}
- pam_filter ${filter}
- ssl start_tls
- '';
- };
- "postgresql/pam_replication" = {
- permissions = "0400";
- group = "postgres";
- user = "postgres";
- text = with cfg.replicationLdapConfig; ''
- host ${host}
- base ${base}
- binddn ${dn}
- bindpw ${password}
- pam_login_attribute cn
- ssl start_tls
- '';
- };
- };
-
- security.pam.services = let
- pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so";
- in {
- postgresql = {
- text = ''
- auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"}
- account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"}
- '';
- };
- postgresql_replication = {
- text = ''
- auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"}
- account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"}
- '';
- };
- };
- };
-}
-
diff --git a/modules/private/databases/postgresql_replication.nix b/modules/private/databases/postgresql_replication.nix
deleted file mode 100644
index 135bbed..0000000
--- a/modules/private/databases/postgresql_replication.nix
+++ /dev/null
@@ -1,182 +0,0 @@
-{ pkgs, config, lib, ... }:
-let
- cfg = config.myServices.databasesReplication.postgresql;
-in
-{
- options.myServices.databasesReplication.postgresql = {
- enable = lib.mkEnableOption "Enable postgresql replication";
- base = lib.mkOption {
- type = lib.types.path;
- description = ''
- Base path to put the replications
- '';
- };
- mainPackage = lib.mkOption {
- type = lib.types.package;
- default = pkgs.postgresql;
- description = ''
- Postgresql package available in shell
- '';
- };
- hosts = lib.mkOption {
- default = {};
- description = ''
- Hosts to backup
- '';
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.postgresql;
- description = ''
- Postgresql package for this host
- '';
- };
- slot = lib.mkOption {
- type = lib.types.str;
- description = ''
- Slot to use for replication
- '';
- };
- connection = lib.mkOption {
- type = lib.types.str;
- description = ''
- Connection string to access the psql master
- '';
- };
- };
- });
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users.postgres = {
- name = "postgres";
- uid = config.ids.uids.postgres;
- group = "postgres";
- description = "PostgreSQL server user";
- home = "/var/lib/postgresql";
- useDefaultShell = true;
- extraGroups = [ "keys" ];
- };
- users.groups.postgres.gid = config.ids.gids.postgres;
- environment.systemPackages = [ cfg.mainPackage ];
-
- secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (name: hcfg: [
- (lib.nameValuePair "postgresql_replication/${name}/recovery.conf" {
- user = "postgres";
- group = "postgres";
- permissions = "0400";
- text = ''
- standby_mode = on
- primary_conninfo = '${hcfg.connection}?sslmode=require'
- primary_slot_name = '${hcfg.slot}'
- '';
- })
- (lib.nameValuePair "postgresql_replication/${name}/connection_string" {
- user = "postgres";
- group = "postgres";
- permissions = "0400";
- text = hcfg.connection;
- })
- (lib.nameValuePair "postgresql_replication/${name}/postgresql.conf" {
- user = "postgres";
- group = "postgres";
- permissions = "0400";
- text = let
- dataDir = "${cfg.base}/${name}/postgresql";
- in ''
- listen_addresses = '''
- unix_socket_directories = '${dataDir}'
- data_directory = '${dataDir}'
- wal_level = logical
- '';
- })
- ]) cfg.hosts));
-
- services.cron = {
- enable = true;
- systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/postgresql";
- backupDir = "${cfg.base}/${name}/postgresql_backup";
- backup_script = pkgs.writeScript "backup_psql_${name}" ''
- #!${pkgs.stdenv.shell}
-
- set -euo pipefail
-
- resume_replication() {
- ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_resume();" >/dev/null || echo "impossible to resume replication"
- }
-
- trap resume_replication EXIT
-
- ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_pause();" >/dev/null || (echo "impossible to pause replication" && false)
-
- ${hcfg.package}/bin/pg_dumpall -h ${dataDir} -f ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).sql
- '';
- u = pkgs.callPackage ./utils.nix {};
- cleanup_script = pkgs.writeScript "cleanup_postgresql_${name}" (u.keepLastNDumps "sql" backupDir 6);
- in [
- "0 22,4,10,16 * * * postgres ${backup_script}"
- "0 3 * * * postgres ${cleanup_script}"
- ]) cfg.hosts);
- };
-
- system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg:
- lib.attrsets.nameValuePair "psql_replication_${name}" {
- deps = [ "users" ];
- text = ''
- install -m 0700 -o postgres -g postgres -d ${cfg.base}/${name}/postgresql
- install -m 0700 -o postgres -g postgres -d ${cfg.base}/${name}/postgresql_backup
- '';
- }) cfg.hosts;
-
- systemd.services = lib.attrsets.mapAttrs' (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/postgresql";
- in
- lib.attrsets.nameValuePair "postgresql_backup_${name}" {
- description = "Postgresql replication for ${name}";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- environment.PGDATA = dataDir;
- path = [ hcfg.package ];
-
- preStart = ''
- if ! test -e ${dataDir}/PG_VERSION; then
- mkdir -m 0700 -p ${dataDir}
- chown -R postgres:postgres ${dataDir}
- fi
- '';
- script = let
- fp = n: config.secrets.fullPaths."postgresql_replication/${name}/${n}";
- in ''
- if ! test -e ${dataDir}/PG_VERSION; then
- pg_basebackup -d $(cat ${fp "connection_string"}) -D ${dataDir} -S ${hcfg.slot}
- fi
- ln -sfn ${fp "recovery.conf"} ${dataDir}/recovery.conf
- ln -sfn ${fp "postgresql.conf"} ${dataDir}/postgresql.conf
-
- exec postgres
- '';
-
- serviceConfig = {
- ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
- User = "postgres";
- Group = "postgres";
- PermissionsStartOnly = true;
- RuntimeDirectory = "postgresql";
- Type = "notify";
-
- KillSignal = "SIGINT";
- KillMode = "mixed";
- # basebackup can take a long time
- TimeoutStartSec="infinity";
- TimeoutStopSec = 120;
- };
- unitConfig.RequiresMountsFor = dataDir;
- }) cfg.hosts;
- };
-}
diff --git a/modules/private/databases/redis.nix b/modules/private/databases/redis.nix
deleted file mode 100644
index 685fa46..0000000
--- a/modules/private/databases/redis.nix
+++ /dev/null
@@ -1,133 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.databases.redis;
-in {
- options.myServices.databases.redis = {
- enable = lib.mkOption {
- default = false;
- example = true;
- description = "Whether to enable redis database";
- type = lib.types.bool;
- };
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/redis";
- description = ''
- The directory where Redis puts sockets.
- '';
- };
- # Output variables
- sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- redis = "${cfg.socketsDir}/redis.sock";
- };
- readOnly = true;
- description = ''
- Redis sockets
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users.redis.uid = config.ids.uids.redis;
- users.groups.redis.gid = config.ids.gids.redis;
- services.redis = rec {
- enable = true;
- bind = "127.0.0.1";
- unixSocket = cfg.sockets.redis;
- extraConfig = ''
- unixsocketperm 777
- maxclients 1024
- '';
- };
- systemd.services.redis.serviceConfig.Slice = "redis.slice";
-
- services.spiped = {
- enable = true;
- config.redis = {
- decrypt = true;
- source = "0.0.0.0:16379";
- target = "/run/redis/redis.sock";
- keyfile = config.secrets.fullPaths."redis/spiped_keyfile";
- };
- };
- systemd.services.spiped_redis = {
- description = "Secure pipe 'redis'";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Slice = "redis.slice";
- Restart = "always";
- User = "spiped";
- PermissionsStartOnly = true;
- SupplementaryGroups = "keys";
- };
-
- script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`";
- };
-
- services.filesWatcher.predixy = {
- restart = true;
- paths = [ config.secrets.fullPaths."redis/predixy.conf" ];
- };
-
- networking.firewall.allowedTCPPorts = [ 7617 16379 ];
- secrets.keys = {
- "redis/predixy.conf" = {
- user = "redis";
- group = "redis";
- permissions = "0400";
- text = ''
- Name Predixy
- Bind 127.0.0.1:7617
- ClientTimeout 300
- WorkerThreads 1
-
- Authority {
- Auth "${config.myEnv.databases.redis.predixy.read}" {
- Mode read
- }
- }
-
- StandaloneServerPool {
- Databases 16
- RefreshMethod fixed
- Group shard001 {
- + ${config.myEnv.databases.redis.socket}
- }
- }
- '';
- };
- "redis/spiped_keyfile" = {
- user = "spiped";
- group = "spiped";
- permissions = "0400";
- text = config.myEnv.databases.redis.spiped_key;
- };
- };
-
- systemd.slices.redis = {
- description = "Redis slice";
- };
-
- systemd.services.predixy = {
- description = "Redis proxy";
- wantedBy = [ "multi-user.target" ];
- after = [ "redis.service" ];
-
- serviceConfig = {
- Slice = "redis.slice";
- User = "redis";
- Group = "redis";
- SupplementaryGroups = "keys";
- Type = "simple";
-
- ExecStart = "${pkgs.predixy}/bin/predixy ${config.secrets.fullPaths."redis/predixy.conf"}";
- };
-
- };
- };
-}
-
diff --git a/modules/private/databases/redis_replication.nix b/modules/private/databases/redis_replication.nix
deleted file mode 100644
index 9e48939..0000000
--- a/modules/private/databases/redis_replication.nix
+++ /dev/null
@@ -1,171 +0,0 @@
-{ pkgs, config, lib, ... }:
-let
- cfg = config.myServices.databasesReplication.redis;
-in
-{
- options.myServices.databasesReplication.redis = {
- enable = lib.mkEnableOption "Enable redis replication";
- base = lib.mkOption {
- type = lib.types.path;
- description = ''
- Base path to put the replications
- '';
- };
- hosts = lib.mkOption {
- default = {};
- description = ''
- Hosts to backup
- '';
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.redis;
- description = ''
- Redis package for this host
- '';
- };
- host = lib.mkOption {
- type = lib.types.str;
- description = ''
- Host to connect to
- '';
- };
- port = lib.mkOption {
- type = lib.types.str;
- description = ''
- Port to connect to
- '';
- };
- password = lib.mkOption {
- type = lib.types.nullOr lib.types.str;
- default = null;
- description = ''
- Password to use
- '';
- };
- };
- });
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users.redis = {
- description = "Redis database user";
- group = "redis";
- uid = config.ids.uids.redis;
- extraGroups = [ "keys" ];
- };
- users.groups.redis.gid = config.ids.gids.redis;
-
- services.spiped = { # sync from eldiron
- enable = true;
- config.redis = {
- encrypt = true;
- source = "127.0.0.1:16379";
- target = "${config.myEnv.servers.eldiron.ips.main.ip4}:16379";
- keyfile = config.secrets.fullPaths."redis/spiped_eldiron_keyfile";
- };
- };
-
- secrets.keys = lib.mapAttrs' (name: hcfg:
- lib.nameValuePair "redis_replication/${name}/config" {
- user = "redis";
- group = "redis";
- permissions = "0400";
- text = ''
- pidfile ${cfg.base}/${name}/redis/redis.pid
- port 0
- unixsocket /run/redis_${name}/redis.sock
- loglevel notice
- logfile /dev/null
- syslog-enabled yes
- databases 16
- save 900 1
- save 300 10
- save 60 10000
- dbfilename dump.rdb
- dir ${cfg.base}/${name}/redis/
- slaveof ${hcfg.host} ${hcfg.port}
- ${if hcfg.password != null then "masterauth ${hcfg.password}" else ""}
- appendOnly no
- appendfsync everysec
- slowlog-log-slower-than 10000
- slowlog-max-len 128
- unixsocketperm 777
- maxclients 1024
- '';
- }
- ) cfg.hosts // {
- "redis/spiped_eldiron_keyfile" = { # For eldiron only
- user = "spiped";
- group = "spiped";
- permissions = "0400";
- text = config.myEnv.databases.redis.spiped_key;
- };
- };
-
- services.cron = {
- enable = true;
- systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/redis";
- backupDir = "${cfg.base}/${name}/redis_backup";
- backup_script = pkgs.writeScript "backup_redis_${name}" ''
- #!${pkgs.stdenv.shell}
-
- ${pkgs.coreutils}/bin/cp ${cfg.base}/${name}/redis/dump.rdb \
- ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).rdb
- '';
- u = pkgs.callPackage ./utils.nix {};
- cleanup_script = pkgs.writeScript "cleanup_redis_${name}" (u.exponentialDumps "rdb" backupDir);
- in [
- "0 22,4,10,16 * * * root ${backup_script}"
- "0 3 * * * root ${cleanup_script}"
- ]) cfg.hosts);
- };
-
- system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg:
- lib.attrsets.nameValuePair "redis_replication_${name}" {
- deps = [ "users" "groups" ];
- text = ''
- install -m 0700 -o redis -g redis -d ${cfg.base}/${name}/redis
- install -m 0700 -o redis -g redis -d ${cfg.base}/${name}/redis_backup
- '';
- }) cfg.hosts;
-
- systemd.services = {
- spiped_redis = { # For eldiron
- description = "Secure pipe 'redis'";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Restart = "always";
- User = "spiped";
- PermissionsStartOnly = true;
- SupplementaryGroups = "keys";
- };
-
- script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`";
- };
- } // lib.attrsets.mapAttrs' (name: hcfg:
- let
- dataDir = "${cfg.base}/${name}/redis";
- in
- lib.attrsets.nameValuePair "redis_backup_${name}" {
- description = "Redis replication for ${name}";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- unitConfig.RequiresMountsFor = dataDir;
-
- serviceConfig = {
- ExecStart = "${hcfg.package}/bin/redis-server ${config.secrets.fullPaths."redis_replication/${name}/config"}";
- User = "redis";
- RuntimeDirectory = "redis_${name}";
- };
- }) cfg.hosts;
- };
-}
-
-
diff --git a/modules/private/databases/utils.nix b/modules/private/databases/utils.nix
deleted file mode 100644
index 47988fc..0000000
--- a/modules/private/databases/utils.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ pkgs }:
-{
- keepLastNDumps = ext: backupDir: n: ''
- #!${pkgs.stdenv.shell}
-
- cd ${backupDir}
- ${pkgs.coreutils}/bin/rm -f \
- $(${pkgs.coreutils}/bin/ls -1 *.${ext} \
- | ${pkgs.coreutils}/bin/sort -r \
- | ${pkgs.gnused}/bin/sed -e '1,${builtins.toString n}d')
- '';
- exponentialDumps = ext: backupDir: let
- log2rotateSrc = builtins.fetchGit {
- url = "https://github.com/avian2/pylog2rotate";
- ref = "master";
- rev = "061f0564757289d3bea553b16f8fd5c4a0319c5e";
- };
- log2rotate = pkgs.writeScript "log2rotate" ''
- #!${pkgs.python3}/bin/python
-
- ${builtins.readFile "${log2rotateSrc}/log2rotate.py"}
- '';
- in ''
- #!${pkgs.stdenv.shell}
-
- cd ${backupDir}
- ${pkgs.coreutils}/bin/rm -f $(ls -1 *.${ext} | grep -v 'T22:' | sort -r | sed -e '1,12d')
- ${pkgs.coreutils}/bin/rm -f $(ls -1 *T22*.${ext} | ${log2rotate} --skip 7 --fuzz 7 --delete --format='%Y-%m-%dT%H:%M+00:00.${ext}')
- '';
-}
diff --git a/modules/private/default.nix b/modules/private/default.nix
deleted file mode 100644
index 9108a92..0000000
--- a/modules/private/default.nix
+++ /dev/null
@@ -1,136 +0,0 @@
-let
-set = {
- # adatped from nixpkgs/nixos/modules/services/web-servers/apache-httpd/default.nix
- httpdInte = import ../websites/httpd-service-builder.nix { httpdName = "Inte"; withUsers = false; };
- httpdProd = import ../websites/httpd-service-builder.nix { httpdName = "Prod"; withUsers = false; };
- httpdTools = import ../websites/httpd-service-builder.nix { httpdName = "Tools"; withUsers = true; };
-
- databases = ./databases;
- mariadb = ./databases/mariadb.nix;
- openldap = ./databases/openldap;
- postgresql = ./databases/postgresql.nix;
- redis = ./databases/redis.nix;
- postgresqlReplication = ./databases/postgresql_replication.nix;
- mariadbReplication = ./databases/mariadb_replication.nix;
- redisReplication = ./databases/redis_replication.nix;
- openldapReplication = ./databases/openldap_replication.nix;
-
- websites = ./websites;
- gemini = ./gemini;
-
-
- # Personal websites
- bakeerCloud = ./websites/bakeer/cloud.nix;
-
- capitainesLandingPages = ./websites/capitaines/landing_pages.nix;
-
- chloeInte = ./websites/chloe/integration.nix;
- chloeProd = ./websites/chloe/production.nix;
-
- cipcaSympa = ./websites/cip-ca/sympa.nix;
-
- connexionswingInte = ./websites/connexionswing/integration.nix;
- connexionswingProd = ./websites/connexionswing/production.nix;
-
- deniseDenisejeromeProd = ./websites/denise/denisejerome.nix;
- deniseEvariste = ./websites/denise/evariste.nix;
- deniseOMS = ./websites/denise/oms.nix;
- deniseBingo = ./websites/denise/bingo.nix;
- deniseAventuriers = ./websites/denise/aventuriers.nix;
- deniseProduction = ./websites/denise/production.nix;
-
- emiliaMoodle = ./websites/emilia/moodle.nix;
- emiliaAtelierFringant = ./websites/emilia/atelierfringant.nix;
-
- florianApp = ./websites/florian/app.nix;
- florianInte = ./websites/florian/integration.nix;
- florianProd = ./websites/florian/production.nix;
-
- immaeProd = ./websites/immae/production.nix;
- immaeRelease = ./websites/immae/release.nix;
- immaeTemp = ./websites/immae/temp.nix;
-
- isabelleAtenInte = ./websites/isabelle/aten_integration.nix;
- isabelleAtenProd = ./websites/isabelle/aten_production.nix;
- isabelleIridologie = ./websites/isabelle/iridologie.nix;
-
- jeromeNaturaloutil = ./websites/jerome/naturaloutil.nix;
-
- leilaProd = ./websites/leila/production.nix;
-
- ludivineInte = ./websites/ludivine/integration.nix;
- ludivineProd = ./websites/ludivine/production.nix;
-
- nassimeProd = ./websites/nassime/production.nix;
-
- nathVillon = ./websites/nath/villon.nix;
-
- papaMaisonBbc = ./websites/papa/maison_bbc.nix;
- papaSurveillance = ./websites/papa/surveillance.nix;
-
- patrickFodellaEcolyeu = ./websites/patrick_fodella/ecolyeu.nix;
- patrickFodellaAltermondia = ./websites/patrick_fodella/altermondia.nix;
-
- piedsjalouxInte = ./websites/piedsjaloux/integration.nix;
- piedsjalouxProd = ./websites/piedsjaloux/production.nix;
-
- ressourcerieBanonProd = ./websites/ressourcerie_banon/production.nix;
- ressourcerieBanonCloud = ./websites/ressourcerie_banon/cloud.nix;
- ressourcerieBanonCryptpad = ./websites/ressourcerie_banon/cryptpad.nix;
-
- richieProd = ./websites/richie/production.nix;
-
- sydenPeertube = ./websites/syden/peertube.nix;
-
- teliotortayProd = ./websites/telio_tortay/production.nix;
-
- # Tools
- assetsTools = ./websites/tools/assets;
- cloudTool = ./websites/tools/cloud;
- cloudFarmTool = ./websites/tools/cloud/farm.nix;
- cryptpadTool = ./websites/tools/cryptpad;
- cryptpadFarmTool = ./websites/tools/cryptpad/farm.nix;
- commentoTool = ./websites/tools/commento;
- davTool = ./websites/tools/dav;
- vpnTool = ./websites/tools/vpn;
- dbTool = ./websites/tools/db;
- diasporaTool = ./websites/tools/diaspora;
- etherTool = ./websites/tools/ether;
- gitTool = ./websites/tools/git;
- imTool = ./websites/tools/im;
- mastodonTool = ./websites/tools/mastodon;
- mgoblinTool = ./websites/tools/mgoblin;
- peertubeTool = ./websites/tools/peertube;
- performanceTool = ./websites/tools/performance;
- toolsTool = ./websites/tools/tools;
- mailTool = ./websites/tools/mail;
- statsTool = ./websites/tools/stats;
-
- # Games
- codenamesGame = ./websites/tools/games/codenames;
- terraformingMarsGame = ./websites/tools/games/terraforming-mars;
-
- mail = ./mail;
-
- buildbot = ./buildbot;
- certificates = ./certificates.nix;
- gitolite = ./gitolite;
- irc = ./irc.nix;
- pub = ./pub;
- tasks = ./tasks;
- dns = ./dns.nix;
- ftp = ./ftp.nix;
- mpd = ./mpd.nix;
- ejabberd = ./ejabberd;
- ssh = ./ssh;
- monitoring = ./monitoring;
- status = ./monitoring/status.nix;
- status_engine = ./monitoring/status_engine.nix;
- vpn = ./vpn;
-
- environment = ./environment.nix;
- system = ./system.nix;
- loginctl-linger = ./loginctl-linger.nix;
-};
-in
-builtins.listToAttrs (map (attr: { name = "priv${attr}"; value = set.${attr}; }) (builtins.attrNames set))
diff --git a/modules/private/dns.nix b/modules/private/dns.nix
deleted file mode 100644
index 1d7fd52..0000000
--- a/modules/private/dns.nix
+++ /dev/null
@@ -1,197 +0,0 @@
-{ lib, pkgs, config, ... }:
-{
- options.myServices.dns.enable = lib.mkEnableOption "enable DNS resolver";
- config = let
- # taken from unstable
- cartesianProductOfSets = attrsOfLists: with lib;
- lib.foldl' (listOfAttrs: attrName:
- concatMap (attrs:
- map (listValue: attrs // { ${attrName} = listValue; }) attrsOfLists.${attrName}
- ) listOfAttrs
- ) [{}] (attrNames attrsOfLists);
- cfg = config.services.bind;
- keyIncludes = builtins.concatStringsSep "\n" (map (v: "include \"${config.secrets.fullPaths."bind/${v}.key"}\";") (builtins.attrNames config.myEnv.dns.keys));
- cartProduct = lib.foldr
- (s: servers: servers // { ${s.masters} = lib.unique ((servers.${s.masters} or []) ++ [s.keys]); })
- {}
- (lib.unique (lib.concatMap (z: cartesianProductOfSets { masters = z.masters or []; keys = z.keys or []; }) config.myEnv.dns.slaveZones));
- toKeyList = servers: keys: builtins.concatStringsSep "\n" (map (s: ''
- server ${s} {
- keys { ${builtins.concatStringsSep ";" keys}; };
- };
- '') servers);
- serverIncludes = builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: toKeyList (lib.flatten (builtins.attrValues config.myEnv.dns.ns."${n}"))) cartProduct);
- configFile = pkgs.writeText "named.conf" ''
- include "/etc/bind/rndc.key";
- controls {
- inet 127.0.0.1 allow {localhost;} keys {"rndc-key";};
- };
-
- acl cachenetworks { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.cacheNetworks} };
- acl badnetworks { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.blockedNetworks} };
-
- options {
- listen-on { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.listenOn} };
- listen-on-v6 { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.listenOnIpv6} };
- allow-query { cachenetworks; };
- blackhole { badnetworks; };
- forward first;
- forwarders { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.forwarders} };
- directory "/var/run/named";
- pid-file "/var/run/named/named.pid";
- ${cfg.extraOptions}
- };
-
- ${keyIncludes}
- ${serverIncludes}
-
- ${cfg.extraConfig}
-
- ${ lib.concatMapStrings
- ({ name, file, master ? true, extra ? "", slaves ? [], masters ? [] }:
- ''
- zone "${name}" {
- type ${if master then "master" else "slave"};
- file "${file}";
- ${ if lib.lists.length slaves > 0 then
- ''
- allow-transfer {
- ${lib.concatMapStrings (ip: "${ip};\n") slaves}
- };
- '' else ""}
- ${ if lib.lists.length masters > 0 then
- ''
- masters {
- ${lib.concatMapStrings (ip: "${ip};\n") masters}
- };
- '' else ""}
- allow-query { any; };
- ${extra}
- };
- '')
- cfg.zones }
- '';
- mxes = lib.attrsets.filterAttrs
- (n: v: v.mx.enable)
- config.myEnv.servers;
- ip4mxes = builtins.concatStringsSep "\n" (lib.mapAttrsToList
- (n: v: "${v.mx.subdomain} IN A ${v.ips.main.ip4}")
- mxes);
- ip6mxes = builtins.concatStringsSep "\n" (lib.mapAttrsToList
- (n: v: builtins.concatStringsSep "\n" (map (i: "${v.mx.subdomain} IN AAAA ${i}") v.ips.main.ip6))
- mxes);
- mxmxes = n: conf: builtins.concatStringsSep "\n" (lib.mapAttrsToList
- (_: v: "${n} IN MX ${v.mx.priority} ${v.mx.subdomain}.${conf.name}.")
- mxes);
- in lib.mkIf config.myServices.dns.enable {
- networking.firewall.allowedUDPPorts = [ 53 ];
- networking.firewall.allowedTCPPorts = [ 53 ];
- users.users.named.extraGroups = [ "keys" ];
- secrets.keys = lib.mapAttrs' (k: v:
- lib.nameValuePair "bind/${k}.key" {
- permissions = "0400";
- user = "named";
- text = ''
- key "${k}"
- {
- algorithm ${v.algorithm};
- secret "${v.secret}";
- };
- '';
- }
- ) config.myEnv.dns.keys;
- services.bind = {
- enable = true;
- cacheNetworks = ["any"];
- configFile = configFile;
- extraOptions = ''
- allow-recursion { 127.0.0.1; };
- allow-transfer { none; };
-
- notify-source ${config.myEnv.servers.eldiron.ips.main.ip4};
- notify-source-v6 ${lib.head config.myEnv.servers.eldiron.ips.main.ip6};
- version none;
- hostname none;
- server-id none;
- '';
- zones = with config.myEnv.dns;
- assert (builtins.substring ((builtins.stringLength soa.email)-1) 1 soa.email) != ".";
- assert (builtins.substring ((builtins.stringLength soa.primary)-1) 1 soa.primary) != ".";
- (map (conf: {
- name = conf.name;
- master = false;
- file = "/var/run/named/${conf.name}.zone";
- masters = if lib.attrsets.hasAttr "masters" conf
- then lib.lists.flatten (map (n: lib.attrsets.attrValues ns.${n}) conf.masters)
- else [];
- }) slaveZones)
- ++ (map (conf: {
- name = conf.name;
- master = true;
- extra = if lib.attrsets.hasAttr "extra" conf then conf.extra else "";
- slaves = if lib.attrsets.hasAttr "slaves" conf
- then lib.lists.flatten (map (n: lib.attrsets.attrValues ns.${n}) conf.slaves)
- else [];
- file = pkgs.writeText "${conf.name}.zone" ''
- $TTL 10800
- @ IN SOA ${soa.primary}. ${builtins.replaceStrings ["@"] ["."] soa.email}. ${soa.serial} ${soa.refresh} ${soa.retry} ${soa.expire} ${soa.ttl}
-
- ${lib.concatStringsSep "\n" (map (x: "@ IN NS ${x}.") (lib.concatMap (n: lib.attrsets.mapAttrsToList (k: v: k) ns.${n}) conf.ns))}
- ${lib.optionalString (conf.withCAA != null) ''
- ${conf.name}. IN CAA 0 issue "${conf.withCAA}"
- ''}
-
- ${conf.entries}
-
- ${if lib.attrsets.hasAttr "withEmail" conf && lib.lists.length conf.withEmail > 0 then ''
- ${ip4mxes}
- ${ip6mxes}
- ${lib.concatStringsSep "\n\n" (map (e:
- let
- n = if e.domain == "" then "@" else "${e.domain} ";
- suffix = if e.domain == "" then "" else ".${e.domain}";
- in
- ''
- ; ------------------ mail: ${n} ---------------------------
- ${mxmxes n conf}
-
- ; https://tools.ietf.org/html/rfc6186
- _submission._tcp${suffix} SRV 0 1 587 smtp.immae.eu.
- _submissions._tcp${suffix} SRV 0 1 465 smtp.immae.eu.
- _imap._tcp${suffix} SRV 0 1 143 imap.immae.eu.
- _imaps._tcp${suffix} SRV 0 1 993 imap.immae.eu.
- _pop3._tcp${suffix} SRV 10 1 110 pop3.immae.eu.
- _pop3s._tcp${suffix} SRV 10 1 995 pop3.immae.eu.
- _sieve._tcp${suffix} SRV 0 1 4190 imap.immae.eu.
-
- ; MTA-STS
- ; https://blog.delouw.ch/2018/12/16/using-mta-sts-to-enhance-email-transport-security-and-privacy/
- ; https://support.google.com/a/answer/9261504
- _mta-sts${suffix} IN TXT "v=STSv1;id=20200109150200Z"
- _smtp._tls${suffix} IN TXT "v=TLSRPTv1;rua=mailto:postmaster+mta-sts@immae.eu"
- mta-sts${suffix} IN A ${config.myEnv.servers.eldiron.ips.main.ip4}
- ${builtins.concatStringsSep "\n" (map (i: "mta-sts${suffix} IN AAAA ${i}") config.myEnv.servers.eldiron.ips.main.ip6)}
-
- ; Mail sender authentications
- ${n} IN TXT "v=spf1 mx ~all"
- _dmarc${suffix} IN TXT "v=DMARC1; p=none; adkim=r; aspf=r; fo=1; rua=mailto:postmaster+rua@immae.eu; ruf=mailto:postmaster+ruf@immae.eu;"
- ${if e.send then ''
- immae_eu._domainkey${suffix} IN TXT ( "v=DKIM1; k=rsa; s=email; "
- "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzl3vLd8W5YAuumC5+ZT9OV7/14Pmh5JYtwyqKI3cfe9NnAqInt3xO4bZ7oqIxRKWN4SD39vm7O/QOvFdBt00ENOOzdP90s5gKw6eIP/4+vPTh0IWltAsmu9B2agzdtWUE7t2xFKIzEn8l9niRE2QYbVaqZv4sub98vY55fIgFoHtjkmNC7325S8fjDJGp6OPbyhAs6Xl5/adjF"
- "0ko4Y2p6RaxLQfjlS0bxmK4Qg6C14pIXHtzVeqOuWrwApqt5+AULSn97iUtqV/IJlEEjC6DUR44t3C/G0G/k46iFclCqRRi0hdPrOHCtZDbtMubnTN9eaUiNpkXh1WnCflHwtjQwIDAQAB" )
- eldiron._domainkey${suffix} IN TXT ${config.myEnv.mail.dkim.eldiron.public}
- '' else ""}
- '') conf.withEmail)}
- '' + (if conf.name == "immae.eu" then ''
- ; ----------------- Accept DMARC reports -------------------
- ${lib.concatStringsSep "\n" (
- lib.flatten (
- map (z: map (e: "${e.domain}${if builtins.stringLength e.domain > 0 then "." else ""}${z.name}._report._dmarc IN TXT \"v=DMARC1;\"") (z.withEmail or [])) masterZones
- )
- )}
- '' else "") else ""}
- '';
- }) masterZones);
- };
- };
-}
diff --git a/modules/private/ejabberd/default.nix b/modules/private/ejabberd/default.nix
deleted file mode 100644
index 4d86a64..0000000
--- a/modules/private/ejabberd/default.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.ejabberd;
-in
-{
- options.myServices = {
- ejabberd.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable ejabberd service.
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- security.acme.certs = {
- "ejabberd" = config.myServices.certificates.certConfig // {
- user = "ejabberd";
- group = "ejabberd";
- domain = "eldiron.immae.eu";
- keyType = "rsa4096";
- postRun = ''
- systemctl restart ejabberd.service
- '';
- extraDomains = {
- "immae.fr" = null;
- "conference.immae.fr" = null;
- "proxy.immae.fr" = null;
- "pubsub.immae.fr" = null;
- "upload.immae.fr" = null;
- };
- };
- };
- networking.firewall.allowedTCPPorts = [ 5222 5269 ];
- myServices.websites.tools.im.enable = true;
- systemd.services.ejabberd.postStop = ''
- rm /var/log/ejabberd/erl_crash*.dump
- '';
- secrets.keys = {
- "ejabberd/psql.yml" = {
- permissions = "0400";
- user = "ejabberd";
- group = "ejabberd";
- text = ''
- sql_type: pgsql
- sql_server: "localhost"
- sql_database: "${config.myEnv.jabber.postgresql.database}"
- sql_username: "${config.myEnv.jabber.postgresql.user}"
- sql_password: "${config.myEnv.jabber.postgresql.password}"
- '';
- };
- "ejabberd/host.yml" = {
- permissions = "0400";
- user = "ejabberd";
- group = "ejabberd";
- text = ''
- host_config:
- "immae.fr":
- domain_certfile: "${config.security.acme.certs.ejabberd.directory}/full.pem"
- auth_method: [ldap]
- ldap_servers: ["${config.myEnv.jabber.ldap.host}"]
- ldap_encrypt: tls
- ldap_rootdn: "${config.myEnv.jabber.ldap.dn}"
- ldap_password: "${config.myEnv.jabber.ldap.password}"
- ldap_base: "${config.myEnv.jabber.ldap.base}"
- ldap_uids:
- uid: "%u"
- immaeXmppUid: "%u"
- ldap_filter: "${config.myEnv.jabber.ldap.filter}"
- '';
- };
- };
- users.users.ejabberd.extraGroups = [ "keys" ];
- services.ejabberd = {
- package = pkgs.ejabberd.override { withPgsql = true; };
- imagemagick = true;
- enable = true;
- ctlConfig = ''
- ERLANG_NODE=ejabberd@localhost
- '';
- configFile = pkgs.runCommand "ejabberd.yml" {
- certificatePrivateKeyAndFullChain = "${config.security.acme.certs.ejabberd.directory}/full.pem";
- certificateCA = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
- sql_config_file = config.secrets.fullPaths."ejabberd/psql.yml";
- host_config_file = config.secrets.fullPaths."ejabberd/host.yml";
- } ''
- substituteAll ${./ejabberd.yml} $out
- '';
- };
- };
-}
diff --git a/modules/private/ejabberd/ejabberd.yml b/modules/private/ejabberd/ejabberd.yml
deleted file mode 100644
index 82ac35b..0000000
--- a/modules/private/ejabberd/ejabberd.yml
+++ /dev/null
@@ -1,231 +0,0 @@
-###
-### ejabberd configuration file
-###
-### The parameters used in this configuration file are explained at
-###
-### https://docs.ejabberd.im/admin/configuration
-###
-### The configuration file is written in YAML.
-### *******************************************************
-### ******* !!! WARNING !!! *******
-### ******* YAML IS INDENTATION SENSITIVE *******
-### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
-### *******************************************************
-### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
-### However, ejabberd treats different literals as different types:
-###
-### - unquoted or single-quoted strings. They are called "atoms".
-### Example: dog, 'Jupiter', '3.14159', YELLOW
-###
-### - numeric literals. Example: 3, -45.0, .0
-###
-### - quoted or folded strings.
-### Examples of quoted string: "Lizzard", "orange".
-### Example of folded string:
-### > Art thou not Romeo,
-### and a Montague?
-###
-
-hosts:
- - "immae.fr"
-
-loglevel: 4
-log_rotate_size: 10485760
-log_rotate_date: ""
-log_rotate_count: 1
-log_rate_limit: 100
-
-certfiles:
- - "@certificatePrivateKeyAndFullChain@"
-
-listen:
- -
- port: 5222
- ip: "::"
- module: ejabberd_c2s
- max_stanza_size: 262144
- shaper: c2s_shaper
- access: c2s
- starttls_required: true
- -
- port: 5269
- ip: "::"
- module: ejabberd_s2s_in
- max_stanza_size: 524288
- -
- port: 5280
- ip: "127.0.0.1"
- module: ejabberd_http
- request_handlers:
- "/admin": ejabberd_web_admin
- "/api": mod_http_api
- "/bosh": mod_bosh
- "/captcha": ejabberd_captcha
- "/upload": mod_http_upload
- "/ws": ejabberd_http_ws
- tls: false
-
-s2s_use_starttls: optional
-s2s_cafile: "@certificateCA@"
-
-default_db: sql
-include_config_file: @sql_config_file@
-include_config_file: @host_config_file@
-new_sql_schema: true
-
-acl:
- admin:
- - user: "ismael@immae.fr"
- local:
- user_regexp: ""
- loopback:
- ip:
- - "127.0.0.0/8"
- - "::1/128"
- - "::FFFF:127.0.0.1/128"
-
-access_rules:
- local:
- - allow: local
- c2s:
- - deny: blocked
- - allow
- announce:
- - allow: admin
- configure:
- - allow: admin
- muc_admin:
- - allow: admin
- muc_create:
- - allow: local
- muc:
- - allow
- pubsub_createnode:
- - allow: local
- register:
- - deny
- trusted_network:
- - allow: loopback
-
-api_permissions:
- "console commands":
- from:
- - ejabberd_ctl
- who: all
- what: "*"
- "admin access":
- who:
- - acl: admin
- - oauth:
- - scope: "ejabberd:admin"
- - acl: admin
- what:
- - "*"
- - "!stop"
- - "!start"
- "public commands":
- who:
- - ip:
- - "0.0.0.0"
- - "::"
- what:
- - "status"
- - "connected_users_number"
-
-shaper:
- normal: 1000
- fast: 50000
-
-shaper_rules:
- max_user_sessions: 10
- max_user_offline_messages:
- - 5000: admin
- - 100
- c2s_shaper:
- - none: admin
- - normal
- s2s_shaper: fast
-
-modules:
- mod_adhoc: {}
- mod_admin_extra: {}
- mod_announce:
- access: announce
- mod_avatar: {}
- mod_blocking: {}
- mod_bosh: {}
- mod_caps: {}
- mod_carboncopy: {}
- mod_client_state: {}
- mod_configure: {}
- mod_disco: {}
- mod_fail2ban: {}
- mod_http_api: {}
- mod_http_upload:
- put_url: "https://im.immae.fr/upload"
- custom_headers:
- "Access-Control-Allow-Origin": "*"
- "Access-Control-Allow-Methods": "OPTIONS, HEAD, GET, PUT, POST"
- "Access-Control-Allow-Headers": "Content-Type"
- mod_last: {}
- mod_mam:
- default: always
- mod_muc:
- access:
- - allow
- access_admin:
- - allow: admin
- access_create: muc_create
- access_persistent: muc_create
- default_room_options:
- mam: true
- mod_muc_admin: {}
- mod_offline:
- access_max_user_messages: max_user_offline_messages
- mod_ping: {}
- mod_privacy: {}
- mod_private: {}
- mod_proxy65:
- access: local
- max_connections: 5
- mod_pubsub:
- access_createnode: pubsub_createnode
- plugins:
- - "flat"
- - "pep"
- force_node_config:
- ## Change from "whitelist" to "open" to enable OMEMO support
- ## See https://github.com/processone/ejabberd/issues/2425
- "eu.siacs.conversations.axolotl.*":
- access_model: open
- ## Avoid buggy clients to make their bookmarks public
- "storage:bookmarks":
- access_model: whitelist
- mod_push: {}
- mod_push_keepalive: {}
- mod_register:
- ## Only accept registration requests from the "trusted"
- ## network (see access_rules section above).
- ## Think twice before enabling registration from any
- ## address. See the Jabber SPAM Manifesto for details:
- ## https://github.com/ge0rg/jabber-spam-fighting-manifesto
- ip_access: trusted_network
- access: register
- mod_roster:
- versioning: true
- mod_s2s_dialback: {}
- mod_shared_roster: {}
- mod_stats: {}
- mod_stream_mgmt:
- resend_on_timeout: if_offline
- mod_time: {}
- mod_vcard: {}
- mod_vcard_xupdate: {}
- mod_version:
- show_os: false
-
-### Local Variables:
-### mode: yaml
-### End:
-### vim: set filetype=yaml tabstop=8
-
diff --git a/modules/private/environment.nix b/modules/private/environment.nix
deleted file mode 100644
index 837d24b..0000000
--- a/modules/private/environment.nix
+++ /dev/null
@@ -1,1492 +0,0 @@
-{ config, lib, name, ... }:
-with lib;
-with types;
-with lists;
-let
- ldapOptions = {
- base = mkOption { description = "Base of the LDAP tree"; type = str; };
- host = mkOption { description = "Host to access LDAP"; type = str; };
- root_dn = mkOption { description = "DN of the root user"; type = str; };
- root_pw = mkOption { description = "Hashed password of the root user"; type = str; };
- replication_dn = mkOption { description = "DN of the user allowed to replicate the LDAP directory"; type = str; };
- replication_pw = mkOption { description = "Password of the user allowed to replicate the LDAP directory"; type = str; };
- };
- mkLdapOptions = name: more: mkOption {
- description = "${name} LDAP configuration";
- type = submodule {
- options = ldapOptions // {
- dn = mkOption { description = "DN of the ${name} user"; type = str; };
- password = mkOption { description = "password of the ${name} user"; type = str; };
- filter = mkOption { description = "Filter for ${name} users"; type = str; default = ""; };
- } // more;
- };
- };
- mysqlOptions = {
- host = mkOption { description = "Host to access Mysql"; type = str; };
- remoteHost = mkOption { description = "Host to access Mysql from outside"; type = str; };
- port = mkOption { description = "Port to access Mysql"; type = str; };
- socket = mkOption { description = "Socket to access Mysql"; type = path; };
- systemUsers = mkOption {
- description = "Attrs of user-passwords allowed to access mysql";
- type = attrsOf str;
- };
- pam = mkOption {
- description = "PAM configuration for mysql";
- type = submodule {
- options = {
- dn = mkOption { description = "DN to connect as to check users"; type = str; };
- password = mkOption { description = "DN password to connect as to check users"; type = str; };
- filter = mkOption { description = "filter to match users"; type = str; };
- };
- };
- };
- };
- mkMysqlOptions = name: more: mkOption {
- description = "${name} mysql configuration";
- type = submodule {
- options = mysqlOptions // {
- database = mkOption { description = "${name} database"; type = str; };
- user = mkOption { description = "${name} user"; type = str; };
- password = mkOption { description = "mysql password of the ${name} user"; type = str; };
- } // more;
- };
- };
- psqlOptions = {
- host = mkOption { description = "Host to access Postgresql"; type = str; };
- port = mkOption { description = "Port to access Postgresql"; type = str; };
- socket = mkOption { description = "Socket to access Postgresql"; type = path; };
- pam = mkOption {
- description = "PAM configuration for psql";
- type = submodule {
- options = {
- dn = mkOption { description = "DN to connect as to check users"; type = str; };
- password = mkOption { description = "DN password to connect as to check users"; type = str; };
- filter = mkOption { description = "filter to match users"; type = str; };
- };
- };
- };
- };
- mkPsqlOptions = name: mkOption {
- description = "${name} psql configuration";
- type = submodule {
- options = psqlOptions // {
- database = mkOption { description = "${name} database"; type = str; };
- schema = mkOption { description = "${name} schema"; type = nullOr str; default = null; };
- user = mkOption { description = "${name} user"; type = str; };
- password = mkOption { description = "psql password of the ${name} user"; type = str; };
- };
- };
- };
- redisOptions = {
- host = mkOption { description = "Host to access Redis"; type = str; };
- port = mkOption { description = "Port to access Redis"; type = str; };
- socket = mkOption { description = "Socket to access Redis"; type = path; };
- dbs = mkOption {
- description = "Attrs of db number. Each number should be unique to avoid collision!";
- type = attrsOf str;
- };
- spiped_key = mkOption {
- type = str;
- description = ''
- Key to use with spiped to make a secure channel to replication
- '';
- };
- predixy = mkOption {
- description = "Predixy configuration. Unused yet";
- type = submodule {
- options = {
- read = mkOption { type = str; description = "Read password"; };
- };
- };
- };
- };
- mkRedisOptions = name: mkOption {
- description = "${name} redis configuration";
- type = submodule {
- options = redisOptions // {
- db = mkOption { description = "${name} database"; type = str; };
- };
- };
- };
- smtpOptions = {
- host = mkOption { description = "Host to access SMTP"; type = str; };
- port = mkOption { description = "Port to access SMTP"; type = str; };
- };
- mkSmtpOptions = name: mkOption {
- description = "${name} smtp configuration";
- type = submodule {
- options = smtpOptions // {
- email = mkOption { description = "${name} email"; type = str; };
- password = mkOption { description = "SMTP password of the ${name} user"; type = str; };
- };
- };
- };
- hostEnv = submodule {
- options = {
- fqdn = mkOption {
- description = "Host FQDN";
- type = str;
- };
- users = mkOption {
- type = unspecified;
- default = pkgs: [];
- description = ''
- Sublist of users from realUsers. Function that takes pkgs as
- argument and gives an array as a result
- '';
- };
- emails = mkOption {
- default = [];
- description = "List of e-mails that the server can be a sender of";
- type = listOf str;
- };
- ldap = mkOption {
- description = ''
- LDAP credentials for the host
- '';
- type = submodule {
- options = {
- password = mkOption { type = str; description = "Password for the LDAP connection"; };
- dn = mkOption { type = str; description = "DN for the LDAP connection"; };
- };
- };
- };
- mx = mkOption {
- description = "subdomain and priority for MX server";
- default = { enable = false; };
- type = submodule {
- options = {
- enable = mkEnableOption "Enable MX";
- subdomain = mkOption { type = nullOr str; description = "Subdomain name (mx-*)"; };
- priority = mkOption { type = nullOr str; description = "Priority"; };
- };
- };
- };
- ips = mkOption {
- description = ''
- attrs of ip4/ip6 grouped by section
- '';
- type = attrsOf (submodule {
- options = {
- ip4 = mkOption {
- type = str;
- description = ''
- ip4 address of the host
- '';
- };
- ip6 = mkOption {
- type = listOf str;
- default = [];
- description = ''
- ip6 addresses of the host
- '';
- };
- };
- });
- };
- };
- };
-in
-{
- options.myEnv = {
- servers = mkOption {
- description = ''
- Attrs of servers information in the cluster (not necessarily handled by nixops)
- '';
- default = {};
- type = attrsOf hostEnv;
- };
- hetznerCloud = mkOption {
- description = ''
- Hetzner Cloud credential information
- '';
- type = submodule {
- options = {
- authToken = mkOption {
- type = str;
- description = ''
- The API auth token.
- '';
- };
- };
- };
- };
- hetzner = mkOption {
- description = ''
- Hetzner credential information
- '';
- type = submodule {
- options = {
- user = mkOption { type = str; description = "User"; };
- pass = mkOption { type = str; description = "Password"; };
- };
- };
- };
- sshd = mkOption {
- description = ''
- sshd service credential information
- '';
- type = submodule {
- options = {
- rootKeys = mkOption { type = attrsOf str; description = "Keys of root users"; };
- ldap = mkOption {
- description = ''
- LDAP credentials for cn=ssh,ou=services,dc=immae,dc=eu dn
- '';
- type = submodule {
- options = {
- password = mkOption { description = "Password"; type = str; };
- };
- };
- };
- };
- };
- };
- ports = mkOption {
- description = ''
- non-standard reserved ports. Must be unique!
- '';
- type = attrsOf port;
- default = {};
- apply = let
- noDupl = x: builtins.length (builtins.attrValues x) == builtins.length (unique (builtins.attrValues x));
- in
- x: if isAttrs x && noDupl x then x else throw "Non unique values for ports";
- };
- httpd = mkOption {
- description = ''
- httpd service credential information
- '';
- type = submodule {
- options = {
- ldap = mkOption {
- description = ''
- LDAP credentials for cn=httpd,ou=services,dc=immae,dc=eu dn
- '';
- type = submodule {
- options = {
- password = mkOption { description = "Password"; type = str; };
- };
- };
- };
- };
- };
- };
- smtp = mkOption {
- type = submodule { options = smtpOptions; };
- description = "SMTP configuration";
- };
- ldap = mkOption {
- description = ''
- LDAP server configuration
- '';
- type = submodule {
- options = ldapOptions;
- };
- };
- databases = mkOption {
- description = "Databases configuration";
- type = submodule {
- options = {
- mysql = mkOption {
- type = submodule { options = mysqlOptions; };
- description = "Mysql configuration";
- };
- redis = mkOption {
- type = submodule { options = redisOptions; };
- description = "Redis configuration";
- };
- postgresql = mkOption {
- type = submodule { options = psqlOptions; };
- description = "Postgresql configuration";
- };
- };
- };
- };
- jabber = mkOption {
- description = "Jabber configuration";
- type = submodule {
- options = {
- postfix_user_filter = mkOption { type = str; description = "Postfix filter to get xmpp users"; };
- ldap = mkLdapOptions "Jabber" {};
- postgresql = mkPsqlOptions "Jabber";
- };
- };
- };
- realUsers = mkOption {
- description = ''
- Attrset of function taking pkgs as argument.
- Real users settings, should provide a subattr of users.users.
- with at least: name, (hashed)Password, shell
- '';
- type = attrsOf unspecified;
- };
- users = mkOption {
- description = "System and regular users uid/gid";
- type = attrsOf (submodule {
- options = {
- uid = mkOption {
- description = "user uid";
- type = int;
- };
- gid = mkOption {
- description = "user gid";
- type = int;
- };
- };
- });
- };
- dns = mkOption {
- description = "DNS configuration";
- type = submodule {
- options = {
- soa = mkOption {
- description = "SOA information";
- type = submodule {
- options = {
- serial = mkOption {
- description = "Serial number. Should be incremented at each change and unique";
- type = str;
- };
- refresh = mkOption {
- description = "Refresh time";
- type = str;
- };
- retry = mkOption {
- description = "Retry time";
- type = str;
- };
- expire = mkOption {
- description = "Expire time";
- type = str;
- };
- ttl = mkOption {
- description = "Default TTL time";
- type = str;
- };
- email = mkOption {
- description = "hostmaster e-mail";
- type = str;
- };
- primary = mkOption {
- description = "Primary NS";
- type = str;
- };
- };
- };
- };
- ns = mkOption {
- description = "Attrs of NS servers group";
- example = {
- foo = {
- "ns1.foo.com" = [ "198.51.100.10" "2001:db8:abcd::1" ];
- "ns2.foo.com" = [ "198.51.100.15" "2001:db8:1234::1" ];
- };
- };
- type = attrsOf (attrsOf (listOf str));
- };
- keys = mkOption {
- default = {};
- description = "DNS keys";
- type = attrsOf (submodule {
- options = {
- algorithm = mkOption { type = str; description = "Algorithm"; };
- secret = mkOption { type = str; description = "Secret"; };
- };
- });
- };
- slaveZones = mkOption {
- description = "List of slave zones";
- type = listOf (submodule {
- options = {
- name = mkOption { type = str; description = "zone name"; };
- masters = mkOption {
- description = "NS master groups of this zone";
- type = listOf str;
- };
- keys = mkOption {
- default = [];
- description = "Keys associated to the server";
- type = listOf str;
- };
- };
- });
- };
- masterZones = mkOption {
- description = "List of master zones";
- type = listOf (submodule {
- options = {
- name = mkOption { type = str; description = "zone name"; };
- withCAA = mkOption { type = nullOr str; description = "CAA entry"; default = null; };
- slaves = mkOption {
- description = "NS slave groups of this zone";
- type = listOf str;
- };
- ns = mkOption {
- description = "groups names that should have their NS entries listed here";
- type = listOf str;
- };
- extra = mkOption {
- description = "Extra zone configuration for bind";
- example = ''
- notify yes;
- '';
- type = lines;
- };
- entries = mkOption { type = lines; description = "Regular entries of the NS zone"; };
- withEmail = mkOption {
- description = "List of domains that should have mail entries (MX, dkim, SPF, ...)";
- default = [];
- type = listOf (submodule {
- options = {
- domain = mkOption { type = str; description = "Which subdomain is concerned"; };
- send = mkOption { type = bool; description = "Whether there can be e-mails originating from the subdomain"; };
- receive = mkOption { type = bool; description = "Whether there can be e-mails arriving to the subdomain"; };
- };
- });
- };
- };
- });
- };
- };
- };
- };
- backup = mkOption {
- description = ''
- Remote backup with duplicity
- '';
- type = submodule {
- options = {
- password = mkOption { type = str; description = "Password for encrypting files"; };
- remotes = mkOption {
- type = attrsOf (submodule {
- options = {
- remote = mkOption {
- type = unspecified;
- example = literalExample ''
- bucket: "s3://some_host/${bucket}";
- '';
- description = ''
- Function.
- Takes a bucket name as argument and returns a url
- '';
- };
- accessKeyId = mkOption { type = str; description = "Remote access-key"; };
- secretAccessKey = mkOption { type = str; description = "Remote access secret"; };
- };
- });
- };
- };
- };
- };
- zrepl_backup = mkOption {
- type = submodule {
- options = {
- ssh_key = mkOption {
- description = "SSH key information";
- type = submodule {
- options = {
- public = mkOption { type = str; description = "Public part of the key"; };
- private = mkOption { type = lines; description = "Private part of the key"; };
- };
- };
- };
- mysql = mkMysqlOptions "Zrepl" {};
- };
- };
- };
- rsync_backup = mkOption {
- description =''
- Rsync backup configuration from controlled host
- '';
- type = submodule {
- options = {
- ssh_key = mkOption {
- description = "SSH key information";
- type = submodule {
- options = {
- public = mkOption { type = str; description = "Public part of the key"; };
- private = mkOption { type = lines; description = "Private part of the key"; };
- };
- };
- };
- profiles = mkOption {
- description = "Attrs of profiles to backup";
- type = attrsOf (submodule {
- options = {
- keep = mkOption { type = int; description = "Number of backups to keep"; };
- check_command = mkOption { type = str; description = "command to check if backup needs to be done"; default = "backup"; };
- login = mkOption { type = str; description = "Login to connect to host"; };
- port = mkOption { type = str; default = "22"; description = "Port to connect to host"; };
- host = mkOption { type = str; description = "Host to connect to"; };
- host_key = mkOption { type = str; description = "Host key"; };
- host_key_type = mkOption { type = str; description = "Host key type"; };
- parts = mkOption {
- description = "Parts to backup for this host";
- type = attrsOf (submodule {
- options = {
- remote_folder = mkOption { type = path; description = "Remote folder to backup";};
- exclude_from = mkOption {
- type = listOf path;
- default = [];
- description = "List of folders/files to exclude from the backup";
- };
- files_from = mkOption {
- type = listOf path;
- default = [];
- description = "List of folders/files to backup in the base folder";
- };
- args = mkOption {
- type = nullOr str;
- default = null;
- description = "Extra arguments to pass to rsync";
- };
- };
- });
- };
- };
- });
- };
- };
- };
- };
- monitoring = mkOption {
- description = "Monitoring configuration";
- type = submodule {
- options = {
- status_url = mkOption { type = str; description = "URL to push status to"; };
- status_token = mkOption { type = str; description = "Token for the status url"; };
- http_user_password = mkOption { type = str; description = "HTTP credentials to check services behind wall"; };
- email = mkOption { type = str; description = "Admin E-mail"; };
- ssh_public_key = mkOption { type = str; description = "SSH public key"; };
- ssh_secret_key = mkOption { type = str; description = "SSH secret key"; };
- imap_login = mkOption { type = str; description = "IMAP login"; };
- imap_password = mkOption { type = str; description = "IMAP password"; };
- eriomem_keys = mkOption { type = listOf (listOf str); description = "Eriomem keys"; default = []; };
- ovh_sms = mkOption {
- description = "OVH credentials for sms script";
- type = submodule {
- options = {
- endpoint = mkOption { type = str; default = "ovh-eu"; description = "OVH endpoint"; };
- application_key = mkOption { type = str; description = "Application key"; };
- application_secret = mkOption { type = str; description = "Application secret"; };
- consumer_key = mkOption { type = str; description = "Consumer key"; };
- account = mkOption { type = str; description = "Account"; };
- };
- };
- };
- eban = mkOption {
- description = "Eban credentials for webhook";
- type = submodule {
- options = {
- user = mkOption { type = str; description = "User"; };
- password = mkOption { type = str; description = "Password"; };
- };
- };
- };
- nrdp_tokens = mkOption { type = listOf str; description = "Tokens allowed to push status update"; };
- slack_url = mkOption { type = str; description = "Slack webhook url to push status update"; };
- slack_channel = mkOption { type = str; description = "Slack channel to push status update"; };
- netdata_aggregator = mkOption { type = str; description = "Url where netdata information should be sent"; };
- netdata_keys = mkOption { type = attrsOf str; description = "netdata host keys"; };
- contacts = mkOption { type = attrsOf unspecified; description = "Contact dicts to fill naemon objects"; };
- email_check = mkOption {
- description = "Emails services to check";
- type = attrsOf (submodule {
- options = {
- local = mkOption { type = bool; default = false; description = "Use local configuration"; };
- port = mkOption { type = nullOr str; default = null; description = "Port to connect to ssh"; };
- login = mkOption { type = nullOr str; default = null; description = "Login to connect to ssh"; };
- targets = mkOption { type = listOf str; description = "Hosts to send E-mails to"; };
- mail_address = mkOption { type = nullOr str; default = null; description = "E-mail recipient part to send e-mail to"; };
- mail_domain = mkOption { type = nullOr str; default = null; description = "E-mail domain part to send e-mail to"; };
- };
- });
- };
- };
- };
- };
- mpd = mkOption {
- description = "MPD configuration";
- type = submodule {
- options = {
- folder = mkOption { type = str; description = "Folder to serve from the MPD instance"; };
- password = mkOption { type = str; description = "Password to connect to the MPD instance"; };
- host = mkOption { type = str; description = "Host to connect to the MPD instance"; };
- port = mkOption { type = str; description = "Port to connect to the MPD instance"; };
- };
- };
- };
- ftp = mkOption {
- description = "FTP configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "FTP" {
- proftpd_filter = mkOption { type = str; description = "Filter for proftpd listing in LDAP"; };
- pure-ftpd_filter = mkOption { type = str; description = "Filter for pure-ftpd listing in LDAP"; };
- };
- };
- };
- };
- vpn = mkOption {
- description = "VPN configuration";
- type = attrsOf (submodule {
- options = {
- prefix = mkOption { type = str; description = "ipv6 prefix for the vpn subnet"; };
- privateKey = mkOption { type = str; description = "Private key for the host"; };
- publicKey = mkOption { type = str; description = "Public key for the host"; };
- };
- });
- };
- mail = mkOption {
- description = "Mail configuration";
- type = submodule {
- options = {
- dmarc = mkOption {
- description = "DMARC configuration";
- type = submodule {
- options = {
- ignore_hosts = mkOption {
- type = lines;
- description = ''
- Hosts to ignore when checking for dmarc
- '';
- };
- };
- };
- };
- dkim = mkOption {
- description = "DKIM configuration";
- type = attrsOf (submodule {
- options = {
- public = mkOption {
- type = str;
- example = ''
- ( "v=DKIM1; k=rsa; "
- "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3w1a2aMxWw9+hdcmbqX4UevcVqr204y0K73Wdc7MPZiOOlUJQYsMNSYR1Y/SC7jmPKeitpcJCpQgn/cveJZbuikjjPLsDReHyFEYmC278ZLRTELHx6f1IXM8WE08JIRT69CfZiMi1rVcOh9qRT4F93PyjCauU8Y5hJjtg9ThsWwIDAQAB" )
- '';
- description = "Public entry to put in DNS TXT field";
- };
- private = mkOption { type = str; description = "Private key"; };
- };
- });
- };
- postfix = mkOption {
- description = "Postfix configuration";
- type = submodule {
- options = {
- additional_mailbox_domains = mkOption {
- description = ''
- List of domains that are used as mailbox final destination, in addition to those defined in the DNS records
- '';
- type = listOf str;
- };
- mysql = mkMysqlOptions "Postfix" {
- password_encrypt = mkOption { type = str; description = "Key to encrypt relay password in database"; };
- };
- backup_domains = mkOption {
- description = ''
- Domains that are accepted for relay as backup domain
- '';
- type = attrsOf (submodule {
- options = {
- domains = mkOption { type = listOf str; description = "Domains list"; };
- relay_restrictions = mkOption {
- type = lines;
- description = ''
- Restrictions for relaying the e-mails from the domains
- '';
- };
- recipient_maps = mkOption {
- description = ''
- Recipient map to accept relay for.
- Must be specified for domain, the rules apply to everyone!
- '';
- type = listOf (submodule {
- options = {
- type = mkOption {
- type = enum [ "hash" ];
- description = "Map type";
- };
- content = mkOption {
- type = str;
- description = "Map content";
- };
- };
- });
- };
- };
- });
- };
- };
- };
- };
- dovecot = mkOption {
- description = "Dovecot configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "Dovecot" {
- pass_attrs = mkOption { type = str; description = "Password attribute in LDAP"; };
- user_attrs = mkOption { type = str; description = "User attribute mapping in LDAP"; };
- iterate_attrs = mkOption { type = str; description = "User attribute mapping for listing in LDAP"; };
- iterate_filter = mkOption { type = str; description = "User attribute filter for listing in LDAP"; };
- postfix_mailbox_filter = mkOption { type = str; description = "Postfix filter to get mailboxes"; };
- };
- };
- };
- };
- rspamd = mkOption {
- description = "rspamd configuration";
- type = submodule {
- options = {
- redis = mkRedisOptions "Redis";
- read_password_hashed = mkOption { type = str; description = "Hashed read password for rspamd"; };
- write_password_hashed = mkOption { type = str; description = "Hashed write password for rspamd"; };
- read_password = mkOption {
- type = str;
- description = "Read password for rspamd. Unused";
- apply = x: "";
- };
- write_password = mkOption {
- type = str;
- description = "Write password for rspamd. Unused";
- apply = x: "";
- };
- };
- };
- };
- scripts = mkOption {
- description = "Mail script recipients";
- type = attrsOf (submodule {
- options = {
- external = mkEnableOption "Create a script_@mail.immae.eu external address";
- src = mkOption {
- description = ''
- git source to fetch the script from.
- It must have a default.nix file as its root accepting a scriptEnv parameter
- '';
- type = submodule {
- options = {
- url = mkOption { type = str; description = "git url to fetch"; };
- rev = mkOption { type = str; description = "git reference to fetch"; };
- };
- };
- };
- env = mkOption {
- description = "Variables to pass to the script";
- type = unspecified;
- };
- };
- });
- };
- sympa = mkOption {
- description = "Sympa configuration";
- type = submodule {
- options = {
- listmasters = mkOption {
- type = listOf str;
- description = "Listmasters";
- };
- postgresql = mkPsqlOptions "Sympa";
- data_sources = mkOption {
- type = attrsOf str;
- default = {};
- description = "Data sources to make available to sympa";
- };
- scenari = mkOption {
- type = attrsOf str;
- default = {};
- description = "Scenari to make available to sympa";
- };
- };
- };
- };
- };
- };
- };
- buildbot = mkOption {
- description = "Buildbot configuration";
- type = submodule {
- options = {
- ssh_key = mkOption {
- description = "SSH key information";
- type = submodule {
- options = {
- public = mkOption { type = str; description = "Public part of the key"; };
- private = mkOption { type = lines; description = "Private part of the key"; };
- };
- };
- };
- workerPassword = mkOption { description = "Buildbot worker password"; type = str; };
- user = mkOption {
- description = "Buildbot user";
- type = submodule {
- options = {
- uid = mkOption {
- description = "user uid";
- type = int;
- };
- gid = mkOption {
- description = "user gid";
- type = int;
- };
- };
- };
- };
- ldap = mkOption {
- description = "Ldap configuration for buildbot";
- type = submodule {
- options = {
- password = mkOption { type = str; description = "Buildbot password"; };
- };
- };
- };
- projects = mkOption {
- description = "Projects to make a buildbot for";
- type = attrsOf (submodule {
- options = {
- name = mkOption { type = str; description = "Project name"; };
- packages = mkOption {
- type = unspecified;
- example = literalExample ''
- pkgs: [ pkgs.bash pkgs.git pkgs.gzip pkgs.openssh ];
- '';
- description = ''
- Function.
- Builds packages list to make available to buildbot project.
- Takes pkgs as argument.
- '';
- };
- pythonPackages = mkOption {
- type = unspecified;
- example = literalExample ''
- p: pkgs: [ pkgs.python3Packages.pip ];
- '';
- description = ''
- Function.
- Builds python packages list to make available to buildbot project.
- Takes buildbot python module as first argument and pkgs as second argument in order to augment the python modules list.
- '';
- };
- pythonPathHome = mkOption { type = bool; description = "Whether to add project’s python home to python path"; };
- workerPort = mkOption { type = port; description = "Port for the worker"; };
- secrets = mkOption {
- type = attrsOf str;
- description = "Secrets for the project to dump as files";
- };
- environment = mkOption {
- type = attrsOf str;
- description = ''
- Environment variables for the project.
- BUILDBOT_ is prefixed to the variable names
- '';
- };
- activationScript = mkOption {
- type = lines;
- description = ''
- Activation script to run during deployment
- '';
- };
- builderPaths = mkOption {
- type = attrsOf unspecified;
- default = {};
- description = ''
- Attrs of functions to make accessible specifically per builder.
- Takes pkgs as argument and should return a single path containing binaries.
- This path will be accessible as BUILDBOT_PATH_
- '';
- };
- webhookTokens = mkOption {
- type = nullOr (listOf str);
- default = null;
- description = ''
- List of tokens allowed to push to project’s change_hook/base endpoint
- '';
- };
- };
- });
- };
- };
- };
- };
- tools = mkOption {
- description = "Tools configurations";
- type = submodule {
- options = {
- contact = mkOption { type = str; description = "Contact e-mail address"; };
- assets = mkOption {
- default = {};
- type = attrsOf (submodule {
- options = {
- url = mkOption { type = str; description = "URL to fetch"; };
- sha256 = mkOption { type = str; description = "Hash of the url"; };
- };
- });
- description = "Assets to provide on assets.immae.eu";
- };
- davical = mkOption {
- description = "Davical configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Davical";
- ldap = mkLdapOptions "Davical" {};
- };
- };
- };
- diaspora = mkOption {
- description = "Diaspora configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Diaspora";
- redis = mkRedisOptions "Diaspora";
- ldap = mkLdapOptions "Diaspora" {};
- secret_token = mkOption { type = str; description = "Secret token"; };
- };
- };
- };
- dmarc_reports = mkOption {
- description = "DMARC reports configuration";
- type = submodule {
- options = {
- mysql = mkMysqlOptions "DMARC" {};
- anonymous_key = mkOption { type = str; description = "Anonymous hashing key"; };
- };
- };
- };
- etherpad-lite = mkOption {
- description = "Etherpad configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Etherpad";
- ldap = mkLdapOptions "Etherpad" {
- group_filter = mkOption { type = str; description = "Filter for groups"; };
- };
- adminPassword = mkOption { type = str; description = "Admin password for mypads / admin"; };
- session_key = mkOption { type = str; description = "Session key"; };
- api_key = mkOption { type = str; description = "API key"; };
- redirects = mkOption { type = str; description = "Redirects for apache"; };
- };
- };
- };
- gitolite = mkOption {
- description = "Gitolite configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "Gitolite" {};
- ssh_key = mkOption {
- description = "SSH key information";
- type = submodule {
- options = {
- public = mkOption { type = str; description = "Public part of the key"; };
- private = mkOption { type = lines; description = "Private part of the key"; };
- };
- };
- };
- };
- };
- };
- kanboard = mkOption {
- description = "Kanboard configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Kanboard";
- ldap = mkLdapOptions "Kanboard" {
- admin_dn = mkOption { type = str; description = "Admin DN"; };
- };
- };
- };
- };
- mantisbt = mkOption {
- description = "Mantisbt configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Mantisbt";
- ldap = mkLdapOptions "Mantisbt" {};
- master_salt = mkOption { type = str; description = "Master salt for password hash"; };
- };
- };
- };
- mastodon = mkOption {
- description = "Mastodon configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Mastodon";
- redis = mkRedisOptions "Mastodon";
- ldap = mkLdapOptions "Mastodon" {};
- paperclip_secret = mkOption { type = str; description = "Paperclip secret"; };
- otp_secret = mkOption { type = str; description = "OTP secret"; };
- secret_key_base = mkOption { type = str; description = "Secret key base"; };
- vapid = mkOption {
- description = "vapid key";
- type = submodule {
- options = {
- private = mkOption { type = str; description = "Private key"; };
- public = mkOption { type = str; description = "Public key"; };
- };
- };
- };
- };
- };
- };
- mediagoblin = mkOption {
- description = "Mediagoblin configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Mediagoblin";
- redis = mkRedisOptions "Mediagoblin";
- ldap = mkLdapOptions "Mediagoblin" {};
- };
- };
- };
- nextcloud = mkOption {
- description = "Nextcloud configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Peertube";
- redis = mkRedisOptions "Peertube";
- password_salt = mkOption { type = str; description = "Password salt"; };
- instance_id = mkOption { type = str; description = "Instance ID"; };
- secret = mkOption { type = str; description = "App secret"; };
- };
- };
- };
- peertube = mkOption {
- description = "Peertube configuration";
- type = submodule {
- options = {
- listenPort = mkOption { type = port; description = "Port to listen to"; };
- postgresql = mkPsqlOptions "Peertube";
- redis = mkRedisOptions "Peertube";
- ldap = mkLdapOptions "Peertube" {};
- };
- };
- };
- syden_peertube = mkOption {
- description = "Peertube Syden configuration";
- type = submodule {
- options = {
- listenPort = mkOption { type = port; description = "Port to listen to"; };
- postgresql = mkPsqlOptions "Peertube";
- redis = mkRedisOptions "Peertube";
- };
- };
- };
- phpldapadmin = mkOption {
- description = "phpLdapAdmin configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "phpldapadmin" {};
- };
- };
- };
- rompr = mkOption {
- description = "Rompr configuration";
- type = submodule {
- options = {
- mpd = mkOption {
- description = "MPD configuration";
- type = submodule {
- options = {
- host = mkOption { type = str; description = "Host for MPD"; };
- port = mkOption { type = port; description = "Port to access MPD host"; };
- };
- };
- };
- };
- };
- };
- roundcubemail = mkOption {
- description = "Roundcubemail configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "TT-RSS";
- secret = mkOption { type = str; description = "Secret"; };
- };
- };
- };
- shaarli = mkOption {
- description = "Shaarli configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "Shaarli" {};
- };
- };
- };
- status_engine = mkOption {
- description = "Status Engine configuration";
- type = submodule {
- options = {
- mysql = mkMysqlOptions "StatusEngine" {};
- ldap = mkLdapOptions "StatusEngine" {};
- };
- };
- };
- task = mkOption {
- description = "Taskwarrior configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "Taskwarrior" {};
- taskwarrior-web = mkOption {
- description = "taskwarrior-web profiles";
- type = attrsOf (submodule {
- options = {
- uid = mkOption {
- type = listOf str;
- description = "List of ldap uids having access to this profile";
- };
- org = mkOption { type = str; description = "Taskd organisation"; };
- key = mkOption { type = str; description = "Taskd key"; };
- date = mkOption { type = str; description = "Preferred date format"; };
- };
- });
- };
- };
- };
- };
- ttrss = mkOption {
- description = "TT-RSS configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "TT-RSS";
- ldap = mkLdapOptions "TT-RSS" {};
- };
- };
- };
- wallabag = mkOption {
- description = "Wallabag configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Wallabag";
- ldap = mkLdapOptions "Wallabag" {
- admin_filter = mkOption { type = str; description = "Admin users filter"; };
- };
- redis = mkRedisOptions "Wallabag";
- secret = mkOption { type = str; description = "App secret"; };
- };
- };
- };
- webhooks = mkOption {
- type = attrsOf str;
- description = "Mapping 'name'.php => script for webhooks";
- };
- csp_reports = mkOption {
- description = "CSP report configuration";
- type = submodule {
- options = {
- report_uri = mkOption { type = str; description = "URI to report CSP violations to"; };
- policies = mkOption { type = attrsOf str; description = "CSP policies to apply"; };
- postgresql = mkPsqlOptions "CSP reports";
- };
- };
- };
- commento = mkOption {
- description = "Commento configuration";
- type = submodule {
- options = {
- listenPort = mkOption { type = port; description = "Port to listen to"; };
- postgresql = mkPsqlOptions "Commento";
- smtp = mkSmtpOptions "Commento";
- };
- };
- };
- cryptpad = mkOption {
- description = "Cryptpad configuration";
- type = attrsOf (submodule {
- options = {
- email = mkOption { type = str; description = "Admin e-mail"; };
- admins = mkOption { type = listOf str; description = "Instance admin public keys"; };
- port = mkOption { type = port; description = "Port to listen to"; };
- };
- });
- };
- ympd = mkOption {
- description = "Ympd configuration";
- type = submodule {
- options = {
- listenPort = mkOption { type = port; description = "Port to listen to"; };
- mpd = mkOption {
- description = "MPD configuration";
- type = submodule {
- options = {
- password = mkOption { type = str; description = "Password to access MPD host"; };
- host = mkOption { type = str; description = "Host for MPD"; };
- port = mkOption { type = port; description = "Port to access MPD host"; };
- };
- };
- };
- };
- };
- };
- umami = mkOption {
- description = "Umami configuration";
- type = submodule {
- options = {
- listenPort = mkOption { type = port; description = "Port to listen to"; };
- postgresql = mkPsqlOptions "Umami";
- hashSalt = mkOption { type = str; description = "Hash salt"; };
- };
- };
- };
- yourls = mkOption {
- description = "Yourls configuration";
- type = submodule {
- options = {
- mysql = mkMysqlOptions "Yourls" {};
- ldap = mkLdapOptions "Yourls" {};
- cookieKey = mkOption { type = str; description = "Cookie key"; };
- };
- };
- };
- };
- };
- };
- serverSpecific = mkOption { type = attrsOf unspecified; description = "Server specific configuration"; };
- websites = mkOption {
- description = "Websites configurations";
- type = submodule {
- options = {
- immae = mkOption {
- description = "Immae configuration by environment";
- type = submodule {
- options = {
- temp = mkOption {
- description = "Temp configuration";
- type = submodule {
- options = {
- ldap = mkLdapOptions "Immae temp" {
- filter = mkOption { type = str; description = "Filter for user access"; };
- };
- };
- };
- };
- };
- };
- };
- isabelle = mkOption {
- description = "Isabelle configurations by environment";
- type =
- let
- atenSubmodule = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "Symfony environment"; };
- secret = mkOption { type = str; description = "Symfony App secret"; };
- postgresql = mkPsqlOptions "Aten";
- };
- };
- };
- in
- submodule {
- options = {
- aten_production = atenSubmodule;
- aten_integration = atenSubmodule;
- iridologie = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "SPIP environment"; };
- mysql = mkMysqlOptions "Iridologie" {};
- ldap = mkLdapOptions "Iridologie" {};
- };
- };
- };
- };
- };
- };
- chloe = mkOption {
- description = "Chloe configurations by environment";
- type =
- let
- chloeSubmodule = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "SPIP environment"; };
- mysql = mkMysqlOptions "Chloe" {};
- ldap = mkLdapOptions "Chloe" {};
- };
- };
- };
- in
- submodule {
- options = {
- production = chloeSubmodule;
- integration = chloeSubmodule;
- };
- };
- };
- connexionswing = mkOption {
- description = "Connexionswing configurations by environment";
- type =
- let
- csSubmodule = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "Symfony environment"; };
- mysql = mkMysqlOptions "Connexionswing" {};
- secret = mkOption { type = str; description = "Symfony App secret"; };
- email = mkOption { type = str; description = "Symfony email notification"; };
- };
- };
- };
- in
- submodule {
- options = {
- production = csSubmodule;
- integration = csSubmodule;
- };
- };
- };
- jerome = mkOption {
- description = "Naturaloutil configuration";
- type = submodule {
- options = {
- mysql = mkMysqlOptions "Naturaloutil" {};
- server_admin = mkOption { type = str; description = "Server admin e-mail"; };
- };
- };
- };
- telio_tortay = mkOption {
- description = "Telio Tortay configuration";
- type = submodule {
- options = {
- server_admin = mkOption { type = str; description = "Server admin e-mail"; };
- };
- };
- };
- ludivine = mkOption {
- description = "Ludivinecassal configurations by environment";
- type =
- let
- lcSubmodule = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "Symfony environment"; };
- mysql = mkMysqlOptions "LudivineCassal" {};
- ldap = mkLdapOptions "LudivineCassal" {};
- secret = mkOption { type = str; description = "Symfony App secret"; };
- };
- };
- };
- in
- submodule {
- options = {
- production = lcSubmodule;
- integration = lcSubmodule;
- };
- };
- };
- emilia = mkOption {
- description = "Emilia configuration";
- type = submodule {
- options = {
- postgresql = mkPsqlOptions "Emilia";
- };
- };
- };
- florian = mkOption {
- description = "Florian configuration";
- type = submodule {
- options = {
- server_admin = mkOption { type = str; description = "Server admin e-mail"; };
- };
- };
- };
- nassime = mkOption {
- description = "Nassime configuration";
- type = submodule {
- options = {
- server_admin = mkOption { type = str; description = "Server admin e-mail"; };
- };
- };
- };
- piedsjaloux = mkOption {
- description = "Piedsjaloux configurations by environment";
- type =
- let
- pjSubmodule = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "Symfony environment"; };
- mysql = mkMysqlOptions "Piedsjaloux" {};
- secret = mkOption { type = str; description = "Symfony App secret"; };
- };
- };
- };
- in
- submodule {
- options = {
- production = pjSubmodule;
- integration = pjSubmodule;
- };
- };
- };
- richie = mkOption {
- description = "Europe Richie configurations by environment";
- type = submodule {
- options = {
- mysql = mkMysqlOptions "Richie" {};
- smtp_mailer = mkOption {
- description = "SMTP mailer configuration";
- type = submodule {
- options = {
- user = mkOption { type = str; description = "Username"; };
- password = mkOption { type = str; description = "Password"; };
- };
- };
- };
- };
- };
- };
- caldance = mkOption {
- description = "Caldance configurations by environment";
- type = submodule {
- options = {
- integration = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- password = mkOption { type = str; description = "Password file content for basic auth"; };
- };
- };
- };
- };
- };
- };
- tellesflorian = mkOption {
- description = "Tellesflorian configurations by environment";
- type =
- let
- tfSubmodule = mkOption {
- description = "environment configuration";
- type = submodule {
- options = {
- environment = mkOption { type = str; description = "Symfony environment"; };
- mysql = mkMysqlOptions "Tellesflorian" {};
- secret = mkOption { type = str; description = "Symfony App secret"; };
- invite_passwords = mkOption { type = str; description = "Password basic auth"; };
- };
- };
- };
- in
- submodule {
- options = {
- integration = tfSubmodule;
- };
- };
- };
- };
- };
- };
- };
- options.hostEnv = mkOption {
- readOnly = true;
- type = hostEnv;
- default = config.myEnv.servers."${name}";
- description = "Host environment";
- };
-}
diff --git a/modules/private/ftp.nix b/modules/private/ftp.nix
deleted file mode 100644
index cae25c1..0000000
--- a/modules/private/ftp.nix
+++ /dev/null
@@ -1,248 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- package = pkgs.pure-ftpd.override { ldapFtpId = "immaeFtp"; };
- pure-ftpd-enabled = config.myServices.ftp.pure-ftpd.enable;
- proftpd-enabled = config.myServices.ftp.proftpd.enable;
-in
-{
- options = {
- myServices.ftp.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable ftp.
- '';
- };
- myServices.ftp.pure-ftpd.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable pure-ftpd.
- '';
- };
- myServices.ftp.proftpd.enable = lib.mkOption {
- type = lib.types.bool;
- default = true;
- description = ''
- Whether to enable proftpd.
- '';
- };
- };
-
- config = lib.mkIf config.myServices.ftp.enable {
- security.acme.certs."ftp" = config.myServices.certificates.certConfig // {
- domain = "eldiron.immae.eu";
- postRun = (lib.optionalString pure-ftpd-enabled ''
- systemctl restart pure-ftpd.service
- '') + (lib.optionalString proftpd-enabled ''
- systemctl restart proftpd.service
- '');
- extraDomains = { "ftp.immae.eu" = null; };
- };
-
- networking = {
- firewall = {
- allowedTCPPorts = [ 21 115 ];
- allowedTCPPortRanges = [ { from = 40000; to = 50000; } ];
- };
- };
-
- users.users.ftp = {
- uid = config.ids.uids.ftp; # 8
- group = "ftp";
- description = "Anonymous FTP user";
- home = "/homeless-shelter";
- extraGroups = [ "keys" ];
- };
-
- users.groups.ftp.gid = config.ids.gids.ftp;
-
- system.activationScripts.ftp = ''
- install -m 0755 -o ftp -g ftp -d /var/lib/ftp
- '' + (lib.optionalString proftpd-enabled ''
- install -m 0755 -o nobody -g nogroup -d /var/lib/proftpd/authorized_keys
- '');
-
- secrets.keys."pure-ftpd-ldap" = lib.mkIf pure-ftpd-enabled {
- permissions = "0400";
- user = "ftp";
- group = "ftp";
- text = ''
- LDAPServer ${config.myEnv.ftp.ldap.host}
- LDAPPort 389
- LDAPUseTLS True
- LDAPBaseDN ${config.myEnv.ftp.ldap.base}
- LDAPBindDN ${config.myEnv.ftp.ldap.dn}
- LDAPBindPW ${config.myEnv.ftp.ldap.password}
- LDAPDefaultUID 500
- LDAPForceDefaultUID False
- LDAPDefaultGID 100
- LDAPForceDefaultGID False
- LDAPFilter ${config.myEnv.ftp.ldap.pure-ftpd_filter}
-
- LDAPAuthMethod BIND
-
- # Pas de possibilite de donner l'Uid/Gid !
- # Compile dans pure-ftpd directement avec immaeFtpUid / immaeFtpGid
- LDAPHomeDir immaeFtpDirectory
- '';
- };
- secrets.keys."proftpd-ldap.conf" = lib.mkIf proftpd-enabled {
- permissions = "0400";
- user = "ftp";
- group = "ftp";
- text = ''
- LDAPServer ldaps://${config.myEnv.ftp.ldap.host}:636/??sub
- LDAPUseTLS on
- LDAPAuthBinds on
- LDAPBindDN "${config.myEnv.ftp.ldap.dn}" "${config.myEnv.ftp.ldap.password}"
- LDAPSearchScope subtree
- LDAPAuthBinds on
- LDAPDefaultGID 100
- LDAPDefaultUID 500
- LDAPForceDefaultUID off
- LDAPForceDefaultGID off
- LDAPAttr gidNumber immaeFtpGid
- LDAPAttr uidNumber immaeFtpUid
- LDAPAttr homeDirectory immaeFtpDirectory
- LDAPUsers "${config.myEnv.ftp.ldap.base}" "${config.myEnv.ftp.ldap.proftpd_filter}"
- LDAPGroups "${config.myEnv.ftp.ldap.base}"
- '';
- };
-
- services.filesWatcher.pure-ftpd = lib.mkIf pure-ftpd-enabled {
- restart = true;
- paths = [ config.secrets.fullPaths."pure-ftpd-ldap" ];
- };
- services.filesWatcher.proftpd = lib.mkIf proftpd-enabled {
- restart = true;
- paths = [ config.secrets.fullPaths."proftpd-ldap.conf" ];
- };
-
- systemd.services.pure-ftpd = let
- configFile = pkgs.writeText "pure-ftpd.conf" ''
- PassivePortRange 40000 50000
- Bind 42
- ChrootEveryone yes
- CreateHomeDir yes
- BrokenClientsCompatibility yes
- MaxClientsNumber 50
- Daemonize yes
- MaxClientsPerIP 8
- VerboseLog no
- DisplayDotFiles yes
- AnonymousOnly no
- NoAnonymous no
- SyslogFacility ftp
- DontResolve yes
- MaxIdleTime 15
- LDAPConfigFile ${config.secrets.fullPaths."pure-ftpd-ldap"}
- LimitRecursion 10000 8
- AnonymousCanCreateDirs no
- MaxLoad 4
- AntiWarez yes
- Umask 133:022
- # ftp
- MinUID 8
- AllowUserFXP no
- AllowAnonymousFXP no
- ProhibitDotFilesWrite no
- ProhibitDotFilesRead no
- AutoRename no
- AnonymousCantUpload no
- MaxDiskUsage 99
- CustomerProof yes
- TLS 1
- CertFile ${config.security.acme.certs.ftp.directory}/full.pem
- '';
- in lib.mkIf pure-ftpd-enabled {
- description = "Pure-FTPd server";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- serviceConfig.ExecStart = "${package}/bin/pure-ftpd ${configFile}";
- serviceConfig.Type = "forking";
- serviceConfig.PIDFile = "/run/pure-ftpd.pid";
- };
-
- systemd.services.proftpd = let
- configFile = pkgs.writeText "proftpd.conf" ''
- ServerName "ProFTPD"
- ServerType standalone
- DefaultServer on
-
- Port 21
- UseIPv6 on
- Umask 022
- MaxInstances 30
- MaxClients 50
- MaxClientsPerHost 8
-
- # Set the user and group under which the server will run.
- User ftp
- Group ftp
-
- CreateHome on
- DefaultRoot ~
-
- AllowOverwrite on
-
- TLSEngine on
- TLSRequired off
- TLSProtocol TLSv1.1 TLSv1.2 TLSv1.3
-
- TLSCertificateChainFile ${config.security.acme.certs.ftp.directory}/fullchain.pem
- TLSECCertificateFile ${config.security.acme.certs.ftp.directory}/cert.pem
- TLSECCertificateKeyFile ${config.security.acme.certs.ftp.directory}/key.pem
- TLSRenegotiate none
- PidFile /run/proftpd/proftpd.pid
-
- ScoreboardFile /run/proftpd/proftpd.scoreboard
-
- PassivePorts 40000 50000
- #DebugLevel 10
- Include ${config.secrets.fullPaths."proftpd-ldap.conf"}
-
- RequireValidShell off
-
- # Bar use of SITE CHMOD by default
-
- DenyAll
-
-
-
- Umask 022
- Port 115
- SFTPEngine on
- CreateHome on
- DefaultRoot ~
-
- AllowOverwrite on
-
- SFTPHostKey /etc/ssh/ssh_host_ed25519_key
- SFTPHostKey /etc/ssh/ssh_host_rsa_key
- Include ${config.secrets.fullPaths."proftpd-ldap.conf"}
- RequireValidShell off
- SFTPAuthorizedUserKeys file:/var/lib/proftpd/authorized_keys/%u
- SFTPAuthMethods password publickey
-
- SFTPOptions IgnoreSFTPSetOwners
-
- '';
- in lib.mkIf proftpd-enabled {
- description = "ProFTPD server";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- serviceConfig.ExecStart = "${pkgs.proftpd}/bin/proftpd -c ${configFile}";
- serviceConfig.Type = "forking";
- serviceConfig.PIDFile = "/run/proftpd/proftpd.pid";
- serviceConfig.RuntimeDirectory = "proftpd";
- };
-
- services.cron.systemCronJobs = lib.mkIf proftpd-enabled [
- "*/2 * * * * nobody ${./ftp_sync.sh}"
- ];
- };
-
-}
diff --git a/modules/private/ftp_sync.sh b/modules/private/ftp_sync.sh
deleted file mode 100755
index 8b0d9c5..0000000
--- a/modules/private/ftp_sync.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env bash
-
-LDAPSEARCH=ldapsearch
-
-LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu"
-LDAP_PASS=$(cat /etc/ssh/ldap_password)
-LDAP_HOST="ldap.immae.eu"
-LDAP_BASE="dc=immae,dc=eu"
-LDAP_FILTER="(memberOf=cn=users,cn=ftp,ou=services,dc=immae,dc=eu)"
-
-handle_keys() {
- uids="$1"
- keys="$2"
- if [ -n "$uids" ]; then
- for uid in $uids; do
- echo "$keys" | while read key; do
- if [ -n "$key" ]; then
- ssh-keygen -e -f <(echo "$key")
- fi
- done > /var/lib/proftpd/authorized_keys/$uid
- done
- fi
-}
-
-mkdir -p /var/lib/proftpd/authorized_keys
-
-while read i; do
- if [[ "$i" =~ ^dn: ]]; then
- handle_keys "$uids" "$keys"
- uids=""
- keys=""
- fi;
- if [[ "$i" =~ ^uid: ]]; then
- uids="$uids ${i#uid: }"
- fi
- if [[ "$i" =~ ^immaeSshKey: ]]; then
- key="${i#immaeSshKey: }"
- if [[ "$key" =~ ^ssh- ]]; then
- keys="$keys
-$key"
- elif echo "$key" | cut -d" " -f1 | grep -q "\bftp\b"; then
- keys="$keys
-$(echo "$key" | cut -d" " -f2-)"
- fi
- fi
-done < <(ldapsearch -h "$LDAP_HOST" -ZZ -LLL -D "$LDAP_BIND" -w "$LDAP_PASS" -b "$LDAP_BASE" -x -o ldif-wrap=no "$LDAP_FILTER" uid immaeSshKey)
-handle_keys "$uids" "$keys"
diff --git a/modules/private/gemini/default.nix b/modules/private/gemini/default.nix
deleted file mode 100644
index ffe8a12..0000000
--- a/modules/private/gemini/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- configFile = pkgs.writeText "config.yaml" ''
- listen: ":1965"
- hosts:
- immae.eu:
- cert: /var/lib/acme/immae/full.pem
- key: /var/lib/acme/immae/key.pem
- paths:
- - path: /
- root: ${./public}
- '';
-in
-{
- options.myServices.gemini.enable = lib.mkEnableOption "enable Gemini capsule";
- config = lib.mkIf config.myServices.gemini.enable {
- networking.firewall.allowedTCPPorts = [ 1965 ];
- systemd.services.gemini = {
- description = "Gemini capsule server";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- serviceConfig.ExecStart = "${pkgs.twins}/bin/twins -config ${configFile}";
- serviceConfig.Type = "simple";
- };
- };
-}
diff --git a/modules/private/gemini/public/index.gmi b/modules/private/gemini/public/index.gmi
deleted file mode 100644
index 034a0d9..0000000
--- a/modules/private/gemini/public/index.gmi
+++ /dev/null
@@ -1,70 +0,0 @@
-# Immae
-
-## Présentation
-
-Dans le but de promouvoir la décentralisation des données personnelles et l’usage de logiciels open source, je propose un hébergement de divers services utiles. Ces services sont basés sur du code libre et déployés sur des systèmes libres également.
-
-Je suis un particulier, et dans la mesure de mes capacités, j’essaye toujours de fournir des services à ma famille et à mes amis proches en remplacement de services non libres fournis par les géants du web. J’ai décidé de faire le nécessaire pour étendre ces services à un public plus large, avec pour but de conserver une qualité suffisante.
-
-Lorsque c’est possible, les programmes que je développe sont également libres de droits (ce n’est pas toujours dépendant de ma volonté ou tributaire de ma disponibilité pour rendre le code accessible)
-
-Depuis juin 2019 je fais partie du collectif CHATONS, dont je respecte en particulier la charte:
-=> https://chatons.org CHATONS
-
-## Tarifs
-
-Je ne cherche pas à faire de profits en proposant ces services. Cependant, l’hébergement de ces services n’est pas gratuit, et maintenir ces services à un niveau de qualité suffisant demande de l’investissement en temps. Ainsi, selon l’usage désiré, le niveau de personnalisation et support dont vous avez besoin et les moyens à votre disposition et votre volonté, une participation pourra être demandée afin d’y accéder.
-=> https://www.immae.eu/licences_et_tip.html Tips
-
-## Services proposés
-
-Voici une liste non exhaustive de services que je propose :
-
-* Mastodon
-* Nextcloud
-* Calendrier/Contacts et synchronisation
-* Hébergement de vidéos (Mediagoblin)
-* Hébergement de vidéos (Peertube)
-* Kanboard
-* Flux RSS
-* "Lire plus tard" (wallabag)
-* Partage de liens (Shaarli)
-* Raccourcisseur d’URLs
-* Édition de texte collaborative
-* Réseau social
-* Hébergement de dépôts git privés et publics, gestion d’issues
-* Messagerie instantanée (XMPP/Jabber)
-* Comptes e-mails avec domaines personnalisés, IMAP/SMTP, MX backup
-* Hébergement et administration de sites web privés
-* Comptes shell protégés
-
-Un tableau de bord des services est disponible :
-=> https://tools.immae.eu Tableau de bord des services
-
-Je propose également de l’aide à distance (ou de visu si la distance est faible), pour l’usage de ces outils ou d’autres problèmes liés à l’informatique.
-
-Si vous ne voyez pas ce que vous voulez dans la liste, nous pourrons essayer de trouver une solution ensemble. Je suis ouvert aussi bien sûr à la création de nouveaux services (la liste est encore incomplète et d’autres services sont déjà prévus), dans le cadre défini en haut : basé sur des applications libres.
-
-=> https://status.immae.eu État des services
-
-## Comment faire ?
-
-Vous devez commencer par accepter les conditions générales dgutilisation :
-=> https://www.immae.eu/CGU Conditions générales d’utilisation
-Elles ne contiennent rien d’inhabituel mais elles ont été écrites par moi-même, donc sans jargon juridique. Elles vous permettront de décider si les garanties proposées sont en accord avec ce que vous pouvez vous permettre.
-
-Ensuite, contactez-moi avec vos vœux :
-=> https://www.immae.eu/contacts_fr.html Page de contact
-
-## Infrastructure et open source
-
-Dans le but de pouvoir décemment offrir une qualité de service suffisante sans pour autant y passer mes journées, l’installation des services est gérée via NixOS, permettant d’assurer la reproductibilité et l’automatisation des installations.
-
-Cette configuration est stockée publiquement dans un dépôt git, réutilisable et améliorable librement (avec probablement quelques ajustements).
-=> https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/ Dépôt git de la configuration
-
-
-=> https://www.immae.eu/contacts_fr.html Page de contact
-=> https://www.immae.eu/CGU Conditions générales d’utilisation
-=> https://www.immae.eu/mentions.html Mentions légales
-=> https://www.immae.eu/licences_et_tip.html Quelques informations sur les licences utilisées et tips
diff --git a/modules/private/gitolite/default.nix b/modules/private/gitolite/default.nix
deleted file mode 100644
index 6a74734..0000000
--- a/modules/private/gitolite/default.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.gitolite;
-in {
- options.myServices.gitolite = {
- enable = lib.mkEnableOption "my gitolite service";
- gitoliteDir = lib.mkOption {
- type = lib.types.str;
- default = "/var/lib/gitolite";
- };
- };
-
- config = lib.mkIf cfg.enable {
- myServices.ssh.modules = [{
- snippet = builtins.readFile ./ldap_gitolite.sh;
- dependencies = [ pkgs.gitolite ];
- }];
- networking.firewall.allowedTCPPorts = [ 9418 ];
-
- secrets.keys."gitolite/ldap_password" = {
- user = "gitolite";
- group = "gitolite";
- permissions = "0400";
- text = config.myEnv.tools.gitolite.ldap.password;
- };
-
- services.gitDaemon = {
- enable = true;
- user = "gitolite";
- group = "gitolite";
- basePath = "${cfg.gitoliteDir}/repositories";
- };
-
- system.activationScripts.gitolite = let
- deps = [ pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.coreutils ];
- gitolite_ldap_groups = pkgs.runCommand "gitolite_ldap_groups.sh" {
- buildInputs = [ pkgs.makeWrapper ];
- } ''
- makeWrapper "${./gitolite_ldap_groups.sh}" "$out" \
- --prefix PATH : ${lib.makeBinPath deps} \
- --set LDAP_PASS_PATH ${config.secrets.fullPaths."gitolite/ldap_password"}
- '';
- in {
- deps = [ "users" ];
- text = ''
- if [ -d ${cfg.gitoliteDir} ]; then
- ln -sf ${gitolite_ldap_groups} ${cfg.gitoliteDir}/gitolite_ldap_groups.sh
- chmod g+rx ${cfg.gitoliteDir}
- fi
- if [ -f ${cfg.gitoliteDir}/projects.list ]; then
- chmod g+r ${cfg.gitoliteDir}/projects.list
- fi
- '';
- };
-
- users.users.wwwrun.extraGroups = [ "gitolite" ];
- users.users.gitolite.extraGroups = [ "keys" ];
-
- users.users.gitolite.packages = let
- python-packages = python-packages: with python-packages; [
- simplejson
- urllib3
- sleekxmpp
- ];
- in
- [
- (pkgs.python3.withPackages python-packages)
- pkgs.nettools
- pkgs.findutils
- ];
- # Installation: https://git.immae.eu/mantisbt/view.php?id=93
- services.gitolite = {
- enable = true;
- adminPubkey = config.myEnv.sshd.rootKeys.immae_dilion;
- };
- };
-}
diff --git a/modules/private/gitolite/gitolite_ldap_groups.sh b/modules/private/gitolite/gitolite_ldap_groups.sh
deleted file mode 100755
index 3d7117e..0000000
--- a/modules/private/gitolite/gitolite_ldap_groups.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-
-uid_param="$1"
-ldap_host="ldap.immae.eu"
-ldap_binddn="cn=gitolite,ou=services,dc=immae,dc=eu"
-ldap_bindpw="$(cat $LDAP_PASS_PATH)"
-ldap_searchbase="dc=immae,dc=eu"
-ldap_scope="subtree"
-
-ldap_options="-h ${ldap_host} -ZZ -x -D ${ldap_binddn} -w ${ldap_bindpw} -b ${ldap_searchbase} -s ${ldap_scope}"
-
-ldap_filter="(&(memberOf=cn=groups,cn=gitolite,ou=services,dc=immae,dc=eu)(|(member=uid=${uid_param},ou=users,dc=immae,dc=eu)(member=uid=${uid_param},ou=group_users,dc=immae,dc=eu)))"
-ldap_result=$(ldapsearch ${ldap_options} -LLL "${ldap_filter}" cn | grep 'cn:' | cut -d' ' -f2)
-
-echo "$ldap_result"
diff --git a/modules/private/gitolite/ldap_gitolite.sh b/modules/private/gitolite/ldap_gitolite.sh
deleted file mode 100644
index 23cb2bf..0000000
--- a/modules/private/gitolite/ldap_gitolite.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh
-LDAP_GITOLITE_MEMBER="cn=users,cn=gitolite,ou=services,dc=immae,dc=eu"
-GITOLITE_SHELL=$(which gitolite-shell)
-
-if [[ $user == gitolite ]]; then
- ldap_search '(&(memberOf='$LDAP_GITOLITE_MEMBER')('$KEY'=*))' $KEY | \
- while read line ;
- do
- if [ ! -z "$line" ]; then
- if [[ $line == dn* ]]; then
- user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line")
- if [ -n "$user" ]; then
- if [[ $user == "immae" ]] || [[ $user == "denise" ]]; then
- # Capitalize first letter (backward compatibility)
- user=$(sed -r 's/^([a-z])/\U\1/' <<< "$user")
- fi
- else
- # Service fake user
- user=$(sed -n 's/.*cn=\([^,]*\).*/\1/p' <<< "$line")
- fi
- elif [[ $line == $KEY* ]]; then
- key=$(clean_key_line git "$line")
- if [ ! -z "$key" ]; then
- if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
- echo -n 'command="'$GITOLITE_SHELL' '$user'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty '
- echo $key
- fi
- fi
- fi
- fi
- done
- exit 0
-fi
diff --git a/modules/private/irc.nix b/modules/private/irc.nix
deleted file mode 100644
index bc0bfb4..0000000
--- a/modules/private/irc.nix
+++ /dev/null
@@ -1,54 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.irc;
-in
-{
- options.myServices = {
- ircCerts = lib.mkOption {
- description = "Default ircconfigurations for certificates as accepted by acme";
- };
- irc.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable irc stuff.
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- security.acme.certs."irc" = config.myServices.ircCerts // {
- domain = "irc.immae.eu";
- postRun = ''
- systemctl restart stunnel.service
- '';
- };
-
- networking.firewall.allowedTCPPorts = [ 6697 ];
- services.bitlbee = with pkgs; {
- enable = true;
- authMode = "Registered";
- libpurple_plugins = [
- purple-hangouts
- purple-matrix
- ];
- plugins = [
- bitlbee-mastodon
- bitlbee-facebook
- bitlbee-discord
- bitlbee-steam
- ];
- };
-
- services.stunnel = {
- enable = true;
- servers = {
- bitlbee = {
- accept = 6697;
- connect = 6667;
- cert = "${config.security.acme.certs.irc.directory}/full.pem";
- };
- };
- };
- };
-}
diff --git a/modules/private/loginctl-linger.nix b/modules/private/loginctl-linger.nix
deleted file mode 100644
index e6b9f23..0000000
--- a/modules/private/loginctl-linger.nix
+++ /dev/null
@@ -1,47 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-# https://github.com/michalrus/dotfiles/commit/ebd5fa9583f82589f23531647aa677feb3f8d344#diff-4d353005ef5b3e37f33c07332b8523edR1
-# A temporary hack to `loginctl enable-linger $somebody` (for
-# multiplexer sessions to last), until this one is unresolved:
-# https://github.com/NixOS/nixpkgs/issues/3702
-#
-# Usage: `users.extraUsers.somebody.linger = true` or slt.
-
-with lib;
-
-let
-
- dataDir = "/var/lib/systemd/linger";
-
- lingeringUsers = map (u: u.name) (attrValues (flip filterAttrs config.users.users (n: u: u.linger)));
-
- lingeringUsersFile = builtins.toFile "lingering-users"
- (concatStrings (map (s: "${s}\n")
- (sort (a: b: a < b) lingeringUsers))); # this sorting is important for `comm` to work correctly
-
- updateLingering = pkgs.writeScript "update-lingering" ''
- if [ ! -e ${dataDir} ]; then
- install -m 0755 -o root -g root -d ${dataDir}
- fi
- if [ -e ${dataDir} ] ; then
- ls ${dataDir} | sort | comm -3 -1 ${lingeringUsersFile} - | xargs -r ${pkgs.systemd}/bin/loginctl disable-linger
- ls ${dataDir} | sort | comm -3 -2 ${lingeringUsersFile} - | xargs -r ${pkgs.systemd}/bin/loginctl enable-linger
- fi
- '';
-
-in
-
-{
- options = {
- users.users = mkOption {
- options = [{
- linger = mkEnableOption "lingering for the user";
- }];
- };
- };
-
- config = {
- system.activationScripts.update-lingering =
- stringAfter [ "users" ] updateLingering;
- };
-}
diff --git a/modules/private/mail/default.nix b/modules/private/mail/default.nix
deleted file mode 100644
index 2d405c6..0000000
--- a/modules/private/mail/default.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ lib, pkgs, config, ... }:
-{
- imports = [
- ./milters.nix
- ./postfix.nix
- ./dovecot.nix
- ./relay.nix
- ./rspamd.nix
- ./opensmtpd.nix
- ./sympa.nix
- ];
- options.myServices.mail.enable = lib.mkEnableOption "enable Mail services";
- options.myServices.mailRelay.enable = lib.mkEnableOption "enable Mail relay services";
- options.myServices.mailBackup.enable = lib.mkEnableOption "enable MX backup services";
-
- config = lib.mkIf config.myServices.mail.enable {
- security.acme.certs."mail" = config.myServices.certificates.certConfig // {
- domain = config.hostEnv.fqdn;
- extraDomains = let
- zonesWithMx = builtins.filter (zone:
- lib.attrsets.hasAttr "withEmail" zone && lib.lists.length zone.withEmail > 0
- ) config.myEnv.dns.masterZones;
- mxs = map (zone: "${config.hostEnv.mx.subdomain}.${zone.name}") zonesWithMx;
- in builtins.listToAttrs (map (mx: lib.attrsets.nameValuePair mx null) mxs);
- };
- # This is for clients that don’t support elliptic curves (e.g.
- # printer)
- security.acme.certs."mail-rsa" = config.myServices.certificates.certConfig // {
- domain = config.hostEnv.fqdn;
- keyType = "rsa4096";
- extraDomains = let
- zonesWithMx = builtins.filter (zone:
- lib.attrsets.hasAttr "withEmail" zone && lib.lists.length zone.withEmail > 0
- ) config.myEnv.dns.masterZones;
- mxs = map (zone: "${config.hostEnv.mx.subdomain}.${zone.name}") zonesWithMx;
- in builtins.listToAttrs (map (mx: lib.attrsets.nameValuePair mx null) mxs);
- };
- systemd.slices.mail = {
- description = "Mail slice";
- };
- };
-}
diff --git a/modules/private/mail/dovecot.nix b/modules/private/mail/dovecot.nix
deleted file mode 100644
index b6fdc02..0000000
--- a/modules/private/mail/dovecot.nix
+++ /dev/null
@@ -1,292 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- sieve_bin = pkgs.runCommand "sieve_bin" {
- buildInputs = [ pkgs.makeWrapper ];
- } ''
- cp -a ${./sieve_bin} $out
- chmod -R u+w $out
- patchShebangs $out
- for i in $out/*; do
- wrapProgram "$i" --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils ]}
- done
- '';
-in
-{
- config = lib.mkIf config.myServices.mail.enable {
- systemd.services.dovecot2.serviceConfig.Slice = "mail.slice";
- secrets.keys."dovecot/ldap" = {
- user = config.services.dovecot2.user;
- group = config.services.dovecot2.group;
- permissions = "0400";
- text = ''
- hosts = ${config.myEnv.mail.dovecot.ldap.host}
- tls = yes
-
- dn = ${config.myEnv.mail.dovecot.ldap.dn}
- dnpass = ${config.myEnv.mail.dovecot.ldap.password}
-
- auth_bind = yes
-
- ldap_version = 3
-
- base = ${config.myEnv.mail.dovecot.ldap.base}
- scope = subtree
-
- pass_filter = ${config.myEnv.mail.dovecot.ldap.filter}
- pass_attrs = ${config.myEnv.mail.dovecot.ldap.pass_attrs}
-
- user_attrs = ${config.myEnv.mail.dovecot.ldap.user_attrs}
- user_filter = ${config.myEnv.mail.dovecot.ldap.filter}
- iterate_attrs = ${config.myEnv.mail.dovecot.ldap.iterate_attrs}
- iterate_filter = ${config.myEnv.mail.dovecot.ldap.iterate_filter}
- '';
- };
-
- users.users.vhost = {
- group = "vhost";
- uid = config.ids.uids.vhost;
- };
- users.groups.vhost.gid = config.ids.gids.vhost;
-
- # https://blog.zeninc.net/index.php?post/2018/04/01/Un-annuaire-pour-les-gouverner-tous.......
- services.dovecot2 = {
- enable = true;
- enablePAM = false;
- enablePop3 = true;
- enableImap = true;
- enableLmtp = true;
- protocols = [ "sieve" ];
- modules = [
- pkgs.dovecot_pigeonhole
- pkgs.dovecot_fts-xapian
- ];
- mailUser = "vhost";
- mailGroup = "vhost";
- createMailUser = false;
- mailboxes = {
- Trash = { auto = "subscribe"; specialUse = "Trash"; };
- Junk = { auto = "subscribe"; specialUse = "Junk"; };
- Sent = { auto = "subscribe"; specialUse = "Sent"; };
- Drafts = { auto = "subscribe"; specialUse = "Drafts"; };
- };
- mailLocation = "mbox:~/Mail:INBOX=~/Mail/Inbox:INDEX=~/.imap";
- sslServerCert = "/var/lib/acme/mail/fullchain.pem";
- sslServerKey = "/var/lib/acme/mail/key.pem";
- sslCACert = "/var/lib/acme/mail/fullchain.pem";
- extraConfig = builtins.concatStringsSep "\n" [
- # For printer which doesn’t support elliptic curve
- ''
- ssl_alt_cert = &1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB"
- ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Junk SEEN NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB"
- ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Trash NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB"
- '';
- in
- [
- "0 2 * * * root ${cron_script}/bin/cleanup-imap-folders"
- ];
- security.acme.certs."mail-rsa" = {
- postRun = ''
- systemctl restart dovecot2.service
- '';
- extraDomains = {
- "imap.immae.eu" = null;
- "pop3.immae.eu" = null;
- };
- };
- security.acme.certs."mail" = {
- postRun = ''
- systemctl restart dovecot2.service
- '';
- extraDomains = {
- "imap.immae.eu" = null;
- "pop3.immae.eu" = null;
- };
- };
- };
-}
-
diff --git a/modules/private/mail/filter-rewrite-from.py b/modules/private/mail/filter-rewrite-from.py
deleted file mode 100755
index aad9c69..0000000
--- a/modules/private/mail/filter-rewrite-from.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#! /usr/bin/env python3
-import sys
-
-sys.stdin.reconfigure(encoding='utf-8')
-sys.stdout.reconfigure(encoding='utf-8')
-stdin = sys.stdin
-stdout = sys.stdout
-
-mailaddr = sys.argv[1]
-inheader = {}
-
-# Change to actual file for logging
-logfile = open("/dev/null", "a")
-
-def log(l, i):
- logfile.write("{} {}\n".format(i, l))
- logfile.flush()
-
-def send(l):
- log(l, ">")
- stdout.write("{}\n".format(l))
- stdout.flush()
-
-def token_and_sid(version, sid, token):
- if version < "0.5":
- return "{}|{}".format(token, sid)
- else:
- return "{}|{}".format(sid, token)
-
-log("started", "l")
-while True:
- line = stdin.readline().strip()
- log(line, "<")
- if not line:
- log("finished", "l")
- break
- splitted = line.split("|")
- if line == "config|ready":
- log("in config ready", "l")
- send("register|filter|smtp-in|mail-from")
- send("register|filter|smtp-in|data-line")
- send("register|ready")
- if splitted[0] != "filter":
- continue
- if len(splitted) < 7:
- send("invalid filter command: expected >6 fields!")
- sys.exit(1)
- version = splitted[1]
- action = splitted[4]
- sid = splitted[5]
- token = splitted[6]
- token_sid = token_and_sid(version, sid, token)
- rest = "|".join(splitted[7:])
- if action == "mail-from":
- inheader[sid] = True
- send("filter-result|{}|rewrite|<{}>".format(token_sid, mailaddr))
- continue
- if action == "data-line":
- if rest == "" and inheader.get(sid, False):
- inheader[sid] = False
- if rest == "." and not inheader.get(sid):
- del(inheader[sid])
- if inheader.get(sid, False) and rest.upper().startswith("FROM:"):
- send("filter-dataline|{}|From: {}".format(token_sid, mailaddr))
- else:
- send("filter-dataline|{}|{}".format(token_sid, rest))
- continue
- send("filter-result|{}|proceed".format(token_sid))
diff --git a/modules/private/mail/milters.nix b/modules/private/mail/milters.nix
deleted file mode 100644
index 4b93a7a..0000000
--- a/modules/private/mail/milters.nix
+++ /dev/null
@@ -1,88 +0,0 @@
-{ lib, pkgs, config, name, ... }:
-{
- imports =
- builtins.attrValues (import ../../../lib/flake-compat.nix ../../../flakes/private/openarc).nixosModules
- ++ builtins.attrValues (import ../../../lib/flake-compat.nix ../../../flakes/private/opendmarc).nixosModules;
-
- options.myServices.mail.milters.sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- opendkim = "/run/opendkim/opendkim.sock";
- opendmarc = config.services.opendmarc.socket;
- openarc = config.services.openarc.socket;
- };
- readOnly = true;
- description = ''
- milters sockets
- '';
- };
- config = lib.mkIf (config.myServices.mail.enable || config.myServices.mailBackup.enable) {
- secrets.keys = {
- "opendkim" = {
- isDir = true;
- user = config.services.opendkim.user;
- group = config.services.opendkim.group;
- permissions = "0550";
- };
- "opendkim/eldiron.private" = {
- user = config.services.opendkim.user;
- group = config.services.opendkim.group;
- permissions = "0400";
- text = config.myEnv.mail.dkim.eldiron.private;
- };
- "opendkim/eldiron.txt" = {
- user = config.services.opendkim.user;
- group = config.services.opendkim.group;
- permissions = "0444";
- text = ''
- eldiron._domainkey IN TXT ${config.myEnv.mail.dkim.eldiron.public}'';
- };
- };
- users.users."${config.services.opendkim.user}".extraGroups = [ "keys" ];
- services.opendkim = {
- enable = true;
- socket = "local:${config.myServices.mail.milters.sockets.opendkim}";
- domains = builtins.concatStringsSep "," (lib.flatten (map
- (zone: map
- (e: "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}")
- (zone.withEmail or [])
- )
- config.myEnv.dns.masterZones
- ));
- keyPath = config.secrets.fullPaths."opendkim";
- selector = "eldiron";
- configFile = pkgs.writeText "opendkim.conf" ''
- SubDomains yes
- UMask 002
- AlwaysAddARHeader yes
- '';
- group = config.services.postfix.group;
- };
- systemd.services.opendkim.serviceConfig.Slice = "mail.slice";
- systemd.services.opendkim.preStart = lib.mkBefore ''
- # Skip the prestart script as keys are handled in secrets
- exit 0
- '';
- services.filesWatcher.opendkim = {
- restart = true;
- paths = [
- config.secrets.fullPaths."opendkim/eldiron.private"
- ];
- };
-
- systemd.services.milter_verify_from = {
- description = "Verify from milter";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Slice = "mail.slice";
- User = "postfix";
- Group = "postfix";
- ExecStart = let python = pkgs.python3.withPackages (p: [ p.pymilter ]);
- in "${python}/bin/python ${./verify_from.py} -s /run/milter_verify_from/verify_from.sock";
- RuntimeDirectory = "milter_verify_from";
- };
- };
- };
-}
diff --git a/modules/private/mail/opensmtpd.nix b/modules/private/mail/opensmtpd.nix
deleted file mode 100644
index e05bba9..0000000
--- a/modules/private/mail/opensmtpd.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-{ lib, pkgs, config, name, ... }:
-{
- config = lib.mkIf config.myServices.mailRelay.enable {
- secrets.keys."opensmtpd/creds" = {
- user = "smtpd";
- group = "smtpd";
- permissions = "0400";
- text = ''
- eldiron ${name}:${config.hostEnv.ldap.password}
- '';
- };
- users.users.smtpd.extraGroups = [ "keys" ];
- services.opensmtpd = {
- enable = true;
- serverConfiguration = let
- filter-rewrite-from = pkgs.runCommand "filter-rewrite-from.py" {
- buildInputs = [ pkgs.python3 ];
- } ''
- cp ${./filter-rewrite-from.py} $out
- patchShebangs $out
- '';
- in ''
- table creds \
- "${config.secrets.fullPaths."opensmtpd/creds"}"
- # FIXME: filtering requires 6.6, uncomment following lines when
- # upgrading
- # filter "fixfrom" \
- # proc-exec "${filter-rewrite-from} ${name}@immae.eu"
- # listen on socket filter "fixfrom"
- action "relay-rewrite-from" relay \
- helo ${config.hostEnv.fqdn} \
- host smtp+tls://eldiron@eldiron.immae.eu:587 \
- auth \
- mail-from ${name}@immae.eu
- action "relay" relay \
- helo ${config.hostEnv.fqdn} \
- host smtp+tls://eldiron@eldiron.immae.eu:587 \
- auth
- match for any !mail-from "@immae.eu" action "relay-rewrite-from"
- match for any mail-from "@immae.eu" action "relay"
- '';
- };
- environment.systemPackages = [ config.services.opensmtpd.package ];
- services.mail.sendmailSetuidWrapper = {
- program = "sendmail";
- source = "${config.services.opensmtpd.package}/bin/smtpctl";
- setuid = false;
- setgid = false;
- };
- security.wrappers.mailq = {
- program = "mailq";
- source = "${config.services.opensmtpd.package}/bin/smtpctl";
- setuid = false;
- setgid = false;
- };
- };
-}
diff --git a/modules/private/mail/postfix.nix b/modules/private/mail/postfix.nix
deleted file mode 100644
index ae98a8a..0000000
--- a/modules/private/mail/postfix.nix
+++ /dev/null
@@ -1,471 +0,0 @@
-{ lib, pkgs, config, nodes, ... }:
-{
- config = lib.mkIf config.myServices.mail.enable {
- secrets.keys = {
- "postfix/mysql_alias_maps" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- # We need to specify that option to trigger ssl connection
- tls_ciphers = TLSv1.2
- user = ${config.myEnv.mail.postfix.mysql.user}
- password = ${config.myEnv.mail.postfix.mysql.password}
- hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
- dbname = ${config.myEnv.mail.postfix.mysql.database}
- query = SELECT DISTINCT destination
- FROM forwardings
- WHERE
- ((regex = 1 AND '%s' REGEXP CONCAT('^',source,'$') ) OR (regex = 0 AND source = '%s'))
- AND active = 1
- AND '%s' NOT IN
- (
- SELECT source
- FROM forwardings_blacklisted
- WHERE source = '%s'
- ) UNION
- SELECT 'devnull@immae.eu'
- FROM forwardings_blacklisted
- WHERE source = '%s'
- '';
- };
- "postfix/ldap_mailboxes" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- server_host = ldaps://${config.myEnv.mail.dovecot.ldap.host}:636
- search_base = ${config.myEnv.mail.dovecot.ldap.base}
- query_filter = ${config.myEnv.mail.dovecot.ldap.postfix_mailbox_filter}
- bind_dn = ${config.myEnv.mail.dovecot.ldap.dn}
- bind_pw = ${config.myEnv.mail.dovecot.ldap.password}
- result_attribute = immaePostfixAddress
- result_format = dummy
- version = 3
- '';
- };
- "postfix/mysql_sender_login_maps" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- # We need to specify that option to trigger ssl connection
- tls_ciphers = TLSv1.2
- user = ${config.myEnv.mail.postfix.mysql.user}
- password = ${config.myEnv.mail.postfix.mysql.password}
- hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
- dbname = ${config.myEnv.mail.postfix.mysql.database}
- query = SELECT DISTINCT destination
- FROM forwardings
- WHERE
- (
- (regex = 1 AND CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') REGEXP CONCAT('^',source,'$') )
- OR
- (regex = 0 AND source = CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d'))
- )
- AND active = 1
- UNION SELECT CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') AS destination
- '';
- };
- "postfix/mysql_sender_relays_maps" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- # We need to specify that option to trigger ssl connection
- tls_ciphers = TLSv1.2
- user = ${config.myEnv.mail.postfix.mysql.user}
- password = ${config.myEnv.mail.postfix.mysql.password}
- hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
- dbname = ${config.myEnv.mail.postfix.mysql.database}
- # INSERT INTO sender_relays
- # (`from`, owner, relay, login, password, regex, active)
- # VALUES
- # ( 'sender@otherhost.org'
- # , 'me@mail.immae.eu'
- # , '[otherhost.org]:587'
- # , 'otherhostlogin'
- # , AES_ENCRYPT('otherhostpassword', '${config.myEnv.mail.postfix.mysql.password_encrypt}')
- # , '0'
- # , '1');
-
- query = SELECT DISTINCT `owner`
- FROM sender_relays
- WHERE
- ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s'))
- AND active = 1
- '';
- };
- "postfix/mysql_sender_relays_hosts" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- # We need to specify that option to trigger ssl connection
- tls_ciphers = TLSv1.2
- user = ${config.myEnv.mail.postfix.mysql.user}
- password = ${config.myEnv.mail.postfix.mysql.password}
- hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
- dbname = ${config.myEnv.mail.postfix.mysql.database}
-
- query = SELECT DISTINCT relay
- FROM sender_relays
- WHERE
- ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s'))
- AND active = 1
- '';
- };
- "postfix/mysql_sender_relays_creds" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- # We need to specify that option to trigger ssl connection
- tls_ciphers = TLSv1.2
- user = ${config.myEnv.mail.postfix.mysql.user}
- password = ${config.myEnv.mail.postfix.mysql.password}
- hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
- dbname = ${config.myEnv.mail.postfix.mysql.database}
-
- query = SELECT DISTINCT CONCAT(`login`, ':', AES_DECRYPT(`password`, '${config.myEnv.mail.postfix.mysql.password_encrypt}'))
- FROM sender_relays
- WHERE
- ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s'))
- AND active = 1
- '';
- };
- "postfix/ldap_ejabberd_users_immae_fr" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- server_host = ldaps://${config.myEnv.jabber.ldap.host}:636
- search_base = ${config.myEnv.jabber.ldap.base}
- query_filter = ${config.myEnv.jabber.postfix_user_filter}
- domain = immae.fr
- bind_dn = ${config.myEnv.jabber.ldap.dn}
- bind_pw = ${config.myEnv.jabber.ldap.password}
- result_attribute = immaeXmppUid
- result_format = ejabberd@localhost
- version = 3
- '';
- };
- } // lib.mapAttrs' (name: v: lib.nameValuePair "postfix/scripts/${name}-env" {
- user = "postfixscripts";
- group = "root";
- permissions = "0400";
- text = builtins.toJSON v.env;
- }) config.myEnv.mail.scripts;
-
- networking.firewall.allowedTCPPorts = [ 25 465 587 ];
-
- users.users.postfixscripts = {
- group = "keys";
- uid = config.ids.uids.postfixscripts;
- description = "Postfix scripts user";
- };
- users.users."${config.services.postfix.user}".extraGroups = [ "keys" ];
- services.filesWatcher.postfix = {
- restart = true;
- paths = [
- config.secrets.fullPaths."postfix/mysql_alias_maps"
- config.secrets.fullPaths."postfix/ldap_mailboxes"
- config.secrets.fullPaths."postfix/mysql_sender_login_maps"
- config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"
- ];
- };
- services.postfix = {
- extraAliases = let
- toScript = name: script: pkgs.writeScript name ''
- #! ${pkgs.stdenv.shell}
- mail=$(${pkgs.coreutils}/bin/cat -)
- output=$(echo "$mail" | ${script} 2>&1)
- ret=$?
-
- if [ "$ret" != "0" ]; then
- echo "$mail" \
- | ${pkgs.procmail}/bin/formail -i "X-Return-Code: $ret" \
- | /run/wrappers/bin/sendmail -i scripts_error+${name}@mail.immae.eu
-
- messageId=$(echo "$mail" | ${pkgs.procmail}/bin/formail -x "Message-Id:")
- repeat=$(echo "$mail" | ${pkgs.procmail}/bin/formail -X "From:" -X "Received:")
-
- ${pkgs.coreutils}/bin/cat <')"
- '';
- };
- in builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: ''${n}: "|${v}"'') scripts);
- mapFiles = let
- recipient_maps = let
- name = n: i: "relay_${n}_${toString i}";
- pair = n: i: m: lib.attrsets.nameValuePair (name n i) (
- if m.type == "hash"
- then pkgs.writeText (name n i) m.content
- else null
- );
- pairs = n: v: lib.imap1 (i: m: pair n i m) v.recipient_maps;
- in lib.attrsets.filterAttrs (k: v: v != null) (
- lib.attrsets.listToAttrs (lib.flatten (
- lib.attrsets.mapAttrsToList pairs config.myEnv.mail.postfix.backup_domains
- ))
- );
- relay_restrictions = lib.attrsets.filterAttrs (k: v: v != null) (
- lib.attrsets.mapAttrs' (n: v:
- lib.attrsets.nameValuePair "recipient_access_${n}" (
- if lib.attrsets.hasAttr "relay_restrictions" v
- then pkgs.writeText "recipient_access_${n}" v.relay_restrictions
- else null
- )
- ) config.myEnv.mail.postfix.backup_domains
- );
- virtual_map = {
- virtual = let
- cfg = config.myEnv.monitoring.email_check.eldiron;
- address = "${cfg.mail_address}@${cfg.mail_domain}";
- in pkgs.writeText "postfix-virtual" (
- builtins.concatStringsSep "\n" (
- ["${address} testmail@localhost"] ++
- lib.attrsets.mapAttrsToList (
- n: v: lib.optionalString v.external ''
- script_${n}@mail.immae.eu ${n}@localhost, scripts@mail.immae.eu
- ''
- ) config.myEnv.mail.scripts
- )
- );
- };
- sasl_access = {
- host_sender_login = with lib.attrsets; let
- addresses = zipAttrs (lib.flatten (mapAttrsToList
- (n: v: (map (e: { "${e}" = "${n}@immae.eu"; }) v.emails)) config.myEnv.servers));
- joined = builtins.concatStringsSep ",";
- in pkgs.writeText "host-sender-login"
- (builtins.concatStringsSep "\n" (mapAttrsToList (n: v: "${n} ${joined v}") addresses));
- };
- in
- recipient_maps // relay_restrictions // virtual_map // sasl_access;
- config = {
- ### postfix module overrides
- readme_directory = "${pkgs.postfix}/share/postfix/doc";
- smtp_tls_CAfile = lib.mkForce "";
- smtp_tls_cert_file = lib.mkForce "";
- smtp_tls_key_file = lib.mkForce "";
-
- message_size_limit = "1073741824"; # Don't put 0 here, it's not equivalent to "unlimited"
- mailbox_size_limit = "1073741825"; # Workaround, local delivered mails should all go through scripts
- alias_database = "\$alias_maps";
-
- ### Aliases scripts user
- default_privs = "postfixscripts";
-
- ### Virtual mailboxes config
- virtual_alias_maps = [
- "hash:/etc/postfix/virtual"
- "mysql:${config.secrets.fullPaths."postfix/mysql_alias_maps"}"
- "ldap:${config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"}"
- ];
- virtual_mailbox_domains = config.myEnv.mail.postfix.additional_mailbox_domains
- ++ lib.remove null (lib.flatten (map
- (zone: map
- (e: if e.receive
- then "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}"
- else null
- )
- (zone.withEmail or [])
- )
- config.myEnv.dns.masterZones
- ));
- virtual_mailbox_maps = [
- "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}"
- ];
- dovecot_destination_recipient_limit = "1";
- virtual_transport = "dovecot";
-
- ### Relay domains
- relay_domains = lib.flatten (lib.attrsets.mapAttrsToList (n: v: v.domains or []) config.myEnv.mail.postfix.backup_domains);
- relay_recipient_maps = lib.flatten (lib.attrsets.mapAttrsToList (n: v:
- lib.imap1 (i: m: "${m.type}:/etc/postfix/relay_${n}_${toString i}") v.recipient_maps
- ) config.myEnv.mail.postfix.backup_domains);
- smtpd_relay_restrictions = [
- "defer_unauth_destination"
- ] ++ lib.flatten (lib.attrsets.mapAttrsToList (n: v:
- if lib.attrsets.hasAttr "relay_restrictions" v
- then [ "check_recipient_access hash:/etc/postfix/recipient_access_${n}" ]
- else []
- ) config.myEnv.mail.postfix.backup_domains);
-
- ### Additional smtpd configuration
- smtpd_tls_received_header = "yes";
- smtpd_tls_loglevel = "1";
-
- ### Email sending configuration
- smtp_tls_security_level = "may";
- smtp_tls_loglevel = "1";
-
- ### Force ip bind for smtp
- smtp_bind_address = config.hostEnv.ips.main.ip4;
- smtp_bind_address6 = builtins.head config.hostEnv.ips.main.ip6;
-
- # Use some relays when authorized senders are not myself
- smtp_sasl_mechanism_filter = "plain,login"; # GSSAPI Not correctly supported by postfix
- smtp_sasl_auth_enable = "yes";
- smtp_sasl_password_maps =
- "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_creds"}";
- smtp_sasl_security_options = "noanonymous";
- smtp_sender_dependent_authentication = "yes";
- sender_dependent_relayhost_maps =
- "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_hosts"}";
-
- ### opendkim, opendmarc, openarc milters
- non_smtpd_milters = [
- "unix:${config.myServices.mail.milters.sockets.opendkim}"
- ];
- smtpd_milters = [
- "unix:${config.myServices.mail.milters.sockets.opendkim}"
- "unix:${config.myServices.mail.milters.sockets.openarc}"
- "unix:${config.myServices.mail.milters.sockets.opendmarc}"
- ];
-
- smtp_use_tls = true;
- smtpd_use_tls = true;
- smtpd_tls_chain_files = builtins.concatStringsSep "," [ "/var/lib/acme/mail/full.pem" "/var/lib/acme/mail-rsa/full.pem" ];
-
- maximal_queue_lifetime = "6w";
- bounce_queue_lifetime = "6w";
- };
- enable = true;
- enableSmtp = true;
- enableSubmission = true;
- submissionOptions = {
- # Don’t use "long form", only commas (cf
- # http://www.postfix.org/master.5.html long form is not handled
- # well by the submission function)
- smtpd_tls_security_level = "encrypt";
- smtpd_sasl_auth_enable = "yes";
- smtpd_tls_auth_only = "yes";
- smtpd_sasl_tls_security_options = "noanonymous";
- smtpd_sasl_type = "dovecot";
- smtpd_sasl_path = "private/auth";
- smtpd_reject_unlisted_recipient = "no";
- smtpd_client_restrictions = "permit_sasl_authenticated,reject";
- smtpd_relay_restrictions = "permit_sasl_authenticated,reject";
- # Refuse to send e-mails with a From that is not handled
- smtpd_sender_restrictions =
- "reject_sender_login_mismatch,reject_unlisted_sender,permit_sasl_authenticated,reject";
- smtpd_sender_login_maps = builtins.concatStringsSep "," [
- "hash:/etc/postfix/host_sender_login"
- "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_maps"}"
- "mysql:${config.secrets.fullPaths."postfix/mysql_sender_login_maps"}"
- ];
- smtpd_recipient_restrictions = "permit_sasl_authenticated,reject";
- milter_macro_daemon_name = "ORIGINATING";
- smtpd_milters = builtins.concatStringsSep "," [
- # FIXME: put it back when opensmtpd is upgraded and able to
- # rewrite the from header
- #"unix:/run/milter_verify_from/verify_from.sock"
- "unix:${config.myServices.mail.milters.sockets.opendkim}"
- ];
- };
- destination = ["localhost"];
- # This needs to reverse DNS
- hostname = config.hostEnv.fqdn;
- setSendmail = true;
- recipientDelimiter = "+";
- masterConfig = {
- submissions = {
- type = "inet";
- private = false;
- command = "smtpd";
- args = ["-o" "smtpd_tls_wrappermode=yes" ] ++ (let
- mkKeyVal = opt: val: [ "-o" (opt + "=" + val) ];
- in lib.concatLists (lib.mapAttrsToList mkKeyVal config.services.postfix.submissionOptions)
- );
- };
- dovecot = {
- type = "unix";
- privileged = true;
- chroot = false;
- command = "pipe";
- args = let
- # rspamd could be used as a milter, but then it cannot apply
- # its checks "per user" (milter is not yet dispatched to
- # users), so we wrap dovecot-lda inside rspamc per recipient
- # here.
- rspamc_dovecot = pkgs.writeScriptBin "rspamc_dovecot" ''
- #! ${pkgs.stdenv.shell}
- sender="$1"
- original_recipient="$2"
- user="$3"
-
- ${pkgs.coreutils}/bin/cat - | \
- (${pkgs.rspamd}/bin/rspamc -h ${config.myServices.mail.rspamd.sockets.worker-controller} -c bayes -d "$user" --mime || true) | \
- ${pkgs.dovecot}/libexec/dovecot/dovecot-lda -f "$sender" -a "$original_recipient" -d "$user"
- '';
- in [
- "flags=ODRhu" "user=vhost:vhost"
- "argv=${rspamc_dovecot}/bin/rspamc_dovecot \${sender} \${original_recipient} \${user}@\${nexthop}"
- ];
- };
- };
- };
- security.acme.certs."mail" = {
- postRun = ''
- systemctl restart postfix.service
- '';
- extraDomains = {
- "smtp.immae.eu" = null;
- };
- };
- security.acme.certs."mail-rsa" = {
- postRun = ''
- systemctl restart postfix.service
- '';
- extraDomains = {
- "smtp.immae.eu" = null;
- };
- };
- system.activationScripts.testmail = {
- deps = [ "users" ];
- text = let
- allCfg = config.myEnv.monitoring.email_check;
- cfg = allCfg.eldiron;
- reverseTargets = builtins.attrNames (lib.attrsets.filterAttrs (k: v: builtins.elem "eldiron" v.targets) allCfg);
- to_email = cfg': host':
- let sep = if lib.strings.hasInfix "+" cfg'.mail_address then "_" else "+";
- in "${cfg'.mail_address}${sep}${host'}@${cfg'.mail_domain}";
- mails_to_receive = builtins.concatStringsSep " " (map (to_email cfg) reverseTargets);
- in ''
- install -m 0555 -o postfixscripts -g keys -d /var/lib/naemon/checks/email
- for f in ${mails_to_receive}; do
- if [ ! -f /var/lib/naemon/checks/email/$f ]; then
- install -m 0644 -o postfixscripts -g keys /dev/null -T /var/lib/naemon/checks/email/$f
- touch -m -d @0 /var/lib/naemon/checks/email/$f
- fi
- done
- '';
- };
- systemd.services.postfix.serviceConfig.Slice = "mail.slice";
- };
-}
diff --git a/modules/private/mail/relay.nix b/modules/private/mail/relay.nix
deleted file mode 100644
index 668d365..0000000
--- a/modules/private/mail/relay.nix
+++ /dev/null
@@ -1,235 +0,0 @@
-{ lib, pkgs, config, nodes, name, ... }:
-{
- config = lib.mkIf config.myServices.mailBackup.enable {
- security.acme.certs."mail" = config.myServices.certificates.certConfig // {
- postRun = ''
- systemctl restart postfix.service
- '';
- domain = config.hostEnv.fqdn;
- extraDomains = let
- zonesWithMx = builtins.filter (zone:
- lib.attrsets.hasAttr "withEmail" zone && lib.lists.length zone.withEmail > 0
- ) config.myEnv.dns.masterZones;
- mxs = map (zone: "${config.myEnv.servers."${name}".mx.subdomain}.${zone.name}") zonesWithMx;
- in builtins.listToAttrs (map (mx: lib.attrsets.nameValuePair mx null) mxs);
- };
- secrets.keys = {
- "postfix/mysql_alias_maps" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- # We need to specify that option to trigger ssl connection
- tls_ciphers = TLSv1.2
- user = ${config.myEnv.mail.postfix.mysql.user}
- password = ${config.myEnv.mail.postfix.mysql.password}
- hosts = ${config.myEnv.mail.postfix.mysql.remoteHost}
- dbname = ${config.myEnv.mail.postfix.mysql.database}
- query = SELECT DISTINCT 1
- FROM forwardings
- WHERE
- ((regex = 1 AND '%s' REGEXP CONCAT('^',source,'$') ) OR (regex = 0 AND source = '%s'))
- AND active = 1
- AND '%s' NOT IN
- (
- SELECT source
- FROM forwardings_blacklisted
- WHERE source = '%s'
- ) UNION
- SELECT 'devnull@immae.eu'
- FROM forwardings_blacklisted
- WHERE source = '%s'
- '';
- };
- "postfix/ldap_mailboxes" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- server_host = ldaps://${config.myEnv.mail.dovecot.ldap.host}:636
- search_base = ${config.myEnv.mail.dovecot.ldap.base}
- query_filter = ${config.myEnv.mail.dovecot.ldap.postfix_mailbox_filter}
- bind_dn = ${config.myEnv.mail.dovecot.ldap.dn}
- bind_pw = ${config.myEnv.mail.dovecot.ldap.password}
- result_attribute = immaePostfixAddress
- result_format = dummy
- version = 3
- '';
- };
- "postfix/sympa_mailbox_maps" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- hosts = ${config.myEnv.mail.sympa.postgresql.host}
- user = ${config.myEnv.mail.sympa.postgresql.user}
- password = ${config.myEnv.mail.sympa.postgresql.password}
- dbname = ${config.myEnv.mail.sympa.postgresql.database}
- query = SELECT DISTINCT 1 FROM list_table WHERE '%s' IN (
- CONCAT(name_list, '@', robot_list),
- CONCAT(name_list, '-request@', robot_list),
- CONCAT(name_list, '-editor@', robot_list),
- CONCAT(name_list, '-unsubscribe@', robot_list),
- CONCAT(name_list, '-owner@', robot_list),
- CONCAT('sympa-request@', robot_list),
- CONCAT('sympa-owner@', robot_list),
- CONCAT('sympa@', robot_list),
- CONCAT('listmaster@', robot_list),
- CONCAT('bounce@', robot_list),
- CONCAT('abuse-feedback-report@', robot_list)
- )
- '';
- };
- "postfix/ldap_ejabberd_users_immae_fr" = {
- user = config.services.postfix.user;
- group = config.services.postfix.group;
- permissions = "0440";
- text = ''
- server_host = ldaps://${config.myEnv.jabber.ldap.host}:636
- search_base = ${config.myEnv.jabber.ldap.base}
- query_filter = ${config.myEnv.jabber.postfix_user_filter}
- domain = immae.fr
- bind_dn = ${config.myEnv.jabber.ldap.dn}
- bind_pw = ${config.myEnv.jabber.ldap.password}
- result_attribute = immaeXmppUid
- result_format = ejabberd@localhost
- version = 3
- '';
- };
- };
-
- networking.firewall.allowedTCPPorts = [ 25 ];
-
- users.users."${config.services.postfix.user}".extraGroups = [ "keys" ];
- services.filesWatcher.postfix = {
- restart = true;
- paths = [
- config.secrets.fullPaths."postfix/mysql_alias_maps"
- config.secrets.fullPaths."postfix/sympa_mailbox_maps"
- config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"
- config.secrets.fullPaths."postfix/ldap_mailboxes"
- ];
- };
- services.postfix = {
- mapFiles = let
- recipient_maps = let
- name = n: i: "relay_${n}_${toString i}";
- pair = n: i: m: lib.attrsets.nameValuePair (name n i) (
- if m.type == "hash"
- then pkgs.writeText (name n i) m.content
- else null
- );
- pairs = n: v: lib.imap1 (i: m: pair n i m) v.recipient_maps;
- in lib.attrsets.filterAttrs (k: v: v != null) (
- lib.attrsets.listToAttrs (lib.flatten (
- lib.attrsets.mapAttrsToList pairs config.myEnv.mail.postfix.backup_domains
- ))
- );
- relay_restrictions = lib.attrsets.filterAttrs (k: v: v != null) (
- lib.attrsets.mapAttrs' (n: v:
- lib.attrsets.nameValuePair "recipient_access_${n}" (
- if lib.attrsets.hasAttr "relay_restrictions" v
- then pkgs.writeText "recipient_access_${n}" v.relay_restrictions
- else null
- )
- ) config.myEnv.mail.postfix.backup_domains
- );
- virtual_map = {
- virtual = let
- cfg = config.myEnv.monitoring.email_check.eldiron;
- address = "${cfg.mail_address}@${cfg.mail_domain}";
- in pkgs.writeText "postfix-virtual" (
- builtins.concatStringsSep "\n" (
- ["${address} 1"] ++
- lib.attrsets.mapAttrsToList (
- n: v: lib.optionalString v.external ''
- script_${n}@mail.immae.eu 1
- ''
- ) config.myEnv.mail.scripts
- )
- );
- };
- in
- recipient_maps // relay_restrictions // virtual_map;
- config = {
- ### postfix module overrides
- readme_directory = "${pkgs.postfix}/share/postfix/doc";
- smtp_tls_CAfile = lib.mkForce "";
- smtp_tls_cert_file = lib.mkForce "";
- smtp_tls_key_file = lib.mkForce "";
-
- message_size_limit = "1073741824"; # Don't put 0 here, it's not equivalent to "unlimited"
- mailbox_size_limit = "1073741825"; # Workaround, local delivered mails should all go through scripts
- alias_database = "\$alias_maps";
-
- ### Relay domains
- relay_domains = let
- backups = lib.flatten (lib.attrsets.mapAttrsToList (n: v: v.domains or []) config.myEnv.mail.postfix.backup_domains);
- virtual_domains = config.myEnv.mail.postfix.additional_mailbox_domains
- ++ lib.remove null (lib.flatten (map
- (zone: map
- (e: if e.receive
- then "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}"
- else null
- )
- (zone.withEmail or [])
- )
- config.myEnv.dns.masterZones
- ));
- in
- backups ++ virtual_domains;
- relay_recipient_maps = let
- backup_recipients = lib.flatten (lib.attrsets.mapAttrsToList (n: v:
- lib.imap1 (i: m: "${m.type}:/etc/postfix/relay_${n}_${toString i}") v.recipient_maps
- ) config.myEnv.mail.postfix.backup_domains);
- virtual_alias_maps = [
- "hash:/etc/postfix/virtual"
- "mysql:${config.secrets.fullPaths."postfix/mysql_alias_maps"}"
- "ldap:${config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"}"
- ];
- virtual_mailbox_maps = [
- "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}"
- "pgsql:${config.secrets.fullPaths."postfix/sympa_mailbox_maps"}"
- ];
- in
- backup_recipients ++ virtual_alias_maps ++ virtual_mailbox_maps;
- smtpd_relay_restrictions = [
- "defer_unauth_destination"
- ] ++ lib.flatten (lib.attrsets.mapAttrsToList (n: v:
- if lib.attrsets.hasAttr "relay_restrictions" v
- then [ "check_recipient_access hash:/etc/postfix/recipient_access_${n}" ]
- else []
- ) config.myEnv.mail.postfix.backup_domains);
-
- ### Additional smtpd configuration
- smtpd_tls_received_header = "yes";
- smtpd_tls_loglevel = "1";
-
- ### Email sending configuration
- smtp_tls_security_level = "may";
- smtp_tls_loglevel = "1";
-
- ### Force ip bind for smtp
- smtp_bind_address = config.myEnv.servers."${name}".ips.main.ip4;
- smtp_bind_address6 = builtins.head config.myEnv.servers."${name}".ips.main.ip6;
-
- smtpd_milters = [
- "unix:${config.myServices.mail.milters.sockets.opendkim}"
- "unix:${config.myServices.mail.milters.sockets.openarc}"
- "unix:${config.myServices.mail.milters.sockets.opendmarc}"
- ];
- };
- enable = true;
- enableSmtp = true;
- enableSubmission = false;
- destination = ["localhost"];
- # This needs to reverse DNS
- hostname = config.hostEnv.fqdn;
- setSendmail = false;
- sslCert = "/var/lib/acme/mail/fullchain.pem";
- sslKey = "/var/lib/acme/mail/key.pem";
- recipientDelimiter = "+";
- };
- };
-}
-
diff --git a/modules/private/mail/rspamd.nix b/modules/private/mail/rspamd.nix
deleted file mode 100644
index 05f1300..0000000
--- a/modules/private/mail/rspamd.nix
+++ /dev/null
@@ -1,87 +0,0 @@
-{ lib, pkgs, config, ... }:
-{
- options.myServices.mail.rspamd.sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- worker-controller = "/run/rspamd/worker-controller.sock";
- };
- readOnly = true;
- description = ''
- rspamd sockets
- '';
- };
- config = lib.mkIf config.myServices.mail.enable {
- services.cron.systemCronJobs = let
- cron_script = pkgs.runCommand "cron_script" {
- buildInputs = [ pkgs.makeWrapper ];
- } ''
- mkdir -p $out
- cp ${./scan_reported_mails} $out/scan_reported_mails
- patchShebangs $out
- for i in $out/*; do
- wrapProgram "$i" --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils pkgs.rspamd pkgs.flock ]}
- done
- '';
- in
- [ "*/20 * * * * vhost ${cron_script}/scan_reported_mails" ];
-
- systemd.services.rspamd.serviceConfig.Slice = "mail.slice";
- services.rspamd = {
- enable = true;
- debug = false;
- overrides = {
- "actions.conf".text = ''
- reject = null;
- add_header = 6;
- greylist = null;
- '';
- "milter_headers.conf".text = ''
- extended_spam_headers = true;
- '';
- };
- locals = {
- "redis.conf".text = ''
- servers = "${config.myEnv.mail.rspamd.redis.socket}";
- db = "${config.myEnv.mail.rspamd.redis.db}";
- '';
- "classifier-bayes.conf".text = ''
- users_enabled = true;
- backend = "redis";
- servers = "${config.myEnv.mail.rspamd.redis.socket}";
- database = "${config.myEnv.mail.rspamd.redis.db}";
- autolearn = true;
- cache {
- backend = "redis";
- }
- new_schema = true;
- statfile {
- BAYES_HAM {
- spam = false;
- }
- BAYES_SPAM {
- spam = true;
- }
- }
- '';
- };
- workers = {
- controller = {
- extraConfig = ''
- enable_password = "${config.myEnv.mail.rspamd.write_password_hashed}";
- password = "${config.myEnv.mail.rspamd.read_password_hashed}";
- '';
- bindSockets = [ {
- socket = config.myServices.mail.rspamd.sockets.worker-controller;
- mode = "0660";
- owner = config.services.rspamd.user;
- group = "vhost";
- } ];
- };
- };
- postfix = {
- enable = true;
- config = {};
- };
- };
- };
-}
diff --git a/modules/private/mail/scan_reported_mails b/modules/private/mail/scan_reported_mails
deleted file mode 100755
index fe9f4d6..0000000
--- a/modules/private/mail/scan_reported_mails
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-( flock -n 9 || exit 1
-shopt -s nullglob
-for spool in /var/lib/vhost/.rspamd/*/pending; do
- rspamd_folder=$(dirname $spool)
- mail_user=$(basename $rspamd_folder)
- mv $rspamd_folder/pending $rspamd_folder/processing
-
- for mtype in ham spam; do
- if [ -d $rspamd_folder/processing/$mtype ]; then
- output="$(rspamc -h /run/rspamd/worker-controller.sock -c bayes -d $mail_user learn_$mtype $rspamd_folder/processing/$mtype/*)"
- echo "[$mtype: $mail_user]" ${output} >> /var/lib/vhost/.rspamd/rspamd.log
- mkdir -p $rspamd_folder/processed/$mtype
- cp $rspamd_folder/processing/$mtype/* $rspamd_folder/processed/$mtype/
- fi
- done
-
- rm -rf $rspamd_folder/processing
-done
-) 9>/var/lib/vhost/scan_reported_mails.lock
diff --git a/modules/private/mail/sieve_bin/imapsieve_copy b/modules/private/mail/sieve_bin/imapsieve_copy
deleted file mode 100755
index 2ca1f23..0000000
--- a/modules/private/mail/sieve_bin/imapsieve_copy
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-# Inspired from https://docs.iredmail.org/dovecot.imapsieve.html
-
-MSG_TYPE="$1"
-OUTPUT_DIR="/var/lib/vhost/.rspamd/${USER}/pending/${MSG_TYPE}"
-FILE="${OUTPUT_DIR}/$(date +%Y%m%d%H%M%S)-${RANDOM}${RANDOM}.eml"
-mkdir -p "${OUTPUT_DIR}"
-cat > ${FILE} < /dev/stdin
diff --git a/modules/private/mail/sieve_scripts/backup.sieve b/modules/private/mail/sieve_scripts/backup.sieve
deleted file mode 100644
index 3014c0a..0000000
--- a/modules/private/mail/sieve_scripts/backup.sieve
+++ /dev/null
@@ -1,7 +0,0 @@
-# vim: filetype=sieve
-require ["copy","mailbox","fileinto","regex"];
-if header :is "X-Spam" "Yes" {
- fileinto :create :copy "Backup/Spam";
-} else {
- fileinto :create :copy "Backup/Ham";
-}
diff --git a/modules/private/mail/sieve_scripts/report_ham.sieve b/modules/private/mail/sieve_scripts/report_ham.sieve
deleted file mode 100644
index f9b8481..0000000
--- a/modules/private/mail/sieve_scripts/report_ham.sieve
+++ /dev/null
@@ -1,11 +0,0 @@
-require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
-
-if environment :matches "imap.mailbox" "*" {
- set "mailbox" "${1}";
-}
-
-if string "${mailbox}" "Trash" {
- stop;
-}
-
-pipe :copy "imapsieve_copy" [ "ham" ];
diff --git a/modules/private/mail/sieve_scripts/report_spam.sieve b/modules/private/mail/sieve_scripts/report_spam.sieve
deleted file mode 100644
index 9a1f794..0000000
--- a/modules/private/mail/sieve_scripts/report_spam.sieve
+++ /dev/null
@@ -1,3 +0,0 @@
-require ["vnd.dovecot.pipe", "copy", "imapsieve" ];
-
-pipe :copy "imapsieve_copy" [ "spam" ];
diff --git a/modules/private/mail/sympa.nix b/modules/private/mail/sympa.nix
deleted file mode 100644
index 0626ac0..0000000
--- a/modules/private/mail/sympa.nix
+++ /dev/null
@@ -1,213 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- domain = "lists.immae.eu";
- sympaConfig = config.myEnv.mail.sympa;
-in
-{
- config = lib.mkIf config.myServices.mail.enable {
- myServices.databases.postgresql.authorizedHosts = {
- backup-2 = [
- {
- username = "sympa";
- database = "sympa";
- ip4 = [config.myEnv.servers.backup-2.ips.main.ip4];
- ip6 = config.myEnv.servers.backup-2.ips.main.ip6;
- }
- ];
- };
- services.websites.env.tools.vhostConfs.mail = {
- extraConfig = lib.mkAfter [
- ''
- Alias /static-sympa/ /var/lib/sympa/static_content/
-
- Require all granted
- AllowOverride none
-
-
- SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://"
- Require all granted
-
- ''
- ];
- };
-
- secrets.keys = {
- "sympa/db_password" = {
- permissions = "0400";
- group = "sympa";
- user = "sympa";
- text = sympaConfig.postgresql.password;
- };
- }
- // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/data_sources/${n}.incl" {
- permissions = "0400"; group = "sympa"; user = "sympa"; text = v;
- }) sympaConfig.data_sources
- // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/scenari/${n}" {
- permissions = "0400"; group = "sympa"; user = "sympa"; text = v;
- }) sympaConfig.scenari;
- users.users.sympa.extraGroups = [ "keys" ];
- systemd.slices.mail-sympa = {
- description = "Sympa slice";
- };
-
- systemd.services.sympa.serviceConfig.SupplementaryGroups = [ "keys" ];
- systemd.services.sympa-archive.serviceConfig.SupplementaryGroups = [ "keys" ];
- systemd.services.sympa-bounce.serviceConfig.SupplementaryGroups = [ "keys" ];
- systemd.services.sympa-bulk.serviceConfig.SupplementaryGroups = [ "keys" ];
- systemd.services.sympa-task.serviceConfig.SupplementaryGroups = [ "keys" ];
-
- systemd.services.sympa.serviceConfig.Slice = "mail-sympa.slice";
- systemd.services.sympa-archive.serviceConfig.Slice = "mail-sympa.slice";
- systemd.services.sympa-bounce.serviceConfig.Slice = "mail-sympa.slice";
- systemd.services.sympa-bulk.serviceConfig.Slice = "mail-sympa.slice";
- systemd.services.sympa-task.serviceConfig.Slice = "mail-sympa.slice";
-
- # https://github.com/NixOS/nixpkgs/pull/84202
- systemd.services.sympa.serviceConfig.ProtectKernelModules = lib.mkForce false;
- systemd.services.sympa-archive.serviceConfig.ProtectKernelModules = lib.mkForce false;
- systemd.services.sympa-bounce.serviceConfig.ProtectKernelModules = lib.mkForce false;
- systemd.services.sympa-bulk.serviceConfig.ProtectKernelModules = lib.mkForce false;
- systemd.services.sympa-task.serviceConfig.ProtectKernelModules = lib.mkForce false;
- systemd.services.sympa.serviceConfig.ProtectKernelTunables = lib.mkForce false;
- systemd.services.sympa-archive.serviceConfig.ProtectKernelTunables = lib.mkForce false;
- systemd.services.sympa-bounce.serviceConfig.ProtectKernelTunables = lib.mkForce false;
- systemd.services.sympa-bulk.serviceConfig.ProtectKernelTunables = lib.mkForce false;
- systemd.services.sympa-task.serviceConfig.ProtectKernelTunables = lib.mkForce false;
-
- systemd.services.wwsympa = {
- wantedBy = [ "multi-user.target" ];
- after = [ "sympa.service" ];
- serviceConfig = {
- Slice = "mail-sympa.slice";
- Type = "forking";
- PIDFile = "/run/sympa/wwsympa.pid";
- Restart = "always";
- ExecStart = ''${pkgs.spawn_fcgi}/bin/spawn-fcgi \
- -u sympa \
- -g sympa \
- -U wwwrun \
- -M 0600 \
- -F 2 \
- -P /run/sympa/wwsympa.pid \
- -s /run/sympa/wwsympa.socket \
- -- ${pkgs.sympa}/lib/sympa/cgi/wwsympa.fcgi
- '';
- StateDirectory = "sympa";
- ProtectHome = true;
- ProtectSystem = "full";
- ProtectControlGroups = true;
- };
- };
-
- services.postfix = {
- mapFiles = {
- # Update relay list when changing one of those
- sympa_virtual = pkgs.writeText "virtual.sympa" ''
- sympa-request@${domain} postmaster@immae.eu
- sympa-owner@${domain} postmaster@immae.eu
-
- sympa-request@cip-ca.fr postmaster@immae.eu
- sympa-owner@cip-ca.fr postmaster@immae.eu
- '';
- sympa_transport = pkgs.writeText "transport.sympa" ''
- ${domain} error:User unknown in recipient table
- sympa@${domain} sympa:sympa@${domain}
- listmaster@${domain} sympa:listmaster@${domain}
- bounce@${domain} sympabounce:sympa@${domain}
- abuse-feedback-report@${domain} sympabounce:sympa@${domain}
-
- sympa@cip-ca.fr sympa:sympa@cip-ca.fr
- listmaster@cip-ca.fr sympa:listmaster@cip-ca.fr
- bounce@cip-ca.fr sympabounce:sympa@cip-ca.fr
- abuse-feedback-report@cip-ca.fr sympabounce:sympa@cip-ca.fr
- '';
- };
- config = {
- transport_maps = lib.mkAfter [
- "hash:/etc/postfix/sympa_transport"
- "hash:/var/lib/sympa/sympa_transport"
- ];
- virtual_alias_maps = lib.mkAfter [
- "hash:/etc/postfix/sympa_virtual"
- ];
- virtual_mailbox_maps = lib.mkAfter [
- "hash:/etc/postfix/sympa_transport"
- "hash:/var/lib/sympa/sympa_transport"
- "hash:/etc/postfix/sympa_virtual"
- ];
- };
- masterConfig = {
- sympa = {
- type = "unix";
- privileged = true;
- chroot = false;
- command = "pipe";
- args = [
- "flags=hqRu"
- "user=sympa"
- "argv=${pkgs.sympa}/libexec/queue"
- "\${nexthop}"
- ];
- };
- sympabounce = {
- type = "unix";
- privileged = true;
- chroot = false;
- command = "pipe";
- args = [
- "flags=hqRu"
- "user=sympa"
- "argv=${pkgs.sympa}/libexec/bouncequeue"
- "\${nexthop}"
- ];
- };
- };
- };
- services.sympa = {
- enable = true;
- listMasters = sympaConfig.listmasters;
- mainDomain = domain;
- domains = {
- "${domain}" = {
- webHost = "mail.immae.eu";
- webLocation = "/sympa";
- };
- "cip-ca.fr" = {
- webHost = "mail.cip-ca.fr";
- webLocation = "/sympa";
- };
- };
-
- database = {
- type = "PostgreSQL";
- user = sympaConfig.postgresql.user;
- host = sympaConfig.postgresql.socket;
- name = sympaConfig.postgresql.database;
- passwordFile = config.secrets.fullPaths."sympa/db_password";
- createLocally = false;
- };
- settings = {
- sendmail = "/run/wrappers/bin/sendmail";
- log_smtp = "on";
- sendmail_aliases = "/var/lib/sympa/sympa_transport";
- aliases_program = "${pkgs.postfix}/bin/postmap";
- };
- settingsFile = {
- "virtual.sympa".enable = false;
- "transport.sympa".enable = false;
- } // lib.mapAttrs' (n: v: lib.nameValuePair
- "etc/${domain}/data_sources/${n}.incl"
- { source = config.secrets.fullPaths."sympa/data_sources/${n}.incl"; }) sympaConfig.data_sources
- // lib.mapAttrs' (n: v: lib.nameValuePair
- "etc/${domain}/scenari/${n}"
- { source = config.secrets.fullPaths."sympa/scenari/${n}"; }) sympaConfig.scenari;
- web = {
- server = "none";
- };
-
- mta = {
- type = "none";
- };
- };
- };
-}
diff --git a/modules/private/mail/verify_from.py b/modules/private/mail/verify_from.py
deleted file mode 100755
index b75001e..0000000
--- a/modules/private/mail/verify_from.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env python3
-import Milter
-import argparse
-from email.header import decode_header
-from email.utils import parseaddr
-
-class CheckMilter(Milter.Base):
- def __init__(self):
- self.envelope_from = None
- self.header_from = None
-
- @Milter.noreply
- def connect(self, IPname, family, hostaddr):
- return Milter.CONTINUE
-
- def hello(self, heloname):
- return Milter.CONTINUE
-
- def envfrom(self, mailfrom, *args):
- self.envelope_from = parseaddr(mailfrom)[1]
- return Milter.CONTINUE
-
- @Milter.noreply
- def envrcpt(self, to, *str):
- return Milter.CONTINUE
-
- @Milter.noreply
- def header(self, name, hval):
- if name.lower() == "from":
- self.header_from = parseaddr(decode_header(hval)[-1][0])[1]
- return Milter.CONTINUE
-
- def eoh(self):
- if self.header_from is not None and self.header_from != "" and self.header_from != self.envelope_from:
- self.setreply("553", xcode="5.7.1", msg="<%s>: From header rejected: not matching envelope From %s"
- % (self.header_from, self.envelope_from))
- return Milter.REJECT
-
- return Milter.CONTINUE
-
- @Milter.noreply
- def body(self, chunk):
- return Milter.CONTINUE
-
- def eom(self):
- return Milter.ACCEPT
-
- def close(self):
- return Milter.CONTINUE
-
- def abort(self):
- return Milter.CONTINUE
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser()
- parser.add_argument("--socket", "-s", type=str, help="socket to listen to")
- config = parser.parse_args()
-
- Milter.factory = CheckMilter
- Milter.runmilter("check_from", config.socket, timeout=300)
diff --git a/modules/private/monitoring/default.nix b/modules/private/monitoring/default.nix
deleted file mode 100644
index 0783c2f..0000000
--- a/modules/private/monitoring/default.nix
+++ /dev/null
@@ -1,249 +0,0 @@
-{ config, pkgs, lib, name, nodes, ... }:
-let
- cfg = config.myServices.monitoring;
- activatedPlugins = [ "memory" "command" "bandwidth" ]
- ++ (if cfg.master then (masterObjects.activatedPlugins or []) else [])
- ++ (if cfg.master then (lib.flatten (map (v: v.activatedPlugins or []) otherObjects)) else [])
- ++ (hostObjects.activatedPlugins or [])
- ++ (if cfg.master then ["notify-primary"] else ["notify-secondary"]);
- allPluginsConfig = import ./myplugins.nix {
- inherit pkgs lib config;
- sudo = "/run/wrappers/bin/sudo";
- };
- mypluginsConfig = lib.getAttrs activatedPlugins allPluginsConfig;
- myplugins = let
- mypluginsChunk = builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: v.chunk or "") mypluginsConfig);
- in pkgs.runCommand "buildplugins" {
- buildInputs = [ pkgs.makeWrapper pkgs.perl ];
- } ''
- mkdir $out
- ${mypluginsChunk}
- '';
- toObjects = pkgs.callPackage ./to_objects.nix {};
- commonConfig = {
- dilion = {
- processWarn = "250"; processAlert = "400";
- loadWarn = "1.0"; loadAlert = "1.2";
- interface = "eth0";
- };
- eldiron = {
- processWarn = "550"; processAlert = "650";
- loadWarn = "1.0"; loadAlert = "1.2";
- interface = "eth0";
- };
- backup-2 = {
- processWarn = "60"; processAlert = "70";
- loadWarn = "1.0"; loadAlert = "2.0";
- interface = "ens3";
- };
- monitoring-1 = {
- processWarn = "50"; processAlert = "60";
- loadWarn = "4.0"; loadAlert = "6.0";
- load15Warn = "1.0"; load15Alert = "2.0";
- interface = "ens3";
- };
- quatresaisons = {
- processWarn = "250"; processAlert = "400";
- loadWarn = "1.0"; loadAlert = "1.2";
- interface = "eth0";
- };
- };
- externalObjects = lib.genAttrs [ "tiboqorl-fr" ]
- (n: pkgs.callPackage (./. + "/objects_" + n + ".nix") { inherit emailCheck; });
- masterPassiveObjects = let
- passiveNodes = lib.attrsets.filterAttrs (n: _: builtins.elem n ["backup-2" "eldiron" "quatresaisons" "dilion"]) nodes;
- toPassiveServices = map (s: s.passiveInfo.filter s // s.passiveInfo);
- passiveServices = lib.flatten (lib.attrsets.mapAttrsToList
- (_: n: toPassiveServices n.config.myServices.monitoring.services)
- passiveNodes
- ) ++ lib.flatten (lib.attrsets.mapAttrsToList
- (_: n: toPassiveServices n.service)
- externalObjects);
- in {
- service = passiveServices;
- host = lib.lists.foldr
- (a: b: a//b)
- {}
- (lib.attrsets.mapAttrsToList (_: h: h.config.myServices.monitoring.hosts) passiveNodes
- ++ lib.attrsets.mapAttrsToList (_: n: n.host) externalObjects);
- };
- emailCheck = host: hostFQDN: let
- allCfg = config.myEnv.monitoring.email_check;
- cfg = allCfg."${host}";
- reverseTargets = builtins.attrNames (lib.attrsets.filterAttrs (k: v: builtins.elem host v.targets) allCfg);
- to_email = cfg': host':
- let sep = if lib.strings.hasInfix "+" cfg'.mail_address then "_" else "+";
- in "${cfg'.mail_address}${sep}${host'}@${cfg'.mail_domain}";
- mails_to_send = builtins.concatStringsSep "," (map (n: to_email allCfg."${n}" host) cfg.targets);
- mails_to_receive = builtins.concatStringsSep "," (map (n: "${to_email cfg n}:${n}") reverseTargets);
- command = if cfg.local
- then
- [ "check_emails_local" "/var/lib/naemon/checks/email" mails_to_send mails_to_receive ]
- else
- [ "check_emails" cfg.login cfg.port mails_to_send mails_to_receive ];
- in
- {
- service_description = "${hostFQDN} email service is active";
- use = "mail-service";
- host_name = hostFQDN;
- servicegroups = "webstatus-email";
- check_command = command;
- };
- otherObjects = map
- (n: (pkgs.callPackage (./. + "/objects_" + n + ".nix") { inherit emailCheck; }))
- [ "ulminfo-fr" "phare" "eban" ];
- masterObjects = pkgs.callPackage ./objects_master.nix { inherit config; };
- commonObjects = pkgs.callPackage ./objects_common.nix ({
- master = cfg.master;
- hostFQDN = config.hostEnv.fqdn;
- hostName = name;
- inherit mypluginsConfig;
- } // builtins.getAttr name commonConfig);
- hostObjects =
- let
- specific_file = ./. + "/objects_" + name + ".nix";
- in
- lib.attrsets.optionalAttrs
- (builtins.pathExists specific_file)
- (pkgs.callPackage specific_file {
- inherit config nodes emailCheck;
- hostFQDN = config.hostEnv.fqdn;
- hostName = name;
- });
- objectsFiles = lib.mapAttrs' (name: value: lib.nameValuePair
- "=/${name}/objects.conf" { alias = pkgs.writeText "objects.conf" (toObjects value); }
- ) externalObjects;
-in
-{
- options = {
- myServices.monitoring = {
- enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable monitoring.
- '';
- };
- master = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- This instance is the master instance
- '';
- };
- hosts = lib.mkOption {
- readOnly = true;
- description = "Hosts list for this host";
- default = (commonObjects.host or {}) // (hostObjects.host or {});
- };
- services = lib.mkOption {
- readOnly = true;
- description = "Services list for this host";
- default = commonObjects.service ++ hostObjects.service;
- };
- };
- };
-
- config = lib.mkIf cfg.enable {
- services.nginx = lib.mkIf config.myServices.status.enable {
- virtualHosts."status.immae.eu".locations = objectsFiles // {
- "=/common/immae.cfg" = {
- alias = pkgs.writeText "immae.cfg" ''
- # put me for instance in /etc/naemon/module-conf.d/immae.cfg
- # Make sure that you have include_dir=module-conf.d in
- # naemon.cfg
- log_initial_states=1
- date_format=iso8601
- admin_email=${config.myEnv.monitoring.email}
- obsess_over_services=1
- ocsp_command=notify-master
- '';
- };
- "=/common/resource.cfg" = {
- alias = pkgs.writeText "resource.cfg" ''
- # Resource.cfg file
- # Replace this with path to monitoring plugins
- $USER1$=@@COMMON_PLUGINS@@
- # Replace this with a path to scripts from
- # https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/tree/modules/private/monitoring/plugins
- $USER2$=@@IMMAE_PLUGINS@@
- $USER200$=https://status.immae.eu/
- $USER201$=@@TOKEN@@
- '';
- };
- };
- };
-
- security.sudo.extraRules = let
- pluginsSudo = lib.lists.remove null (lib.attrsets.mapAttrsToList (k: v:
- if (v ? sudo)
- then ({ users = [ "naemon" ]; } // (v.sudo myplugins))
- else null) mypluginsConfig);
- in [
- {
- commands = [
- { command = "${pkgs.mdadm}/bin/mdadm --monitor --scan -1"; options = [ "NOPASSWD" ]; }
- { command = "${pkgs.postfix}/bin/mailq"; options = [ "NOPASSWD" ]; }
- ];
- users = [ "naemon" ];
- runAs = "root";
- }
- ] ++ pluginsSudo;
- environment.etc."mdadm.conf" = {
- enable = true;
- mode = "0644";
- user = "root";
- text = "MAILADDR ${config.myEnv.monitoring.email}";
- };
-
- secrets.keys = {
- "naemon/id_rsa" = {
- user = "naemon";
- group = "naemon";
- permissions = "0400";
- text = config.myEnv.monitoring.ssh_secret_key;
- };
- } // lib.optionalAttrs cfg.master (
- lib.mapAttrs' (k: v: lib.nameValuePair "${k}_access_key" {
- user = "naemon";
- group = "naemon";
- permissions = "0400";
- text = ''
- export AWS_ACCESS_KEY_ID="${v.accessKeyId}"
- export AWS_SECRET_ACCESS_KEY="${v.secretAccessKey}"
- export BASE_URL="${v.remote "immae-eldiron"}"
- '';
- }) config.myEnv.backup.remotes
- );
- # needed since extraResource is not in the closure
- systemd.services.naemon.path = [ myplugins ];
- services.naemon = {
- enable = true;
- extraConfig = ''
- use_syslog=1
- log_initial_states=1
- date_format=iso8601
- admin_email=${config.myEnv.monitoring.email}
- '' + lib.optionalString (!cfg.master) ''
- obsess_over_services=1
- ocsp_command=notify-master
- '' + lib.optionalString (cfg.master) ''
- broker_module=${pkgs.naemon-livestatus}/lib/naemon-livestatus/livestatus.so ${config.services.naemon.runDir}/live
- broker_module=${pkgs.status_engine.module}/lib/status-engine/naemon/statusengine-${pkgs.naemon.status_engine_version}.o use_service_perfdata=1 use_process_data=0 use_system_command_data=0 use_external_command_data=0 use_flapping_data=0 use_program_status_data=0 use_notification_data=0 use_contact_status_data=0 use_contact_notification_data=0 use_event_handler_data=0 use_object_data=0
- '';
- extraResource = let
- resources = [hostObjects.resources or {}] ++ (lib.mapAttrsToList (k: v: v.resources or {}) mypluginsConfig);
- joined = lib.zipAttrsWith (n: v: if builtins.length (lib.unique v) == 1 then builtins.head v else abort "Non-unique resources names") resources;
- joinedStr = builtins.concatStringsSep "\n" (lib.mapAttrsToList (k: v: "$" + "${k}$=${v}") joined);
- in ''
- $USER2$=${myplugins}
- ${joinedStr}
- '';
- objectDefs = toObjects commonObjects
- + toObjects hostObjects
- + lib.optionalString cfg.master (toObjects masterObjects)
- + lib.optionalString cfg.master (toObjects masterPassiveObjects)
- + lib.optionalString cfg.master (builtins.concatStringsSep "\n" (map toObjects otherObjects));
- };
- };
-}
diff --git a/modules/private/monitoring/myplugins.nix b/modules/private/monitoring/myplugins.nix
deleted file mode 100644
index e59ddc4..0000000
--- a/modules/private/monitoring/myplugins.nix
+++ /dev/null
@@ -1,389 +0,0 @@
-{ sudo, pkgs, lib, config }:
-let
- cfg = config.myServices.monitoring;
-in
-{
- notify-secondary = {
- resources = {
- USER200 = config.myEnv.monitoring.status_url;
- USER201 = config.myEnv.monitoring.status_token;
- };
- commands = {
- notify-master = "$USER2$/send_nrdp.sh -u \"$USER200$\" -t \"$USER201$\" -H \"$HOSTADDRESS$\" -s \"$SERVICEDESC$\" -S \"$SERVICESTATEID$\" -o \"$SERVICEOUTPUT$ | $SERVICEPERFDATA$\"";
- };
- chunk = ''
- cp ${./plugins}/send_nrdp.sh $out
- patchShebangs $out/send_nrdp.sh
- wrapProgram $out/send_nrdp.sh --prefix PATH : ${lib.makeBinPath [
- pkgs.curl pkgs.jq
- ]}
- '';
- };
- notify-primary = {
- resources = {
- USER206 = config.myEnv.monitoring.slack_channel;
- USER207 = config.myEnv.monitoring.slack_url;
- USER210 = config.myEnv.monitoring.eban.user;
- USER211 = config.myEnv.monitoring.eban.password;
- };
- commands = {
- # $OVE is to force naemon to run via shell instead of execve which fails here
- notify-host-by-email = "ADMINEMAIL=\"$ADMINEMAIL$\" SERVICENOTIFICATIONID=\"$SERVICENOTIFICATIONID$\" HOSTSTATE=\"$HOSTSTATE$\" HOSTOUTPUT=\"$HOSTOUTPUT$\" $USER2$/notify_by_email host \"$NOTIFICATIONTYPE$\" \"$HOSTALIAS$\" \"$LONGDATETIME$\" \"$CONTACTEMAIL$\" $OVE";
- # $OVE is to force naemon to run via shell instead of execve which fails here
- notify-service-by-email = "ADMINEMAIL=\"$ADMINEMAIL$\" SERVICENOTIFICATIONID=\"$SERVICENOTIFICATIONID$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_email service \"$NOTIFICATIONTYPE$\" \"$HOSTALIAS$\" \"$LONGDATETIME$\" \"$CONTACTEMAIL$\" $OVE";
- notify-by-slack = "HOST=\"$HOSTALIAS$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_slack \"$ARG1$\" \"$ARG2$\"";
- notify-host-eban-url = "STATUS_NAME=\"Server\" USER=\"$USER210$\" PASSWORD=\"$USER211$\" HOSTSTATE=\"$HOSTSTATE$\" $USER2$/notify_eban_url";
- notify-service-eban-url = "STATUS_NAME=\"$_SERVICEWEBSTATUS_NAME$\" USER=\"$USER210$\" PASSWORD=\"$USER211$\" SERVICESTATE=\"$SERVICESTATE$\" $USER2$/notify_eban_url";
- };
- chunk = ''
- cp ${./plugins}/{notify_by_email,notify_by_slack,notify_eban_url} $out
- patchShebangs $out/{notify_by_email,notify_by_slack,notify_eban_url}
- wrapProgram $out/notify_by_email --prefix PATH : ${lib.makeBinPath [
- pkgs.mailutils
- ]}
- wrapProgram $out/notify_by_slack --prefix PATH : ${lib.makeBinPath [
- pkgs.curl pkgs.jq
- ]}
- wrapProgram $out/notify_eban_url --prefix PATH : ${lib.makeBinPath [
- pkgs.curl
- ]}
- '';
- };
- bandwidth = {
- commands = {
- check_local_bandwidth = "$USER2$/check_bandwidth -i=$ARG1$ -w $ARG2$ -c $ARG3$";
- };
- chunk = ''
- cp ${./plugins}/check_bandwidth $out/
- patchShebangs $out/check_bandwidth
- wrapProgram $out/check_bandwidth --prefix PATH : ${lib.makeBinPath [
- pkgs.iproute pkgs.bc
- ]}
- '';
- };
- command = {
- commands = {
- check_command_match = "$USER2$/check_command -c \"$ARG1$\" -C \"$ARG2$\" $ARG3$";
- check_command_output = "$USER2$/check_command -c \"$ARG1$\" -s 0 -o \"$ARG2$\" $ARG3$";
- check_command_status = "$USER2$/check_command -c \"$ARG1$\" -s \"$ARG2$\" $ARG3$";
- };
- chunk = ''
- cp ${./plugins}/check_command $out/
- patchShebangs $out/check_command
- wrapProgram $out/check_command --prefix PATH : ${config.security.wrapperDir}
- '';
- };
- dns = {
- commands = {
- check_dns = "$USER1$/check_dns -H $ARG1$ -s $HOSTADDRESS$ $ARG2$";
- check_external_dns = "$USER1$/check_dns -H $ARG2$ -s $ARG1$ $ARG3$";
- };
- };
- emails = {
- resources = {
- USER203 = config.secrets.fullPaths."naemon/id_rsa";
- };
- commands = {
- check_emails = "$USER2$/check_emails -H $HOSTADDRESS$ -i $USER203$ -l $ARG1$ -p $ARG2$ -s $ARG3$ -f $ARG4$";
- check_emails_local = "$USER2$/check_emails -H $HOSTADDRESS$ -n $ARG1$ -r $ADMINEMAIL$ -s $ARG2$ -f $ARG3$";
- };
- chunk = let
- send_mails = pkgs.runCommand "send_mails" {
- buildInputs = [ pkgs.makeWrapper ];
- } ''
- mkdir -p $out/bin
- cp ${./send_mails} $out/bin/send_mails
- patchShebangs $out
- wrapProgram $out/bin/send_mails --prefix PATH : ${lib.makeBinPath [
- pkgs.mailutils
- ]}
- '';
- in ''
- cp ${./plugins}/check_emails $out/
- patchShebangs $out/check_emails
- wrapProgram $out/check_emails --prefix PATH : ${lib.makeBinPath [
- pkgs.openssh send_mails
- ]} --prefix PERL5LIB : ${pkgs.perlPackages.makePerlPath [
- pkgs.perlPackages.TimeDate
- ]}
- '';
- };
- eriomem = {
- resources = {
- USER208 = builtins.concatStringsSep "," (map (builtins.concatStringsSep ":") config.myEnv.monitoring.eriomem_keys);
- };
- commands = {
- check_backup_eriomem = "$USER2$/check_eriomem $USER208$";
- check_backup_eriomem_age = "$USER2$/check_backup_eriomem_age $ARG1$";
- };
- chunk = ''
- cp ${./plugins}/check_eriomem $out/
- patchShebangs $out/check_eriomem
- wrapProgram $out/check_eriomem --prefix PATH : ${lib.makeBinPath [
- pkgs.s3cmd pkgs.python3
- ]}
- cp ${./plugins}/check_backup_age $out/check_backup_eriomem_age
- patchShebangs $out/check_backup_eriomem_age
- wrapProgram $out/check_backup_eriomem_age --prefix PATH : ${lib.makeBinPath [
- pkgs.duplicity
- ]} --set SECRETS_PATH ${lib.optionalString cfg.master config.secrets.fullPaths."eriomem_access_key"}
- '';
- };
- file_date = {
- commands = {
- check_last_file_date = "${sudo} -u \"$ARG3$\" $USER2$/check_last_file_date \"$ARG1$\" \"$ARG2$\"";
- };
- chunk = ''
- cp ${./plugins}/check_last_file_date $out/
- patchShebangs $out/check_last_file_date
- '';
- sudo = myplugins: {
- commands = [
- { command = "${myplugins}/check_last_file_date /backup2/*"; options = [ "NOPASSWD" ]; }
- ];
- runAs = "ALL";
- };
- };
- ftp = {
- commands = {
- check_ftp_database = "$USER2$/check_ftp_database";
- };
- chunk = ''
- cp ${./plugins}/check_ftp_database $out/
- patchShebangs $out/check_ftp_database
- wrapProgram $out/check_ftp_database --prefix PATH : ${lib.makeBinPath [
- pkgs.lftp
- ]}
- '';
- };
- git = {
- resources = {
- USER203 = config.secrets.fullPaths."naemon/id_rsa";
- };
- commands = {
- check_git = "$USER2$/check_git $USER203$";
- };
- chunk = ''
- cp ${./plugins}/check_git $out/
- patchShebangs $out/check_git
- wrapProgram $out/check_git --prefix PATH : ${lib.makeBinPath [
- pkgs.git pkgs.openssh
- ]}
- '';
- };
- http = {
- resources = {
- USER202 = config.myEnv.monitoring.http_user_password;
- };
- commands = {
- check_http = "$USER1$/check_http --sni -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\"";
- check_https = "$USER1$/check_http --sni --ssl -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\"";
- check_https_auth = "$USER1$/check_http --sni --ssl -a \"$USER202$\" -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\"";
- check_https_certificate = "$USER1$/check_http --sni --ssl -H \"$ARG1$\" -C 21,15";
- check_https_code = "$USER1$/check_http --sni --ssl -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -e \"$ARG3$\" -r \"$ARG4$\"";
- };
- };
- imap = {
- resources = {
- USER204 = config.myEnv.monitoring.imap_login;
- USER205 = config.myEnv.monitoring.imap_password;
- };
- commands = {
- check_imap_connection = "$USER2$/check_imap_connection -u \"$USER204$\" -p \"$USER205$\" -H \"imap.immae.eu:143\"";
- };
- chunk = ''
- cp ${./plugins}/check_imap_connection $out/
- patchShebangs $out/check_imap_connection
- wrapProgram $out/check_imap_connection --prefix PATH : ${lib.makeBinPath [
- pkgs.openssl
- ]}
- '';
- };
- megaraid = let
- megacli = pkgs.megacli.overrideAttrs(old: { meta = old.meta // { license = null; }; });
- in {
- commands = {
- check_megaraid = "$USER2$/check_megaraid_sas --sudo";
- };
- chunk = let
- megaCliPlugin = pkgs.runCommand "megaCliPlugin" {
- plugin = pkgs.fetchurl {
- name = "check_megaraid_sas";
- url = "https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=6381&cf_id=24";
- sha256 = "0yf60p4c0hb4q3fng9fc14qc89bqm0f1sijayzygadaqcl44jx4p";
- };
- } ''
- mkdir $out
- cp $plugin $out/check_megaraid_sas
- chmod +x $out/check_megaraid_sas
- patchShebangs $out
- substituteInPlace $out/check_megaraid_sas --replace /usr/sbin/MegaCli ${megacli}/bin/MegaCli64
- substituteInPlace $out/check_megaraid_sas --replace 'sudo $megacli' '${sudo} $megacli'
- sed -i -e "s/use utils qw(%ERRORS);/my %ERRORS = ('OK' => 0, 'WARNING' => 1, 'CRITICAL' => 2, 'UNKNOWN' => 3);/" $out/check_megaraid_sas
- '';
- in ''
- cp ${megaCliPlugin}/check_megaraid_sas $out/
- patchShebangs $out/check_megaraid_sas
- '';
- sudo = _: {
- commands = [
- { command = "${megacli}/bin/MegaCli64"; options = [ "NOPASSWD" ]; }
- ];
- runAs = "root";
- };
- };
- memory = {
- commands = {
- check_memory = "$USER2$/check_mem.sh -w $ARG1$ -c $ARG2$";
- };
- chunk = ''
- cp ${./plugins}/check_mem.sh $out/
- patchShebangs $out/check_mem.sh
- wrapProgram $out/check_mem.sh --prefix PATH : ${lib.makeBinPath [
- pkgs.gnugrep pkgs.gawk pkgs.procps-ng
- ]}
- '';
- };
- mysql = {
- commands = {
- check_mysql_replication = "${sudo} -u mysql $USER2$/check_mysql_replication \"$ARG1$\" \"$ARG2$\"";
- };
- chunk = ''
- cp ${./plugins}/check_mysql_replication $out/
- patchShebangs $out/check_mysql_replication
- wrapProgram $out/check_mysql_replication --prefix PATH : ${lib.makeBinPath [
- pkgs.gnugrep pkgs.gnused pkgs.coreutils pkgs.mariadb
- ]}
- '';
- sudo = myplugins: {
- commands = [
- { command = "${myplugins}/check_mysql_replication *"; options = [ "NOPASSWD" ]; }
- ];
- runAs = "mysql";
- };
- };
- openldap = {
- commands = {
- check_openldap_replication = "${sudo} -u openldap $USER2$/check_openldap_replication \"$ARG1$\" \"$ARG2$\" \"$ARG3$\" \"$ARG4$\" \"$ARG5$\"";
- };
- chunk = ''
- cp ${./plugins}/check_openldap_replication $out/
- patchShebangs $out/check_openldap_replication
- wrapProgram $out/check_openldap_replication --prefix PATH : ${lib.makeBinPath [
- pkgs.gnugrep pkgs.gnused pkgs.coreutils pkgs.openldap
- ]}
- '';
- sudo = myplugins: {
- commands = [
- { command = "${myplugins}/check_openldap_replication *"; options = [ "NOPASSWD" ]; }
- ];
- runAs = "openldap";
- };
- };
- ovh = {
- resources = {
- USER209 = builtins.concatStringsSep "," [
- config.myEnv.monitoring.ovh_sms.endpoint
- config.myEnv.monitoring.ovh_sms.application_key
- config.myEnv.monitoring.ovh_sms.application_secret
- config.myEnv.monitoring.ovh_sms.consumer_key
- config.myEnv.monitoring.ovh_sms.account
- ];
- };
- commands = {
- check_backup_ovh_age = "$USER2$/check_backup_ovh_age $ARG1$";
- check_ovh_sms = "$USER2$/check_ovh_sms \"$USER209$\"";
- };
- chunk = ''
- cp ${./plugins}/check_backup_age $out/check_backup_ovh_age
- patchShebangs $out/check_backup_ovh_age
- wrapProgram $out/check_backup_ovh_age --prefix PATH : ${lib.makeBinPath [
- pkgs.duplicity
- ]} --set SECRETS_PATH ${lib.optionalString cfg.master config.secrets.fullPaths."ovh_access_key"}
- cp ${./plugins}/check_ovh_sms $out/
- patchShebangs $out/check_ovh_sms
- wrapProgram $out/check_ovh_sms --prefix PATH : ${lib.makeBinPath [
- (pkgs.python3.withPackages (ps: [ps.ovh]))
- ]}
- '';
- };
- postgresql = {
- commands = {
- check_postgresql_replication = "${sudo} -u postgres $USER2$/check_postgres_replication \"$ARG1$\" \"$ARG2$\" \"$ARG3$\"";
- check_postgresql_database_count = "$USER2$/check_postgres_database_count \"$ARG1$\" \"$ARG2$\" \"$ARG3$\"";
- };
- chunk = let
- postgresqlBinary = if config.myServices.databasesReplication.postgresql.enable
- then config.myServices.databasesReplication.postgresql.mainPackage
- else if config.myServices.databases.enable
- then config.myServices.databases.postgresql.package
- else pkgs.postgresql;
- in ''
- cp ${./plugins}/check_postgres_replication $out/
- patchShebangs $out/check_postgres_replication
- wrapProgram $out/check_postgres_replication --prefix PATH : ${lib.makeBinPath [
- postgresqlBinary
- ]}
- cp ${./plugins}/check_postgres_database_count $out/
- patchShebangs $out/check_postgres_database_count
- wrapProgram $out/check_postgres_database_count --prefix PATH : ${lib.makeBinPath [
- postgresqlBinary
- ]}
- '';
-
- sudo = myplugins: {
- commands = [
- { command = "${myplugins}/check_postgres_replication *"; options = [ "NOPASSWD" ]; }
- ];
- runAs = "postgres";
- };
- };
- redis = {
- commands = {
- check_redis_replication = "${sudo} -u redis $USER2$/check_redis_replication \"$ARG1$\"";
- };
- chunk = ''
- cp ${./plugins}/check_redis_replication $out/
- patchShebangs $out/check_redis_replication
- wrapProgram $out/check_redis_replication --prefix PATH : ${lib.makeBinPath [
- pkgs.gnugrep pkgs.coreutils pkgs.redis
- ]}
- '';
- sudo = myplugins: {
- commands = [
- { command = "${myplugins}/check_redis_replication *"; options = [ "NOPASSWD" ]; }
- ];
- runAs = "redis";
- };
- };
- tcp = {
- commands = {
- check_tcp = "$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -e \"$ARG2$\" -Mcrit";
- check_tcp_ssl = "$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -S -D 21,15";
- };
- };
- zfs = {
- commands = {
- check_zfs = "$USER2$/check_zpool.sh -p ALL -w 80 -c 90";
- check_zfs_snapshot = "$USER2$/check_zfs_snapshot -d $ARG1$ -c 18000 -w 14400";
- };
- chunk = let
- zfsPlugin = pkgs.fetchurl {
- url = "https://www.claudiokuenzler.com/monitoring-plugins/check_zpools.sh";
- sha256 = "0p9ms9340in80jkds4kfspw62xnzsv5s7ni9m28kxyd0bnzkbzhf";
- };
- in ''
- cp ${zfsPlugin} $out/check_zpool.sh
- chmod +x $out/check_zpool.sh
- patchShebangs $out/check_zpool.sh
- wrapProgram $out/check_zpool.sh --prefix PATH : ${lib.makeBinPath [
- pkgs.which pkgs.zfs pkgs.gawk
- ]}
- cp ${./plugins}/check_zfs_snapshot $out
- patchShebangs $out/check_zfs_snapshot
- wrapProgram $out/check_zfs_snapshot --prefix PATH : ${lib.makeBinPath [
- pkgs.zfs pkgs.coreutils pkgs.gawk pkgs.gnugrep
- ]}
- '';
- };
-}
diff --git a/modules/private/monitoring/nagios-cli.cfg b/modules/private/monitoring/nagios-cli.cfg
deleted file mode 100644
index 7bd30cb..0000000
--- a/modules/private/monitoring/nagios-cli.cfg
+++ /dev/null
@@ -1,68 +0,0 @@
-# -*- coding: utf-8; -*-
-
-[cli]
-history = /var/lib/naemon/nagios_cli_history
-
-[ui]
-color = 1
-prompt = naemon %s>
-prompt_separator = " → "
-
-[nagios]
-log = /var/log/naemon
-command_file = /run/naemon/naemon.cmd
-log_file = %(log)s/naemon.log
-object_cache_file = /var/lib/naemon/objects.cache
-status_file = /var/lib/naemon/status.dat
-
-[object]
-host.status =
- host_name
- current_state
- plugin_output
- is_flapping
- last_check
- last_time_down
- last_state_change
- check_period
- notification_period
- current_attempt
- max_attempts
-service.status =
- host_name
- service_description
- current_state
- is_flapping
- plugin_output
- last_time_down
- last_state_change
- last_check
- next_check
- check_interval
- check_latency
- check_period
- notification_period
- current_attempt
- max_attempts
-
-[string]
-level.ok = ↑ OK
-level.warning = ! WARNING
-level.critical = ↓ CRITICAL
-level.unknown = ↕ UNKNOWN
-
-[color]
-error = bold_red
-
-prompt = normal
-prompt.object = bold
-
-host.host_name = bold
-host.plugin_output = bold
-service.plugin_output = bold
-
-level.ok = bold_green
-level.warning = bold_yellow
-level.critical = bold_red
-level.unknown = bold_magenta
-
diff --git a/modules/private/monitoring/objects_backup-2.nix b/modules/private/monitoring/objects_backup-2.nix
deleted file mode 100644
index 28032a4..0000000
--- a/modules/private/monitoring/objects_backup-2.nix
+++ /dev/null
@@ -1,111 +0,0 @@
-{ config, pkgs, lib, hostFQDN, emailCheck, ... }:
-let
- defaultPassiveInfo = {
- filter = lib.attrsets.filterAttrs
- (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_");
- use = "external-passive-service";
- freshness_threshold = "450";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- host_name = hostFQDN;
- };
-in
-{
- activatedPlugins = [ "file_date" "mysql" "openldap" "redis" "emails" ];
- service = [
- (emailCheck "backup-2" hostFQDN // {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-email"; freshness_threshold = "1350"; };
- })
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Size on /backup2 partition";
- use = "local-service";
- check_command = ["check_local_disk" "10%" "5%" "/backup2"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-backup"; };
- service_description = "Last backup in /backup2/phare is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/phare" "14" "backup"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-backup"; };
- service_description = "Last backup in /backup2/dilion is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/dilion" "14" "backup"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-backup"; };
- service_description = "Last backup in /backup2/ulminfo is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/ulminfo" "14" "backup"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; };
- service_description = "Last postgresql dump in /backup2/eldiron/postgresql_backup is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/eldiron/postgresql_backup" "7" "postgres"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; };
- service_description = "Redis replication for eldiron is up to date";
- use = "local-service";
- check_command = ["check_redis_replication" "/run/redis_eldiron/redis.sock"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; };
- service_description = "Last redis dump in /backup2/eldiron/redis_backup is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/eldiron/redis_backup" "7" "redis"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; };
- service_description = "Mysql replication for eldiron is up to date";
- use = "local-service";
- check_command = ["check_mysql_replication" "/run/mysqld_eldiron/mysqld.sock" config.secrets.fullPaths."mysql_replication/eldiron/client"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; };
- service_description = "Last mysql dump in /backup2/eldiron/mysql_backup is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/eldiron/mysql_backup" "7" "mysql"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; };
- service_description = "Openldap replication for eldiron is up to date";
- use = "local-service";
- check_command = let
- name = "eldiron";
- hcfg = config.myServices.databasesReplication.openldap.hosts.eldiron;
- base = config.myServices.databasesReplication.openldap.base;
- eldiron_schemas = pkgs.callPackage ../databases/openldap/eldiron_schemas.nix {};
- ldapConfig = pkgs.writeText "slapd.conf" ''
- include ${pkgs.openldap}/etc/schema/core.schema
- include ${pkgs.openldap}/etc/schema/cosine.schema
- include ${pkgs.openldap}/etc/schema/inetorgperson.schema
- include ${pkgs.openldap}/etc/schema/nis.schema
- ${eldiron_schemas}
- moduleload back_hdb
- backend hdb
- database hdb
-
- suffix "${hcfg.base}"
- directory ${base}/${name}/openldap
- '';
- in [
- "check_openldap_replication"
- hcfg.url
- hcfg.dn
- config.secrets.fullPaths."openldap_replication/eldiron/replication_password"
- hcfg.base
- ldapConfig
- ];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; };
- service_description = "Last openldap dump in /backup2/eldiron/openldap_backup is not too old";
- use = "local-service";
- check_command = ["check_last_file_date" "/backup2/eldiron/openldap_backup" "7" "openldap"];
- }
- ];
-}
diff --git a/modules/private/monitoring/objects_common.nix b/modules/private/monitoring/objects_common.nix
deleted file mode 100644
index 7c9f642..0000000
--- a/modules/private/monitoring/objects_common.nix
+++ /dev/null
@@ -1,253 +0,0 @@
-{ hostFQDN
-, hostName
-, interface ? "eth0"
-, processWarn ? "250"
-, processAlert ? "400"
-, loadWarn ? "0.9"
-, load5Warn ? loadWarn
-, load15Warn ? load5Warn
-, loadAlert ? "1.0"
-, load5Alert ? loadAlert
-, load15Alert ? load5Alert
-, mdadm
-, master
-, lib
-, mypluginsConfig
-, ...
-}:
-let
- defaultPassiveInfo = {
- filter = lib.attrsets.filterAttrs
- (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_");
- use = "external-passive-service";
- freshness_threshold = "450";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- host_name = hostFQDN;
- };
-in
-{
- host = {
- "${hostFQDN}" = {
- alias = hostFQDN;
- address = hostFQDN;
- use = "linux-server";
- hostgroups = "webstatus-hosts";
- _webstatus_name = hostName;
- _webstatus_vhost = "status.immae.eu";
- };
- };
- service = [
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Size on root partition";
- use = "local-service";
- check_command = ["check_local_disk" "20%" "10%" "/"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Total number of process";
- use = "local-service";
- check_command = [
- "check_local_procs"
- processWarn
- processAlert
- "RSZDT"
- ];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Network bandwidth";
- use = "local-service";
- check_interval = "2";
- max_check_attempts = "20";
- retry_interval = "2";
- check_command = [
- "check_local_bandwidth"
- interface
- "20480" # kb/s
- "51200" # kb/s
- ];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Average load";
- use = "local-service";
- check_command = [
- "check_local_load"
- "${loadWarn},${load5Warn},${load15Warn}"
- "${loadAlert},${load5Alert},${load15Alert}"
- ];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Swap usage";
- use = "local-service";
- check_command = ["check_local_swap" "20" "10"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Memory usage";
- use = "local-service";
- check_command = ["check_memory" "80" "90"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "NTP is activated and working";
- use = "local-service";
- check_command = ["check_ntp"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "No mdadm array is degraded";
- use = "local-service";
- check_command = [
- "check_command_output"
- "${mdadm}/bin/mdadm --monitor --scan -1"
- "^$"
- "-s 0 -r root"
- ];
- }
- ];
- command = lib.foldr (v: o: o // (v.commands or {})) {} (builtins.attrValues mypluginsConfig) // {
- check_local_disk = "$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$";
- check_local_procs = "$USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$";
- check_local_load = "$USER1$/check_load -r -w $ARG1$ -c $ARG2$";
- check_local_swap = "$USER1$/check_swap -n ok -w $ARG1$ -c $ARG2$";
- check_ntp = "$USER1$/check_ntp_time -t 30 -q -H 0.arch.pool.ntp.org";
- check_mailq = "$USER1$/check_mailq -s -w 1 -c 2";
- check_smtp = "$USER1$/check_smtp -H $HOSTADDRESS$ -p 25 -S -D 21,15";
-
- check_host_alive = "$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5";
- check_ok = "$USER1$/check_dummy 0 \"Dummy OK\"";
- check_critical = "$USER1$/check_dummy 2 \"Dummy CRITICAL\"";
- };
- timeperiod = {
- "24x7" = {
- alias = "24 Hours A Day, 7 Days A Week";
- monday = "00:00-24:00";
- tuesday = "00:00-24:00";
- wednesday = "00:00-24:00";
- thursday = "00:00-24:00";
- friday = "00:00-24:00";
- saturday = "00:00-24:00";
- sunday = "00:00-24:00";
- };
- };
- servicegroup = {
- webstatus-webapps = { alias = "Web applications"; };
- webstatus-websites = { alias = "Personal websites"; };
- webstatus-ssl = { alias = "SSL certificates"; };
- webstatus-dns = { alias = "DNS resolution"; };
- webstatus-remote-services = { alias = "Other remote services"; };
- webstatus-local-services = { alias = "Other local services"; };
- webstatus-email = { alias = "E-mail services"; };
- webstatus-resources = { alias = "Local resources"; };
- webstatus-databases = { alias = "Databases resources"; };
- webstatus-backup = { alias = "Backup resources"; };
- };
- hostgroup = {
- webstatus-hosts = { alias = "Hosts"; };
- };
- contactgroup = {
- admins = { alias = "Naemon Administrators"; };
- };
- templates = {
- service = {
- generic-service = {
- active_checks_enabled = "1";
- check_freshness = "0";
- check_interval = "10";
- check_period = "24x7";
- contact_groups = "admins";
- event_handler_enabled = "1";
- flap_detection_enabled = "1";
- is_volatile = "0";
- max_check_attempts = "3";
- notification_interval = "60";
- notification_options = "w,u,c,r,f,s";
- notification_period = "24x7";
- notifications_enabled = if master then "1" else "0";
- obsess_over_service = "1";
- passive_checks_enabled = "1";
- process_perf_data = "1";
- retain_nonstatus_information = "1";
- retain_status_information = "1";
- retry_interval = "2";
- _webstatus_namespace = "immae";
- };
- local-service = {
- use = "generic-service";
- host_name = hostFQDN;
- check_interval = "5";
- max_check_attempts = "4";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- };
- external-service = {
- use = "generic-service";
- check_interval = "5";
- max_check_attempts = "4";
- retry_interval = "1";
- };
- web-service = {
- use = "generic-service";
- check_interval = "20";
- max_check_attempts = "2";
- retry_interval = "1";
- };
- external-web-service = {
- use = "generic-service";
- check_interval = "20";
- max_check_attempts = "2";
- retry_interval = "1";
- };
- mail-service = {
- use = "generic-service";
- check_interval = "15";
- max_check_attempts = "1";
- retry_interval = "1";
- };
- dns-service = {
- use = "generic-service";
- check_interval = "120";
- notification_interval = "120";
- max_check_attempts = "5";
- retry_interval = "5";
- };
- };
- # No contact, we go through master
- contact = {
- generic-contact = {
- host_notification_commands = "notify-host-by-email";
- host_notification_options = "d,u,r,f,s";
- host_notification_period = "24x7";
- service_notification_commands = "notify-service-by-email";
- service_notification_options = "w,u,c,r,f,s";
- service_notification_period = "24x7";
- };
- };
- host = {
- generic-host = {
- event_handler_enabled = "1";
- flap_detection_enabled = "1";
- notification_period = "24x7";
- notifications_enabled = "1";
- process_perf_data = "1";
- retain_nonstatus_information = "1";
- retain_status_information = "1";
- };
- linux-server = {
- check_command = "check_host_alive";
- check_interval = "5";
- check_period = "24x7";
- contact_groups = "admins";
- max_check_attempts = "10";
- notification_interval = "120";
- notification_options = "d,u,r,f";
- retry_interval = "1";
- _webstatus_namespace = "immae";
- };
- };
- };
-}
diff --git a/modules/private/monitoring/objects_dilion.nix b/modules/private/monitoring/objects_dilion.nix
deleted file mode 100644
index 16b3c64..0000000
--- a/modules/private/monitoring/objects_dilion.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ lib, hostFQDN, emailCheck, ... }:
-let
- defaultPassiveInfo = {
- filter = lib.attrsets.filterAttrs
- (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_");
- use = "external-passive-service";
- freshness_threshold = "450";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- host_name = hostFQDN;
- };
- zfs_snapshot = name: {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; };
- service_description = "ZFS snapshot ${name} happened not too long ago";
- use = "local-service";
- check_command = ["check_zfs_snapshot" name];
- };
-in
-{
- activatedPlugins = [ "zfs" ];
- service = [
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; };
- service_description = "No ZFS pool is degraded";
- use = "local-service";
- check_command = ["check_zfs"];
- }
- (zfs_snapshot "zpool/backup/eldiron/zpool/root")
- (zfs_snapshot "zpool/backup/eldiron/zpool/root/etc")
- (zfs_snapshot "zpool/backup/eldiron/zpool/root/var")
- ];
-}
diff --git a/modules/private/monitoring/objects_eban.nix b/modules/private/monitoring/objects_eban.nix
deleted file mode 100644
index df54f6a..0000000
--- a/modules/private/monitoring/objects_eban.nix
+++ /dev/null
@@ -1,70 +0,0 @@
-{ ... }:
-let
- serviceTemplate = rest: {
- host_name = "eban.bzh";
- use = "external-web-service";
- contacts = "eban";
- contact_groups = "null";
- check_interval = "15";
-
- servicegroups = "webstatus-resources";
- _webstatus_namespace = "eban";
- } // rest;
-in
-{
- activatedPlugins = [ "http" ];
- contact = {
- eban = {
- use = "generic-contact";
- host_notification_commands = "notify-host-eban-url";
- service_notification_commands = "notify-service-eban-url";
- };
- };
- host = {
- "eban.bzh" = {
- alias = "eban.bzh";
- address = "eban.bzh";
- use = "linux-server";
- hostgroups = "webstatus-hosts";
- contacts = "eban";
- contact_groups = "null";
- _webstatus_name = "Eban";
- _webstatus_vhost = "status.eban.bzh";
- _webstatus_namespace = "eban";
- };
- };
- service = [
- (serviceTemplate {
- service_description = "Eban website is up and running";
- check_command = ["check_https" "eban.bzh" "/" ""];
- _webstatus_name = "Main Website";
- _webstatus_url = "https://eban.bzh/";
- })
- (serviceTemplate {
- service_description = "Eban blog is up and running";
- check_command = ["check_https" "blog.eban.bzh" "/" ""];
- _webstatus_name = "Blog";
- _webstatus_url = "https://blog.eban.bzh/";
- })
- (serviceTemplate {
- service_description = "Eban gitea is up and running";
- check_command = ["check_https" "git.eban.bzh" "/" ""];
- _webstatus_name = "Git";
- _webstatus_url = "https://git.eban.bzh/";
- })
- (serviceTemplate {
- service_description = "I Learned website is up and running";
- check_command = [ "check_https" "ilearned.eu.org" "/" "Tiny Tiny RSS"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "TT-RSS";
- _webstatus_url = "https://tools.immae.eu/ttrss/";
- }
-
- {
- service_description = "mpd website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https_auth" "tools.immae.eu" "/mpd/" "ympd"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "MPD (YMPD)";
- _webstatus_url = "https://tools.immae.eu/mpd/";
- }
-
- {
- service_description = "rompr mpd website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https_auth" "tools.immae.eu" "/rompr/" "RompЯ"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "MPD (ROMPR)";
- _webstatus_url = "https://tools.immae.eu/rompr/";
- }
-
- {
- service_description = "wallabag website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "tools.immae.eu" "/wallabag/" "Bienvenue sur wallabag"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Wallabag";
- _webstatus_url = "https://tools.immae.eu/wallabag/";
- }
-
- {
- service_description = "yourl website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "tools.immae.eu" "/url/admin/" "YOURLS"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "YOURLS";
- _webstatus_url = "https://tools.immae.eu/url/admin/";
- }
-
- {
- service_description = "roundcube website is running on mail.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "mail.immae.eu" "/roundcube/" "Roundcube"];
-
- servicegroups = "webstatus-webapps,webstatus-email";
- _webstatus_name = "Roundcube";
- _webstatus_url = "https://mail.immae.eu/roundcube/";
- }
-
- {
- service_description = "dokuwiki website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "tools.immae.eu" "/dokuwiki/" "start"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Dokuwiki";
- _webstatus_url = "https://tools.immae.eu/dokuwiki/";
- }
-
- {
- service_description = "shaarli website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "tools.immae.eu" "/Shaarli/immae" "Immae"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Shaarli";
- _webstatus_url = "https://tools.immae.eu/Shaarli/";
- }
-
- {
- service_description = "ldap website is running on tools.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "tools.immae.eu" "/ldap/" "phpLDAPadmin"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "LDAP";
- _webstatus_url = "https://tools.immae.eu/ldap/";
- }
-
- {
- service_description = "gitweb website is running on git.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "git.immae.eu" "/cgit" "Immae’s git"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Git";
- _webstatus_url = "https://git.immae.eu/";
- }
-
- {
- service_description = "mantisbt website is running on git.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "git.immae.eu" "/mantisbt/" "My View - MantisBT"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Mantisbt";
- _webstatus_url = "https://git.immae.eu/mantisbt";
- }
-
- {
- service_description = "diaspora website is running on diaspora.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "diaspora.immae.eu" "/" "is the online social world where you are in control"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Diaspora";
- _webstatus_url = "https://diaspora.immae.eu/";
- }
-
- {
- service_description = "peertube website is running on peertube.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "peertube.immae.eu" "/" "Immae’s PeerTube"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Peertube";
- _webstatus_url = "https://peertube.immae.eu/";
- }
-
- {
- service_description = "etherpad website is running on ether.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "ether.immae.eu" "/" "Etherpad"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Etherpad";
- _webstatus_url = "https://ether.immae.eu/";
- }
-
- {
- service_description = "mediagoblin website is running on mgoblin.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "mgoblin.immae.eu" "/" "GNU MediaGoblin"];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Mediagoblin";
- _webstatus_url = "https://mgoblin.immae.eu/";
- }
-
- {
- service_description = "mastodon website is running on mastodon.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "mastodon.immae.eu" "/" "Mastodon "];
-
- servicegroups = "webstatus-webapps";
- _webstatus_name = "Mastodon";
- _webstatus_url = "https://mastodon.immae.eu/";
- }
-
- # Other web pages
- {
- service_description = "Jerome website is running on naturaloutil.immae.eu";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "naturaloutil.immae.eu" "/ping.php" "YES"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "naturaloutil.immae.eu";
- _webstatus_url = "https://naturaloutil.immae.eu/";
- }
-
- {
- service_description = "Telio website is running on realistesmedia.fr";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "realistesmedia.fr" "/" "doctype html"];
- contact_groups = "telio-tortay";
- }
-
- {
- service_description = "Chloe website site is running on osteopathe-cc.fr";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "www.osteopathe-cc.fr" "/" "Chloé Condamin ostéopathe D.O."];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "osteopathe-cc.fr";
- _webstatus_url = "https://www.osteopathe-cc.fr/";
- }
-
- {
- service_description = "Richie website is running on europe-richie.org";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "www.europe-richie.org" "/" ".Europe Richie]"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "europe-richie.org";
- _webstatus_url = "https://www.europe-richie.org/";
- }
-
- {
- service_description = "Ludivine website site is running on ludivinecassal.com";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "www.ludivinecassal.com" "/" "Ludivine Cassal"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "ludivinecassal.com";
- _webstatus_url = "https://www.ludivinecassal.com/";
- }
-
- {
- service_description = "Aten website site is running on aten.pro";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "aten.pro" "/" "ATEN"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "aten.pro";
- _webstatus_url = "https://aten.pro/";
- }
-
- {
- service_description = "PiedsJaloux website site is running on piedsjaloux.fr";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "www.piedsjaloux.fr" "/" "Les Pieds Jaloux"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "piedsjaloux.fr";
- _webstatus_url = "https://www.piedsjaloux.fr/";
- }
-
- {
- service_description = "Denise and Jerome website site is running on denisejerome.piedsjaloux.fr";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "denisejerome.piedsjaloux.fr" "/" "Accueil - Mariage"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "denisejerome.piedsjaloux.fr";
- _webstatus_url = "https://denisejerome.piedsjaloux.fr/";
- }
-
- {
- service_description = "Connexionswing website site is running on connexionswing.com";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "www.connexionswing.com" "/" "Cours, stages"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "connexionswing.com";
- _webstatus_url = "https://www.connexionswing.com/";
- }
-
- {
- service_description = "Sandetludo website site is running on sandetludo.com";
- host_name = "eldiron.immae.eu";
- use = "external-web-service";
- check_command = ["check_https" "www.sandetludo.com" "/" "Cours de West Coast"];
-
- servicegroups = "webstatus-websites";
- _webstatus_name = "sandetludo.com";
- _webstatus_url = "https://www.sandetludo.com/";
- }
-
- # SSL
- {
- service_description = "ldap SSL is up to date";
- host_name = "eldiron.immae.eu";
- use = "external-service";
- check_command = ["check_tcp_ssl" "636"];
-
- servicegroups = "webstatus-ssl";
- _webstatus_name = "LDAP";
- _webstatus_url = "ldap.immae.eu";
- }
-
- # Tiboqorl
- {
- service_description = "Cyllene support page is running";
- host_name = "tiboqorl.fr";
- use = "external-web-service";
- contact_groups = "tiboqorl";
- check_command = [ "check_https" "sc.groupe-cyllene.com" "/" "Support Client Cyllene" ];
- _webstatus_namespace = "tiboqorl";
- }
-
- {
- service_description = "Origny page is running";
- host_name = "tiboqorl.fr";
- use = "external-web-service";
- contact_groups = "tiboqorl";
- check_command = [ "check_https" "origny.tiboqorl.fr" "/" "Home Assistant" ];
- _webstatus_namespace = "tiboqorl";
- }
- ];
- contact = {
- telio-tortay = config.myEnv.monitoring.contacts.telio-tortay // {
- use = "generic-contact";
- contactgroups = "telio-tortay";
- };
- thibault = config.myEnv.monitoring.contacts.thibault // {
- use = "generic-contact";
- contactgroups = "tiboqorl";
- };
- };
- contactgroup = {
- telio-tortay = { alias = "Telio Tortay"; members = "immae"; };
- tiboqorl = { alias = "Tiboqorl"; members = "immae"; };
- };
-}
diff --git a/modules/private/monitoring/objects_phare.nix b/modules/private/monitoring/objects_phare.nix
deleted file mode 100644
index 082e7e3..0000000
--- a/modules/private/monitoring/objects_phare.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ emailCheck, ... }:
-{
- activatedPlugins = [ "emails" ];
- host = {
- "phare.normalesup.org" = {
- alias = "phare.normalesup.org";
- address = "phare.normalesup.org";
- use = "linux-server";
- hostgroups = "webstatus-hosts";
- _webstatus_name = "phare";
- _webstatus_vhost = "status.immae.eu";
- };
- };
- service = [
- (emailCheck "phare" "phare.normalesup.org")
- ];
-}
diff --git a/modules/private/monitoring/objects_quatresaisons.nix b/modules/private/monitoring/objects_quatresaisons.nix
deleted file mode 100644
index f30cf81..0000000
--- a/modules/private/monitoring/objects_quatresaisons.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ lib, hostFQDN, emailCheck, openldap, ... }:
-let
- defaultPassiveInfo = {
- filter = lib.attrsets.filterAttrs
- (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_");
- use = "external-passive-service";
- freshness_threshold = "450";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- host_name = hostFQDN;
- };
-in
-{
- resources = {
- USER212 = "{{ .monitoring.quatresaisons.naemon_ldap }}";
- };
- activatedPlugins = [ "megaraid" "command" "postgresql" ];
- service = [
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; };
- service_description = "No RAID device is degraded";
- use = "local-service";
- check_command = ["check_megaraid"];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; };
- service_description = "LDAP is running";
- use = "local-service";
- check_command = [ "check_command_status" "${openldap}/bin/ldapwhoami -D uid=naemon,ou=services,dc=salle-s,dc=org -w $USER212$" "0" ""];
- }
- {
- passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; };
- service_description = "Postgresql is running";
- use = "local-service";
- check_command = [ "check_postgresql_database_count" "/run/postgresql" "5432" "3" ];
- }
- ];
-}
diff --git a/modules/private/monitoring/objects_tiboqorl-fr.nix b/modules/private/monitoring/objects_tiboqorl-fr.nix
deleted file mode 100644
index b49a1d8..0000000
--- a/modules/private/monitoring/objects_tiboqorl-fr.nix
+++ /dev/null
@@ -1,174 +0,0 @@
-{ lib, ... }:
-let
- hostFQDN = "tiboqorl.fr";
- defaultPassiveInfo = {
- filter = lib.attrsets.filterAttrs
- (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_");
- use = "external-passive-service";
- contact_groups = "tiboqorl";
- freshness_threshold = "450";
- notification_interval = "240";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- _webstatus_namespace = "tiboqorl";
- host_name = hostFQDN;
- };
-in
-{
- host = {
- "tiboqorl.fr" = {
- alias = "tiboqorl.fr";
- address = "tiboqorl.fr";
- use = "linux-server";
- contact_groups = "tiboqorl";
- hostgroups = "webstatus-hosts";
- _webstatus_name = "tiboqorl";
- _webstatus_vhost = "status.immae.eu";
- _webstatus_namespace = "tiboqorl";
- };
- };
- service = [
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Size on root partition";
- use = "local-service";
- check_command = ["check_local_disk" "20%" "10%" "/"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Total number of process";
- use = "local-service";
- check_command = [ "check_local_procs" "250" "400" "RSZDT" ];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Network bandwidth";
- use = "local-service";
- check_interval = "2";
- max_check_attempts = "20";
- retry_interval = "2";
- check_command = [
- "check_local_bandwidth"
- "eth0"
- "20480" # kb/s
- "51200" # kb/s
- ];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Average load";
- use = "local-service";
- check_command = [
- "check_local_load"
- "0.75,0.75,0.75" # warn
- "1.0,1.0,1.0" # alert
- ];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Swap usage";
- use = "local-service";
- check_command = ["check_local_swap" "20" "10"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "Memory usage";
- use = "local-service";
- check_command = ["check_memory" "80" "90"];
- }
- {
- passiveInfo = defaultPassiveInfo;
- service_description = "NTP is activated and working";
- use = "local-service";
- check_command = ["check_ntp"];
- }
- ];
- command = {
- check_local_disk = "$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$";
- check_local_procs = "$USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$";
- check_local_load = "$USER1$/check_load -w $ARG1$ -c $ARG2$";
- check_local_swap = "$USER1$/check_swap -n ok -w $ARG1$ -c $ARG2$";
- check_local_bandwidth = "$USER2$/check_bandwidth -i=$ARG1$ -w $ARG2$ -c $ARG3$";
- check_memory = "$USER2$/check_mem.sh -w $ARG1$ -c $ARG2$";
- check_ntp = "$USER1$/check_ntp_time -t 30 -q -H 0.arch.pool.ntp.org";
-
- check_host_alive = "$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5";
-
- notify-master = "$USER2$/send_nrdp.sh -u \"$USER200$\" -t \"$USER201$\" -H \"$HOSTADDRESS$\" -s \"$SERVICEDESC$\" -S \"$SERVICESTATEID$\" -o \"$SERVICEOUTPUT$ | $SERVICEPERFDATA$\"";
- };
- timeperiod = {
- "24x7" = {
- alias = "24 Hours A Day, 7 Days A Week";
- monday = "00:00-24:00";
- tuesday = "00:00-24:00";
- wednesday = "00:00-24:00";
- thursday = "00:00-24:00";
- friday = "00:00-24:00";
- saturday = "00:00-24:00";
- sunday = "00:00-24:00";
- };
- };
- servicegroup = {
- webstatus-resources = { alias = "Local resources"; };
- };
- hostgroup = {
- webstatus-hosts = { alias = "Hosts"; };
- };
- contactgroup = {
- tiboqorl = { alias = "Naemon Administrators"; };
- };
- templates = {
- service = {
- generic-service = {
- active_checks_enabled = "1";
- check_freshness = "0";
- check_interval = "10";
- check_period = "24x7";
- contact_groups = "tiboqorl";
- event_handler_enabled = "1";
- flap_detection_enabled = "1";
- is_volatile = "0";
- max_check_attempts = "3";
- notification_interval = "60";
- notification_options = "w,u,c,r,f,s";
- notification_period = "24x7";
- notifications_enabled = "0";
- obsess_over_service = "1";
- passive_checks_enabled = "1";
- process_perf_data = "1";
- retain_nonstatus_information = "1";
- retain_status_information = "1";
- retry_interval = "2";
- };
- local-service = {
- use = "generic-service";
- host_name = hostFQDN;
- check_interval = "5";
- max_check_attempts = "4";
- retry_interval = "1";
- servicegroups = "webstatus-resources";
- };
- };
- host = {
- generic-host = {
- event_handler_enabled = "1";
- flap_detection_enabled = "1";
- notification_period = "24x7";
- notifications_enabled = "1";
- process_perf_data = "1";
- retain_nonstatus_information = "1";
- retain_status_information = "1";
- };
- linux-server = {
- check_command = "check_host_alive";
- check_interval = "5";
- check_period = "24x7";
- contact_groups = "tiboqorl";
- max_check_attempts = "10";
- notification_interval = "120";
- notification_options = "d,u,r,f";
- retry_interval = "1";
- };
- };
- };
-}
diff --git a/modules/private/monitoring/objects_ulminfo-fr.nix b/modules/private/monitoring/objects_ulminfo-fr.nix
deleted file mode 100644
index bd2804b..0000000
--- a/modules/private/monitoring/objects_ulminfo-fr.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ emailCheck, ... }:
-{
- activatedPlugins = [ "emails" ];
- host = {
- "ulminfo.fr" = {
- alias = "ulminfo.fr";
- address = "ulminfo.fr";
- use = "linux-server";
- hostgroups = "webstatus-hosts";
- _webstatus_name = "ulminfo";
- _webstatus_vhost = "status.immae.eu";
- };
- };
- service = [
- (emailCheck "ulminfo" "ulminfo.fr")
- ];
-}
diff --git a/modules/private/monitoring/plugins/check_backup_age b/modules/private/monitoring/plugins/check_backup_age
deleted file mode 100755
index d873bdc..0000000
--- a/modules/private/monitoring/plugins/check_backup_age
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env bash
-
-set -euo pipefail
-
-source $SECRETS_PATH
-export HOME=$(mktemp -d)
-
-trap "rm -rf $HOME" EXIT
-folder=$1
-
-parse_date() {
- d=$1
- echo $d | sed -e "s/^\(....\)\(..\)\(..\)T\(..\)\(..\)\(..\)/\1-\2-\3T\4:\5:\6/"
-}
-
-output=$(duplicity collection-status --log-fd 2 "$BASE_URL$folder" 2>&1 > /dev/null)
-
-output=$(echo "$output" | grep -v "^\.")
-
-last_full=$(parse_date "$(echo "$output" | grep "^ full " | cut -d' ' -f3 | sort | tail -n1)")
-last_bkp=$(parse_date "$(echo "$output" | grep -E "^ (full|inc) " | cut -d' ' -f3 | sort | tail -n1)")
-orphaned_sets=$(echo "$output" | grep "^orphaned-sets-num" | cut -d' ' -f2)
-incomplete_sets=$(echo "$output" | grep "^incomplete-sets-num" | cut -d' ' -f2)
-
-if [[ -z "$last_full" || -z "$last_bkp" || -z "$orphaned_sets" || -z "$incomplete_sets" ]]; then
- echo "duply-backup $folder UNKNOWN - impossible to parse result"
- exit 3
-fi
-
-last_full_age=$(( ($(date "+%s") - $(date -d "$last_full" "+%s")) / (60*60*24) ))
-last_bkp_age=$(( ($(date "+%s") - $(date -d "$last_bkp" "+%s")) / (60*60) ))
-
-PERFS="orphan=$orphaned_sets;1;;0; incomplete=$incomplete_sets;1;;0; age=${last_bkp_age}h;30;48;0; full_age=${last_full_age}d;35;45;0;"
-
-
-WARNINGS=""
-ERRORS=""
-if [[ "$incomplete_sets" -gt 0 ]]; then
- WARNINGS="$WARNINGS - Incomplete sets is $incomplete_sets"
-fi
-
-if [[ "$orphaned_sets" -gt 0 ]]; then
- WARNINGS="$WARNINGS - Orphaned sets is $orphaned_sets"
-fi
-
-if [[ "$last_full_age" -gt 45 ]]; then
- ERRORS="$ERRORS - Last full backup is too old $last_full"
-elif [[ "$last_full_age" -gt 35 ]]; then
- WARNINGS="$WARNINGS - Last full backup is getting old $last_full"
-fi
-
-if [[ "$last_bkp_age" -gt 48 ]]; then
- ERRORS="$ERRORS - Last backup is too old $last_bkp"
-elif [[ "$last_bkp_age" -gt 30 ]]; then
- WARNINGS="$WARNINGS - Last backup is getting old $last_bkp"
-fi
-
-if [[ -n "$ERRORS" ]]; then
- echo "duply-backup $folder CRITICAL$ERRORS$WARNINGS | $PERFS"
- exit 2
-elif [[ -n "$WARNINGS" ]]; then
- echo "duply-backup $folder WARNING$WARNINGS | $PERFS"
- exit 1
-else
- echo "duply-backup $folder OK | $PERFS"
-fi
diff --git a/modules/private/monitoring/plugins/check_bandwidth b/modules/private/monitoring/plugins/check_bandwidth
deleted file mode 100755
index 53c5d85..0000000
--- a/modules/private/monitoring/plugins/check_bandwidth
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/bash
-
-# ============================== SUMMARY =====================================
-#Author : Ken Roulamellah
-#Date : 19/07/2018
-#Version : 1.0
-# Licence : GPL
-# ===================== INFORMATION ABOUT THIS PLUGIN ========================
-#
-# This plugin checks the average RX and TX bandwidth utilisation. It use
-# kbytes as measure unite.
-#
-# ========================== START OF PROGRAM CODE ===========================
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-interface=$( ip route | grep default | awk '{print $5}' | head -n1)
-function print_usage()
-{
- echo "Usage :"
- echo "$0 [ -i=INTERFACE] [ -ct=COUNT ] -w WARNING -c CRITICAL"
- echo "This script calculate the average bandwith usage."
- echo "Default values | interface: ${interface}, counter: 10"
-}
-
-counter=10
-warning=-1
-critical=-1
-
-sum_rx=0
-sum_tx=0
-avg_rx=
-avg_tx=
-i=
-
-
-if [[ $# -lt 4 ]];
-then
- echo "Error: Arguments are missing"
- print_usage
- exit $STATE_UNKNOWN
-fi
-
-while [[ $# -gt 0 ]]; do
- case "$1" in
- -i=*)
- interface="$(cut -d'=' -f2 <<<"$1")"
- shift
- ;;
- -ct=*)
- counter="$(cut -d'=' -f2 <<<"$1")"
- shift
- ;;
- -w)
- warning=$2
- shift 2
- ;;
- -c)
- critical=$2
- shift 2
- ;;
- *)
- printf "\nError: Invalid option '$1'"
- print_usage
- exit $STATE_UNKNOWN
- ;;
- esac
-done
-
-if [ $warning -lt 0 ] || [ $critical -lt 0 ];
-then
- echo "Error: You need to specify a warning and critical treshold"
- print_usage
- exit $STATE_UNKNOWN
-fi
-
-grep -q "up" /sys/class/net/$interface/operstate || exec echo "$interface: no such device or down"
-
-read rx <"/sys/class/net/$interface/statistics/rx_bytes"
-read tx <"/sys/class/net/$interface/statistics/tx_bytes"
-
-i=$counter
-while [ $i -gt 0 ]; do
- sleep 1
- read newrx <"/sys/class/net/$interface/statistics/rx_bytes"
- read newtx <"/sys/class/net/$interface/statistics/tx_bytes"
-
- #echo "old rx :$rx"
- #echo "new rx :$newrx"
- rx_cal=$(bc <<< "scale=2; ($newrx-$rx) / 1000")
- tx_cal=$(bc <<< "scale=2; ($newtx-$tx) / 1000")
-
- sum_rx=$(bc <<< "scale=2;$sum_rx+$rx_cal")
- sum_tx=$(bc <<< "scale=2;$sum_tx+$tx_cal")
-
- #echo "$interface {rx: $rx_cal ko/s, tx: $tx_cal ko/s}"
- rx=$newrx
- tx=$newtx
- ((i --))
-done
-
-avg_rx=$(bc <<< "scale=2;$sum_rx/$counter")
-avg_tx=$(bc <<< "scale=2;$sum_tx/$counter")
-
-#echo "$avg_rx"
-#echo "$avg_tx"
-
-
-if [ $(bc <<< "$avg_rx > $critical || $avg_tx > $critical") -eq 1 ]; then
- echo "$interface CRITICAL - AVG_RX: $avg_rx kb/s, AVG_TX:
- $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;"
- exit $STATE_CRITICAL
-elif [ $(bc <<< "$avg_rx > $warning || $avg_tx > $warning") -eq 1 ]; then
- echo "$interface WARNING - AVG_RX: $avg_rx kb/s, AVG_TX: $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;"
- exit $STATE_WARNING
-else
- echo "$interface - OK AVG_RX: $avg_rx kb/s, AVG_TX: $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;"
- exit $STATE_OK
-fi
-exit 3
diff --git a/modules/private/monitoring/plugins/check_command b/modules/private/monitoring/plugins/check_command
deleted file mode 100755
index 2b546c1..0000000
--- a/modules/private/monitoring/plugins/check_command
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use Getopt::Std;
-$| = 1;
-
-my %opts;
-getopts('hr:C:c:s:o:', \%opts);
-
-my $STATE_OK = 0;
-my $STATE_WARNING = 1;
-my $STATE_CRITICAL = 2;
-my $STATE_UNKNOWN = 3;
-
-if ($opts{'h'} || scalar(%opts) == 0) {
- &print_help();
- exit($STATE_OK);
-}
-
-my $command = $opts{'c'};
-if ($command eq '') {
- print "You must provide a command to check.\n";
- exit($STATE_UNKNOWN);
-}
-
-my $expected_output = $opts{'o'};
-my $expected_status = $opts{'s'};
-my $other_command = $opts{'C'};
-
-if ($other_command eq '' and $expected_status eq '' and $expected_output eq '') {
- $expected_status = 0;
-}
-
-my $cmd = $command . ' 2>&1';
-my $other_cmd;
-if ($other_command ne '') {
- $other_cmd = $other_command . ' 2>&1';
-}
-
-my $run_as;
-if ($opts{'r'}) {
- $run_as = $opts{'r'};
- $cmd = "sudo -u $run_as -n $cmd";
-
- if ($other_command ne '') {
- $other_cmd = "sudo -u $run_as -n $other_cmd";
- }
-
-}
-
-my $cmd_result = `$cmd`;
-my $other_cmd_result;
-if ($other_command ne '') {
- $other_cmd_result = `$other_cmd`;
- chomp($other_cmd_result);
-}
-
-chomp($cmd_result);
-if ($cmd_result =~ /sudo/i) {
- print "$command CRITICAL - No sudo right to run the command | result=1;;;;\n";
- exit($STATE_UNKNOWN);
-} elsif ($expected_status ne '') {
- if ($? != $expected_status) {
- print "$command CRITICAL - Response status $? | result=1;;;;\n";
- exit($STATE_CRITICAL);
- } else {
- print "$command OK - Response status $? | result=0;;;;\n";
- exit($STATE_OK);
- }
-} elsif ($other_command ne '') {
- if ($cmd_result ne $other_cmd_result) {
- print "$command CRITICAL - Expected output not matching other command output | result=1;;;;\n";
- exit($STATE_CRITICAL);
- } else {
- print "$command OK - Expected output matching other command output | result=0;;;;\n";
- exit($STATE_OK);
- }
-} else {
- if ($cmd_result !~ /$expected_output/) {
- print "$command CRITICAL - Expected output not matching | result=1;;;;\n";
- exit($STATE_CRITICAL);
- } else {
- print "$command OK - Expected output matching | result=0;;;;\n";
- exit($STATE_OK);
- }
-}
-
-sub print_help() {
- print << "EOF";
-Check whether the given command responds as expected. One of -o -C or -s must be selected.
-
-Options:
--h
- Print detailed help screen
-
--c
- command to run (required)
-
--C
- other command to compare output
-
--r user
- Run as user via sudo.
-
--s
- status code to check
-
--o
- output to check
-
-EOF
-}
-
diff --git a/modules/private/monitoring/plugins/check_emails b/modules/private/monitoring/plugins/check_emails
deleted file mode 100755
index 534e5a5..0000000
--- a/modules/private/monitoring/plugins/check_emails
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use Getopt::Std;
-use File::Basename;
-use Date::Parse;
-use POSIX qw(strftime);
-
-$| = 1;
-
-my %opts;
-getopts('hH:l:s:p:f:i:n:r:', \%opts);
-
-my $STATE_OK = 0;
-my $STATE_WARNING = 1;
-my $STATE_CRITICAL = 2;
-my $STATE_UNKNOWN = 3;
-
-if ($opts{'h'} || scalar(%opts) == 0) {
- &print_help();
- exit($STATE_OK);
-}
-
-my $port = $opts{'p'};
-my $host = $opts{'H'};
-my $login = $opts{'l'};
-if ($login ne '') {
- $login = "$login@";
-}
-
-my $identity = $opts{'i'};
-my $local_directory = $opts{'n'};
-my $return_path = $opts{'r'};
-
-my @emails_to_send = split(/,/, $opts{'s'});
-my @emails_to_expect = split(/,/, $opts{'f'});
-
-my $cmd_result;
-if ($local_directory ne '') {
- if (@emails_to_expect and ! -d $local_directory) {
- print "Emails $host UNKNOWN - Could not find local directory";
- exit($STATE_UNKNOWN);
- }
- $cmd_result = `send_mails $local_directory $return_path @emails_to_send 2>&1`;
-} else {
- $cmd_result = `ssh -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -p $port -i $identity $login$host send_mails @emails_to_send 2>&1`;
-
- if ($cmd_result =~ /Host key verification failed./) {
- print "Emails $host UNKNOWN - Could not connect to host with ssh key\n";
- exit($STATE_UNKNOWN);
- }
-}
-
-my @lines = split(/\n/, $cmd_result);
-
-my %found_emails;
-
-foreach my $line (@lines) {
- my @split_line = split(/;/, $line, 2);
- $found_emails{$split_line[0]} = $split_line[1];
-}
-
-my $output = "";
-my $old = 0;
-foreach my $email_from (@emails_to_expect) {
- my @email_split = split(/:/, $email_from);
- my $email = $email_split[0];
- my $from = $email_split[1];
-
- if ( exists $found_emails{$email} ) {
- my $email_date = str2time($found_emails{$email});
- my $current_date = strftime "%s", localtime;
-
- if ($current_date - $email_date > 60*30) {
- $output = "$output$email ($found_emails{$email} from $from) ";
- }
- $old = ($current_date - $email_date) > $old ? ($current_date - $email_date) : $old;
- } else {
- $output = "$output$email (missing) "
- }
-}
-
-if ($output ne '') {
- print "Emails $host CRITICAL - expecting emails: $output | timestamp=${old}s;;;;\n";
- exit($STATE_CRITICAL);
-} else {
- print "Emails $host OK | timestamp=${old}s;;;;\n";
- exit($STATE_OK);
-}
-
-sub print_help() {
- print << "EOF";
-Check sent emails
-
-Options:
--h
- Print detailed help screen
-
--H
- Host to check
-
--l
- Login
-
--i
- Identity file
-
--n
- Don’t use ssh, pass that directory to script
-
--r
- Return path for local e-mails
-
--s
- Comma separated list of emails to send from the host.
-
--f
- Comma separated list of emails to expect on the host.
-EOF
-}
-
diff --git a/modules/private/monitoring/plugins/check_eriomem b/modules/private/monitoring/plugins/check_eriomem
deleted file mode 100755
index 880b88a..0000000
--- a/modules/private/monitoring/plugins/check_eriomem
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-import getopt
-import signal
-from subprocess import Popen, PIPE
-
-STATE_OK = 0
-STATE_WARNING = 1
-STATE_CRITICAL = 2
-STATE_UNKNOWN = 3
-
-keys = sys.argv[1].split(",")
-
-def to_args(k):
- access, secret = k.split(":", 1)
- return [
- "s3cmd",
- '-c=/dev/null',
- '--no-check-certificate',
- '--access_key={}'.format(access),
- '--secret_key={}'.format(secret),
- '--host=e.eriomem.net',
- '--host-bucket=%(bucket)s.e.eriomem.net',
- 'du'
- ]
-
-max_size = 1024*1024*1024*1024
-warning_percent = 99.75
-critical_percent = 99.95
-
-def output(code, msg):
- print(msg)
- sys.exit(code)
-
-def main():
- def handler(signum, frame):
- raise IOError
- signal.signal(signal.SIGALRM, handler)
- signal.alarm(60)
-
- try:
- ps = [Popen(to_args(a), stdout=PIPE, stderr=PIPE) for a in keys]
- outs = [p.communicate() for p in ps]
- rets = [p.wait() for p in ps]
- except IOError:
- for p in ps:
- os.kill(p.pid, signal.SIGTERM)
- output(STATE_UNKNOWN,
- "Eriomem UNKNOWN - Command timeout after 60 seconds!")
-
- signal.alarm(0)
-
- if sum(rets) == 0:
- usages = [int(out[0].decode().split("\n")[-2].split()[0]) for out in outs]
- usage = sum(usages)
- use_percent = 100 * usage / max_size
- if use_percent > critical_percent:
- output(STATE_CRITICAL,
- "Eriomem CRITICAL - bucket usage: %s (%s%%);| size=%s;;;;" %
- (sizeof_fmt(usage), use_percent, sizeof_fmt(usage)))
- elif use_percent > warning_percent:
- output(STATE_WARNING,
- "Eriomem WARNING - bucket usage: %s (%s%%);| size=%s;;;;" %
- (sizeof_fmt(usage), use_percent, sizeof_fmt(usage)))
- else:
- output(STATE_OK,
- "Eriomem OK - bucket usage: %s (%d%%);| size=%s;;;;" %
- (sizeof_fmt(usage), use_percent, sizeof_fmt(usage)))
- else:
- messages = "\n".join([out[0].decode() + out[1].decode() for out in outs])
- output(STATE_UNKNOWN,
- "Eriomem UNKNOWN - Error in command")
-
-def sizeof_fmt(num):
- for unit in ['','ko','Mo','Go','To','Po','Eo','Zo']:
- if abs(num) < 1024.0:
- return "%3.1f%s" % (num, unit)
- num /= 1024.0
- return "%.1f%s%s" % (num, 'Yo')
-
-if __name__ == '__main__':
- main()
diff --git a/modules/private/monitoring/plugins/check_ftp_database b/modules/private/monitoring/plugins/check_ftp_database
deleted file mode 100755
index f9cf579..0000000
--- a/modules/private/monitoring/plugins/check_ftp_database
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-
-OUT=$(echo "ls" | lftp -u test_ftp,test_ftp eldiron.immae.eu | grep it_works | wc -l)
-
-if [ "$OUT" -eq 1 ]; then
- echo "ftp connection OK - access to ftp is working | ftp=1;;;;"
- exit 0
-else
- echo "ftp connection CRITICAL - no access to ftp | ftp=0;;;;"
- exit 2
-fi
diff --git a/modules/private/monitoring/plugins/check_git b/modules/private/monitoring/plugins/check_git
deleted file mode 100755
index e8fbb29..0000000
--- a/modules/private/monitoring/plugins/check_git
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env bash
-
-SSH_KEY="$1"
-
-TMPDIR=$(mktemp -d)
-
-if [ ! -d "$TMPDIR" ]; then
- echo "gitolite UNKNOWN - impossible to create temp dir"
- exit 3
-fi
-
-trap "rm -rf $TMPDIR" EXIT
-
-ERRORS=""
-OUTPUT=""
-PERFS=""
-
-cd "$TMPDIR"
-OUT=$(git clone -q git://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1)
-ERR=$?
-if [ -n "$OUT" ]; then
-OUTPUT="$OUTPUT
-$OUT"
-fi
-if [ "$ERR" != 0 ]; then
- PERFS="$PERFS git=0;;;;"
- ERRORS="$ERRORS git://"
-else
- PERFS="$PERFS git=1;;;;"
-fi
-rm -rf Monitor
-
-OUT=$(git clone -q http://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1)
-ERR=$?
-if [ -n "$OUT" ]; then
-OUTPUT="$OUTPUT
-$OUT"
-fi
-if [ "$ERR" != 0 ]; then
- ERRORS="$ERRORS http://"
- PERFS="$PERFS http=0;;;;"
-else
- PERFS="$PERFS http=1;;;;"
-fi
-rm -rf Monitor
-
-OUT=$(git clone -q https://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1)
-ERR=$?
-if [ -n "$OUT" ]; then
-OUTPUT="$OUTPUT
-$OUT"
-fi
-if [ "$ERR" != 0 ]; then
- ERRORS="$ERRORS https://"
- PERFS="$PERFS https=0;;;;"
-else
- PERFS="$PERFS https=1;;;;"
-fi
-rm -rf Monitor
-
-OUT=$(GIT_SSH_COMMAND="ssh -i $SSH_KEY -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no" git clone -q gitolite@git.immae.eu:perso/Immae/Projets/Ruby/Monitor 2>&1)
-ERR=$?
-if [ -n "$OUT" ]; then
-OUTPUT="$OUTPUT
-$OUT"
-fi
-if [ "$ERR" != 0 ]; then
- ERRORS="$ERRORS ssh"
- PERFS="$PERFS ssh=0;;;;"
-else
- PERFS="$PERFS ssh=1;;;;"
-fi
-rm -rf Monitor
-
-if [ -n "$ERRORS" ]; then
- echo "gitolite CRITICAL - impossible to clone via$ERRORS | $PERFS"
- exit 2
-else
- echo "gitolite OK - ssh, git, http and https work | $PERFS"
- exit 0
-fi
diff --git a/modules/private/monitoring/plugins/check_imap_connection b/modules/private/monitoring/plugins/check_imap_connection
deleted file mode 100755
index c1ab0dd..0000000
--- a/modules/private/monitoring/plugins/check_imap_connection
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use Getopt::Std;
-$| = 1;
-
-my %opts;
-getopts('h:u:p:H:', \%opts);
-
-my $STATE_OK = 0;
-my $STATE_WARNING = 1;
-my $STATE_CRITICAL = 2;
-my $STATE_UNKNOWN = 3;
-
-if ($opts{'h'} || !$opts{'u'} || !$opts{'p'} || !$opts{'H'}) {
- &print_help();
- exit($STATE_UNKNOWN);
-}
-
-my $user = $opts{'u'};
-my $password = $opts{'p'};
-my $host = $opts{'H'};
-
-my $cmd_result = `(echo "a login $user $password"; echo "b logout") | openssl s_client -quiet -ign_eof -connect $host -starttls imap 2>&1`;
-my $expected_result = "a OK Logged in";
-
-chomp($cmd_result);
-if ($cmd_result !~ /$expected_result/) {
- print "IMAP CRITICAL - Unable to connect via imaps | imap=0;;;;\n";
- exit($STATE_CRITICAL);
-} else {
- print "IMAP OK - imaps connected successfully | imap=1;;;;\n";
- exit($STATE_OK);
-}
-
-sub print_help() {
- print << "EOF";
-Check whether imap works via ssl and is able to connect its database.
-
-Options:
--h
- Print detailed help screen
--u
- User to log in as
--p
- Password to log in
--H
- Host to log in to
-
-EOF
-}
-
diff --git a/modules/private/monitoring/plugins/check_last_file_date b/modules/private/monitoring/plugins/check_last_file_date
deleted file mode 100755
index f51a258..0000000
--- a/modules/private/monitoring/plugins/check_last_file_date
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-base_path=$1
-hours=$2
-
-last_date=$(find $base_path -mindepth 1 -maxdepth 1 -printf "%T@\n" 2>/dev/null | sort | tail -n 1)
-
-if [ -z "$last_date" ]; then
- echo "UNKNOWN: Could not read folder"
- exit $STATE_UNKNOWN
-else
- LC_ALL=C last_date=$(printf "%.*f" 0 $last_date)
- LC_ALL=C age=$(( $(date "+%s") - $last_date))
- max_age=$(( $hours * 60 * 60 ))
- min_date=$(date -d "$hours hours ago" "+%s")
- if [ "$min_date" -lt "$last_date" ]; then
- echo "OK: Last file $(date -d @$last_date) | age=${age}s;;$max_age;;"
- exit $STATE_OK
- else
- echo "CRITICAL: Last file $(date -d @$last_date) | age=${age}s;;$max_age;;"
- exit $STATE_CRITICAL
- fi
-fi
diff --git a/modules/private/monitoring/plugins/check_mem.sh b/modules/private/monitoring/plugins/check_mem.sh
deleted file mode 100755
index cc97ae2..0000000
--- a/modules/private/monitoring/plugins/check_mem.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-
-if [ "$1" = "-w" ] && [ "$2" -gt "0" ] && [ "$3" = "-c" ] && [ "$4" -gt "0" ]; then
- FreeM=`free -m`
- memTotal_m=`echo "$FreeM" |grep Mem |awk '{print $2}'`
- memUsed_m=`echo "$FreeM" |grep Mem |awk '{print $3}'`
- memFree_m=`echo "$FreeM" |grep Mem |awk '{print $4}'`
- memBuffer_m=`echo "$FreeM" |grep Mem |awk '{print $6}'`
- memCache_m=`echo "$FreeM" |grep Mem |awk '{print $7}'`
- memUsedPrc=`echo $((($memUsed_m*100)/$memTotal_m))||cut -d. -f1`
- if [ "$memUsedPrc" -ge "$4" ]; then
- echo "Memory: CRITICAL Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% used!|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; CACHE=$memCache_m;;;; BUFFER=$memBuffer_m;;;;"
- exit 2
- elif [ "$memUsedPrc" -ge "$2" ]; then
- echo "Memory: WARNING Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% used!|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; CACHE=$memCache_m;;;; BUFFER=$memBuffer_m;;;;"
- exit 1
- else
- echo "Memory: OK Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% used|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; CACHE=$memCache_m;;;; BUFFER=$memBuffer_m;;;;"
- exit 0
- fi
-else # If inputs are not as expected, print help.
- sName="`echo $0|awk -F '/' '{print $NF}'`"
- echo -e "\n\n\t\t### $sName Version 2.0###\n"
- echo -e "# Usage:\t$sName -w -c "
- echo -e "\t\t= warnlevel and critlevel is percentage value without %\n"
- echo "# EXAMPLE:\t/usr/lib64/nagios/plugins/$sName -w 80 -c 90"
- echo -e "\nCopyright (C) 2012 Lukasz Gogolin (lukasz.gogolin@gmail.com), improved by Nestor 2015\n\n"
- exit
-fi
diff --git a/modules/private/monitoring/plugins/check_mysql_replication b/modules/private/monitoring/plugins/check_mysql_replication
deleted file mode 100755
index 1ee5de1..0000000
--- a/modules/private/monitoring/plugins/check_mysql_replication
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-socket=$1
-config_file=$2
-info=$(mysql --defaults-file=${config_file} -S $socket -e "show slave status" --vertical)
-exit_code=$?
-
-lag=$(echo "$info" | grep "\bSeconds_Behind_Master\b" | cut -d':' -f2 | sed -e "s/\s//g")
-
-IO_running=$(echo "$info" | grep "\bSlave_IO_Running\b" | cut -d':' -f2 | sed -e "s/\s//g")
-SQL_running=$(echo "$info" | grep "\bSlave_SQL_Running\b" | cut -d':' -f2 | sed -e "s/\s//g")
-
-if [[ $exit_code -ne 0 ]]; then
- echo "UNKNOWN - Impossible to run mysql command"
- exit $STATE_UNKNOWN
-elif [[ -z "$lag" ]]; then
- echo "UNKNOWN - No replication found for mysql"
- exit $STATE_UNKNOWN
-elif [[ "$IO_running" != "Yes" || "$SQL_running" != "Yes" ]]; then
- echo "UNKNOWN - Replication is not running"
- exit $STATE_UNKNOWN
-else
- output="Replication lag for mysql is ${lag}s"
- LC_ALL=C lag=$(printf "%.*f" 0 $lag)
-
- if [[ $lag -lt 5 ]]; then
- echo "OK - $output | time=${lag}s;5;10;;"
- exit $STATE_OK
- elif [[ $lag -lt 10 ]]; then
- echo "WARNING - $output | time=${lag}s;5;10;;"
- exit $STATE_WARNING
- else
- echo "CRITICAL - $output | time=${lag}s;5;10;;"
- exit $STATE_CRITICAL
- fi
-fi
diff --git a/modules/private/monitoring/plugins/check_openldap_replication b/modules/private/monitoring/plugins/check_openldap_replication
deleted file mode 100755
index 7136ad5..0000000
--- a/modules/private/monitoring/plugins/check_openldap_replication
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-distant_host="$1"
-replication_dn="$2"
-replication_pw="$3"
-base="$4"
-config="$5"
-
-to_date() {
- i="$1"
- i=$(echo "$i" | grep contextCSN | cut -d":" -f2 | sed -e "s/\s//g")
- i=$(echo "$i" | cut -d"#" -f1)
- i=$(echo "$i" | cut -d"." -f1)
- echo "$i"
-}
-
-# ldap
-remote_ldap=$(ldapsearch -H $distant_host -D "$replication_dn" -y "$replication_pw" -b "$base" -s base -LLL contextCSN )
-exit_code_remote=$?
-remote_ldap=$(to_date "$remote_ldap")
-
-# slapcat
-local_ldap=$(slapcat -b "$base" -f "$config" -a "(entryDN=$base)")
-exit_code_local=$?
-local_ldap=$(to_date "$local_ldap")
-
-offset=$(($remote_ldap - $local_ldap))
-
-if [[ $exit_code_remote -ne 0 || $exit_code_local -ne 0 ]]; then
- echo "UNKNOWN - Impossible to run ldap command"
- exit $STATE_UNKNOWN
-elif [[ -z "$offset" ]]; then
- echo "UNKNOWN - No replication found"
- exit $STATE_UNKNOWN
-else
- output="Replication lag for openldap is ${offset}s"
- LC_ALL=C lag=$(printf "%.*f" 0 $lag)
-
- if [[ $offset -lt 5 ]]; then
- echo "OK - $output | time=${offset}s;5;10;;"
- exit $STATE_OK
- elif [[ $offset -lt 10 ]]; then
- echo "WARNING - $output | time=${offset}s;5;10;;"
- exit $STATE_WARNING
- else
- echo "CRITICAL - $output | time=${offset}s;5;10;;"
- exit $STATE_CRITICAL
- fi
-fi
diff --git a/modules/private/monitoring/plugins/check_ovh_sms b/modules/private/monitoring/plugins/check_ovh_sms
deleted file mode 100755
index caf279c..0000000
--- a/modules/private/monitoring/plugins/check_ovh_sms
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-try:
- import ovh
-
- [endpoint, application_key, application_secret, consumer_key, account] = sys.argv[1].split(",")
- client = ovh.Client(
- endpoint=endpoint,
- application_key=application_key,
- application_secret=application_secret,
- consumer_key=consumer_key,
- )
-
- result = client.get('/sms/{}'.format(account))["creditsLeft"]
-
- if result < 20:
- print("SMS OVH Critical - Not enough sms left ({})|SMS={};;;;".format(result, result))
- sys.exit(2)
- else:
- print("SMS OVH Ok - Enough sms left ({})|SMS={};;;;".format(result, result))
- sys.exit(0)
-except Exception:
- print("SMS OVH UNKNOWN - Error during script")
- sys.exit(3)
diff --git a/modules/private/monitoring/plugins/check_postgres_database_count b/modules/private/monitoring/plugins/check_postgres_database_count
deleted file mode 100755
index 43bdd8c..0000000
--- a/modules/private/monitoring/plugins/check_postgres_database_count
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-host=$1
-port=$2
-min=$3
-
-count=$(psql -h $host -p $port -A -q -c '\t' -c 'select count(datname) from pg_catalog.pg_database' postgres 2>&1)
-exit_code=$?
-
-if [[ $exit_code -ne 0 ]]; then
- echo "UNKNOWN - Impossible to run psql command: $count"
- exit $STATE_UNKNOWN
-elif [[ -z "$count" ]]; then
- echo "UNKNOWN - No database found"
- exit $STATE_UNKNOWN
-else
- output="Database count is $count"
- LC_ALL=C count=$(printf "%.*f" 0 $count)
-
- if [[ $count -gt $min ]]; then
- echo "OK - $output | count=${count};$min;$min;0;"
- exit $STATE_OK
- else
- echo "CRITICAL - $output | count=${count};$min;$min;0;"
- exit $STATE_CRITICAL
- fi
-fi
diff --git a/modules/private/monitoring/plugins/check_postgres_replication b/modules/private/monitoring/plugins/check_postgres_replication
deleted file mode 100755
index ff257a3..0000000
--- a/modules/private/monitoring/plugins/check_postgres_replication
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-user=$1
-host=$2
-port=$3
-
-lag=$(psql -h $host -p $port -A -t -c "SELECT COALESCE(EXTRACT(EPOCH FROM replay_lag),0) FROM pg_stat_replication WHERE usename='$user'" 2>/dev/null)
-exit_code=$?
-
-if [[ $exit_code -ne 0 ]]; then
- echo "UNKNOWN - Impossible to run psql command"
- exit $STATE_UNKNOWN
-elif [[ -z "$lag" ]]; then
- echo "UNKNOWN - No replication found for $user"
- exit $STATE_UNKNOWN
-else
- output="Replication lag for $user is ${lag}s"
- LC_ALL=C lag=$(printf "%.*f" 0 $lag)
-
- if [[ $lag -lt 5 ]]; then
- echo "OK - $output | time=${lag}s;5;10;0;"
- exit $STATE_OK
- elif [[ $lag -lt 10 ]]; then
- echo "WARNING - $output | time=${lag}s;5;10;0;"
- exit $STATE_WARNING
- else
- echo "CRITICAL - $output | time=${lag}s;5;10;0;"
- exit $STATE_CRITICAL
- fi
-fi
diff --git a/modules/private/monitoring/plugins/check_redis_replication b/modules/private/monitoring/plugins/check_redis_replication
deleted file mode 100755
index 6dbe4c4..0000000
--- a/modules/private/monitoring/plugins/check_redis_replication
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-socket=$1
-
-info=$(redis-cli -s $socket info replication)
-lag=$(echo "$info" | grep master_last_io_seconds_ago | cut -d":" -f2 | sed -e "s/\s//g")
-slave_offset=$(echo "$info" | grep slave_repl_offset | cut -d":" -f2 | sed -e "s/\s//g")
-master_offset=$(echo "$info" | grep master_repl_offset | cut -d":" -f2 | sed -e "s/\s//g")
-offset=$(($master_offset - $slave_offset))
-
-exit_code=$?
-
-if [[ $exit_code -ne 0 ]]; then
- echo "UNKNOWN - Impossible to run redis command"
- exit $STATE_UNKNOWN
-elif [[ -z "$lag" ]]; then
- echo "UNKNOWN - No replication found"
- exit $STATE_UNKNOWN
-else
- output="Replication lag for redis is ${lag}s and offset is ${offset}"
- LC_ALL=C lag=$(printf "%.*f" 0 $lag)
-
- if [[ $lag -lt 5 && $offset -lt 5 ]]; then
- echo "OK - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;"
- exit $STATE_OK
- elif [[ $lag -lt 10 && $offset -lt 10 ]]; then
- echo "WARNING - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;"
- exit $STATE_WARNING
- else
- echo "CRITICAL - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;"
- exit $STATE_CRITICAL
- fi
-fi
diff --git a/modules/private/monitoring/plugins/check_zfs_snapshot b/modules/private/monitoring/plugins/check_zfs_snapshot
deleted file mode 100755
index 56f8c4f..0000000
--- a/modules/private/monitoring/plugins/check_zfs_snapshot
+++ /dev/null
@@ -1,325 +0,0 @@
-#! /bin/sh
-
-OS=$(uname)
-
-# MIT License
-#
-# Copyright (c) 2016 Josef Friedrich
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-########################################################################
-# Date functions
-########################################################################
-
-# This date function must be placed on the top of this file because
-# they are used in some global variables.
-
-# to_year ###
-
-##
-# Get the four digit year integer from now.
-#
-# Return:
-# The current 4 digit year.
-##
-_now_to_year() {
- date +%Y
-}
-
-##
-# Convert a date in the format YYYY-MM-DD to a four digit year integer.
-#
-# Parameters:
-# a date in the format YYYY-MM-DD
-#
-# Return:
-# four digit year integer
-##
-_date_to_year() {
- local OPTIONS
- if [ "$OS" = 'Linux' ]; then
- OPTIONS="--date $1"
- # FreeBSD, Darwin
- else
- OPTIONS="-j -f %Y-%m-%d $1"
- fi
- date $OPTIONS +%Y
-}
-
-# to_datetime ###
-
-##
-# Convert a UNIX timestamp to a datetime string.
-#
-# Parameters:
-# UNIX timestamp
-#
-# Return:
-# %Y-%m-%d.%H:%M:%S
-##
-_timestamp_to_datetime() {
- local OPTIONS
- if [ "$OS" = 'Linux' ]; then
- OPTIONS="--date @$1"
- # FreeBSD, Darwin
- else
- OPTIONS="-j -f %s $1"
- fi
- date $OPTIONS +%Y-%m-%d.%H:%M:%S
-}
-
-# to_timestamp ###
-
-##
-# Get the current UNIX timestamp.
-#
-# Return:
-# %current UNIX timestamp
-##
-_now_to_timestamp() {
- date +%s
-}
-
-PROJECT_PAGES='https://github.com/Josef-Friedrich/check_zfs_snapshot
-https://exchange.icinga.com/joseffriedrich/check_zfs_snapshot
-https://exchange.nagios.org/directory/Plugins/System-Metrics/File-System/check_zfs_snapshot/details'
-
-VERSION=1.2
-FIRST_RELEASE=2016-09-08
-SHORT_DESCRIPTION="Monitoring plugin to check how long ago the last \
-snapshot of a ZFS dataset was created."
-USAGE="check_zfs_snapshot v$VERSION
-Copyright (c) $(_date_to_year $FIRST_RELEASE)-$(_now_to_year) \
-Josef Friedrich
-
-$SHORT_DESCRIPTION
-
-
-Usage: check_zfs_snapshot
-
-Options:
- -c, --critical=OPT_CRITICAL
- Interval in seconds for critical state.
- -d, --dataset=OPT_DATASET
- The ZFS dataset to check.
- -h, --help
- Show this help.
- -s, --short-description
- Show a short description of the command.
- -v, --version
- Show the version number.
- -w, --warning=OPT_WARNING
- Interval in seconds for warning state. Must be lower than -c
-
-Performance data:
- - last_ago
- Time interval in seconds for last snapshot.
- - warning
- Interval in seconds.
- - critical
- Interval in seconds.
- - snapshot_count
- How many snapshot exists in the given dataset and all child
- datasets exists.
-"
-
-# Exit codes
-STATE_OK=0
-STATE_WARNING=1
-STATE_CRITICAL=2
-STATE_UNKNOWN=3
-
-_get_last_snapshot() {
- zfs get creation -Hpr -t snapshot "$1" | \
- awk 'BEGIN {max = 0} {if ($3>max) max=$3} END {print max}'
-}
-
-_getopts() {
- while getopts ':c:d:hsvw:-:' OPT ; do
- case $OPT in
-
- c)
- OPT_CRITICAL=$OPTARG
- ;;
-
- d)
- OPT_DATASET="$OPTARG"
- ;;
-
- h)
- echo "$USAGE"
- exit 0
- ;;
-
- s)
- echo "$SHORT_DESCRIPTION"
- exit 0
- ;;
-
- v)
- echo "$VERSION"
- exit 0
- ;;
-
- w)
- OPT_WARNING=$OPTARG
- ;;
-
- \?)
- echo "Invalid option “-$OPTARG”!" >&2
- exit 2
- ;;
-
- :)
- echo "Option “-$OPTARG” requires an argument!" >&2
- exit 3
- ;;
-
- -)
- LONG_OPTARG="${OPTARG#*=}"
-
- case $OPTARG in
-
- critical=?*)
- OPT_CRITICAL=$LONG_OPTARG
- ;;
-
- dataset=?*)
- OPT_DATASET="$LONG_OPTARG"
- ;;
-
- help)
- echo "$USAGE"
- exit 0
- ;;
-
- short-description)
- echo "$SHORT_DESCRIPTION"
- exit 0
- ;;
-
- version)
- echo "$VERSION"
- exit 0
- ;;
-
- warning=?*)
- OPT_WARNING=$LONG_OPTARG
- ;;
-
- critical*|dataset*|warning*)
- echo "Option “--$OPTARG” requires an argument!" >&2
- exit 3
- ;;
-
- help*|short-description*|version*)
- echo "No argument allowed for the option “--$OPTARG”!" >&2
- exit 4
- ;;
-
- '') # "--" terminates argument processing
- break
- ;;
-
- *)
- echo "Invalid option “--$OPTARG”!" >&2
- exit 2
- ;;
-
- esac
- ;;
-
- esac
- done
-}
-
-_snapshot_count() {
- # FreeBSD wc adds some whitespaces before the number!
- # cat $HOME/debug | wc -l
- # 7
- local COUNT
- COUNT="$(zfs list -t snapshot | grep "$1" | wc -l)"
- echo $COUNT
-}
-
-_performance_data() {
- echo "| \
-last_ago=${DIFF}s;$OPT_WARNING;$OPT_CRITICAL;0 \
-count=$(_snapshot_count "$OPT_DATASET");;;0\
-"
-}
-
-## This SEPARATOR is required for test purposes. Please don’t remove! ##
-
-_getopts $@
-
-if [ -z "$OPT_WARNING" ]; then
- # 1 day
- OPT_WARNING=86400
-fi
-
-if [ -z "$OPT_CRITICAL" ]; then
- # 3 day
- OPT_CRITICAL=259200
-fi
-
-if [ -z "$OPT_DATASET" ]; then
- echo "Dataset has to be set! Use option -d " >&2
- echo "$USAGE" >&2
- exit $STATE_UNKNOWN
-fi
-
-if ! zfs list "$OPT_DATASET" > /dev/null 2>&1; then
- echo "'$OPT_DATASET' is no ZFS dataset!" >&2
- echo "$USAGE" >&2
- exit $STATE_UNKNOWN
-fi
-
-NOW=$(_now_to_timestamp)
-
-CREATION_DATE=$(_get_last_snapshot "$OPT_DATASET")
-
-DIFF=$((NOW - CREATION_DATE))
-
-if [ "$OPT_WARNING" -gt "$OPT_CRITICAL" ]; then
- echo '-w OPT_WARNING must be smaller than -c OPT_CRITICAL'
- _usage >&2
- exit $STATE_UNKNOWN
-fi
-
-RETURN=STATE_UNKNOWN
-
-if [ "$DIFF" -gt "$OPT_CRITICAL" ]; then
- RETURN=$STATE_CRITICAL
- MESSAGE="CRITICAL:"
-elif [ "$DIFF" -gt "$OPT_WARNING" ]; then
- RETURN=$STATE_WARNING
- MESSAGE="WARNING:"
-else
- RETURN=$STATE_OK
- MESSAGE="OK:"
-fi
-
-DATE="$(_timestamp_to_datetime "$CREATION_DATE")"
-
-echo "$MESSAGE Last snapshot for dataset '$OPT_DATASET' was created on $DATE $(_performance_data)"
-
-exit $RETURN
diff --git a/modules/private/monitoring/plugins/notify_by_email b/modules/private/monitoring/plugins/notify_by_email
deleted file mode 100755
index 959db26..0000000
--- a/modules/private/monitoring/plugins/notify_by_email
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-
-# $1 = service/host
-
-# $2 = type (PROBLEM RECOVERY ACKNOWLEDGEMENT FLAPPINGSTART FLAPPINGSTOP FLAPPINGDISABLED DOWNTIMESTART DOWNTIMESTOP DOWNTIMECANCELLED)
-# http://www.naemon.org/documentation/usersguide/macrolist.html#notificationtype
-
-# $3 = host alias
-
-# $4 = date (YYYY-MM-DDTHH:MM:SS)
-
-# $5 = E-mail
-
-NOTIFICATION_TYPE="$2"
-HOST_ALIAS="$3"
-DATE="$4"
-CONTACT="$5"
-
-message=""
-
-if [ "$1" = "host" ]; then
- message=$(printf "%b" "***** Naemon *****\n\nNotification Type: $NOTIFICATION_TYPE\n\nHost: $HOST_ALIAS\nState: $HOSTSTATE\nInfo: $HOSTOUTPUT\n\nDate/Time: $DATE\n")
- subject="** $NOTIFICATION_TYPE Host Alert: $HOST_ALIAS is $HOSTSTATE **"
-else
- message=$(printf "%b" "***** Naemon *****\n\nNotification Type: $NOTIFICATION_TYPE\n\nService: $SERVICEDESC\nHost: $HOST_ALIAS\nState: $SERVICESTATE\n\nDate/Time: $DATE\n\nAdditional Info:\n\n$SERVICEOUTPUT\n")
- subject="** $NOTIFICATION_TYPE Service Alert: $HOST_ALIAS/$SERVICEDESC is $SERVICESTATE **"
-fi
-
-echo "$message" | MAILRC=/dev/null mail -r "$ADMINEMAIL" -n -s "$subject" "$CONTACT"
diff --git a/modules/private/monitoring/plugins/notify_by_slack b/modules/private/monitoring/plugins/notify_by_slack
deleted file mode 100755
index 1b16a0d..0000000
--- a/modules/private/monitoring/plugins/notify_by_slack
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env bash
-
-SLACK_CHANNEL="$1"
-SLACK_USERNAME="Naemon"
-SLACK_URL="$2"
-SLACK_USERICON="https://assets.immae.eu/monitoring.png"
-
-if [ "$SERVICESTATE" = "CRITICAL" ]; then
- ICON=":exclamation:"
- COLOR="#DA0505"
-elif [ "$SERVICESTATE" = "WARNING" ]; then
- ICON=":warning:"
- COLOR="#F1E903"
-elif [ "$SERVICESTATE" = "OK" ]; then
- ICON=":white_check_mark:"
- COLOR="#36a64f"
-elif [ "$SERVICESTATE" = "UNKNOWN" ]; then
- ICON=":question:"
- COLOR="#000000"
-else
- ICON=":white_medium_square:"
- COLOR="#ffffff"
-fi
-
-payload=$(echo "{}" | jq -r \
- --arg "icon_url" "$SLACK_USERICON" \
- --arg "channel" "$SLACK_CHANNEL" \
- --arg "username" "$SLACK_USERNAME" \
- --arg "text" "${ICON} ${SERVICEDESC} on ${HOST} is ${SERVICESTATE}" \
- --arg "color" "$COLOR" \
- --arg "host" "$HOST" \
- --arg "desc" "$SERVICEDESC" \
- --arg "state" "$SERVICESTATE" \
- --arg "output" "$SERVICEOUTPUT" \
- '.icon_url = $icon_url |
- .channel = $channel |
- .username = $username |
- .text = $text |
- .attachments = [{fallback:"", color:$color,fields: [{},{},{},{}]}] |
- .attachments[0].fields[0] = {title:"Host",value:$host,short:true} |
- .attachments[0].fields[1] = {title:"Service description",value:$desc,short:true} |
- .attachments[0].fields[2] = {title:"Status",value:$state,short:true} |
- .attachments[0].fields[3] = {title:"Message",value:$output,short:false}
- ')
-
-curl -X POST --data "payload=$payload" $SLACK_URL
diff --git a/modules/private/monitoring/plugins/notify_eban_url b/modules/private/monitoring/plugins/notify_eban_url
deleted file mode 100755
index 107b5de..0000000
--- a/modules/private/monitoring/plugins/notify_eban_url
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-
-if [ "$SERVICESTATE" = "CRITICAL" -o "$SERVICESTATE" = "UNKNOWN" -o "$HOSTSTATE" = "DOWN" -o "$HOSTSTATE" = "UNREACHABLE" ]; then
- MESSAGE="$STATUS_NAME seems down!"
- curl -X GET -G --data-urlencode "user=$USER" --data-urlencode "pass=$PASSWORD" --data-urlencode "msg=$MESSAGE" https://smsapi.free-mobile.fr/sendmsg
-fi
diff --git a/modules/private/monitoring/plugins/send_nrdp.sh b/modules/private/monitoring/plugins/send_nrdp.sh
deleted file mode 100755
index c83c8cb..0000000
--- a/modules/private/monitoring/plugins/send_nrdp.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/bash
-
-TEMPLATE='{
- "cmd": "submitcheck",
- "token": $token,
- "checkresult": [{
- "hostname": $hostname,
- "state": $state,
- "output": $output,
- "type": $type,
- "servicename": $servicename
- }]
-}'
-
-while getopts "u:t:H:s:S:o:" option
-do
- case $option in
- u) url=$OPTARG ;;
- t) token=$OPTARG ;;
- H) hostname=$OPTARG ;;
- s) servicename=$OPTARG ;;
- S) state=$OPTARG ;;
- o) output=$OPTARG ;;
- esac
-done
-
-if [ -n "$servicename" ]; then
- checktype="service"
-else
- checktype="host"
-fi
-
-payload=$(jq -n \
- --arg type "$checktype" \
- --arg hostname "$hostname" \
- --arg servicename "$servicename" \
- --arg output "$output" \
- --arg token "$token" \
- --arg state "$state" \
- "$TEMPLATE")
-
-rslt=$(curl -f --silent --insecure -d "$payload" -H "Content-Type: application/json" "$url")
-ret=$?
-
-if [ $ret != 0 ];then
- echo "ERROR: could not connect to NRDP server at $url"
- exit 1
-fi
-
-status=$(echo "$rslt" | jq -r .status)
-message=$(echo "$rslt" | jq -r .message)
-
-if [ "$status" != "ok" ];then
- echo "ERROR: The NRDP Server said $message"
- exit 2
-fi
-echo "Sent 1 checks to $url"
diff --git a/modules/private/monitoring/send_mails b/modules/private/monitoring/send_mails
deleted file mode 100755
index 105c505..0000000
--- a/modules/private/monitoring/send_mails
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-
-CHECK_DIR=$1
-shift
-RETURN_PATH=$1
-shift
-
-for mail in "$@"; do
- echo "Test Mail" | MAILRC=/dev/null mail -n -r "$RETURN_PATH" -s "TestMailImmae " "$mail"
-done
-
-if [ -d "$CHECK_DIR" ]; then
- cd $CHECK_DIR
- stat -c '%n;%y' *
-fi
diff --git a/modules/private/monitoring/status.nix b/modules/private/monitoring/status.nix
deleted file mode 100644
index ab0290c..0000000
--- a/modules/private/monitoring/status.nix
+++ /dev/null
@@ -1,93 +0,0 @@
-{ config, pkgs, lib, name, ... }:
-{
- options = {
- myServices.status = {
- enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable status app.
- '';
- };
- };
- };
- config = lib.mkIf config.myServices.status.enable {
- secrets.keys."naemon-status/environment" = {
- user = "naemon";
- group = "naemon";
- permissions = "0400";
- text = ''
- TOKENS=${builtins.concatStringsSep " " config.myEnv.monitoring.nrdp_tokens}
- '';
- };
- services.nginx = {
- enable = true;
- recommendedOptimisation = true;
- recommendedGzipSettings = true;
- recommendedProxySettings = true;
- upstreams."netdata".servers = { "127.0.0.1:19999" = {}; };
- upstreams."netdata".extraConfig = ''
- keepalive 64;
- '';
- virtualHosts."status.eban.bzh" = {
- acmeRoot = config.myServices.certificates.webroot;
- useACMEHost = name;
- forceSSL = true;
- locations."/".proxyPass = "http://unix:/run/naemon-status/socket.sock:/";
- };
- virtualHosts."status.immae.eu" = {
- acmeRoot = config.myServices.certificates.webroot;
- useACMEHost = name;
- forceSSL = true;
- locations."/".proxyPass = "http://unix:/run/naemon-status/socket.sock:/";
-
- locations."= /netdata".return = "301 /netdata/";
- locations."~ /netdata/(?.*)".extraConfig = ''
- proxy_redirect off;
- proxy_set_header Host $host;
-
- proxy_set_header X-Forwarded-Host $host;
- proxy_set_header X-Forwarded-Server $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- proxy_pass_request_headers on;
- proxy_set_header Connection "keep-alive";
- proxy_store off;
- proxy_pass http://netdata/$ndpath$is_args$args;
-
- gzip on;
- gzip_proxied any;
- gzip_types *;
- '';
- };
- };
- security.acme.certs."${name}" = {
- extraDomains."status.immae.eu" = null;
- extraDomains."status.eban.bzh" = null;
- user = config.services.nginx.user;
- group = config.services.nginx.group;
- };
-
- myServices.certificates.enable = true;
- networking.firewall.allowedTCPPorts = [ 80 443 ];
- systemd.services.naemon-status = {
- description = "Naemon status";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- EnvironmentFile = config.secrets.fullPaths."naemon-status/environment";
- Type = "simple";
- WorkingDirectory = "${./status}";
- ExecStart = let
- python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.flask_login ]);
- in
- "${python}/bin/gunicorn -w4 --bind unix:/run/naemon-status/socket.sock app:app";
- User = "naemon";
- RuntimeDirectory = "naemon-status";
- StandardOutput = "journal";
- StandardError = "inherit";
- };
- };
- };
-}
diff --git a/modules/private/monitoring/status/app.py b/modules/private/monitoring/status/app.py
deleted file mode 100755
index ff92891..0000000
--- a/modules/private/monitoring/status/app.py
+++ /dev/null
@@ -1,414 +0,0 @@
-from flask import Flask, request, render_template_string, jsonify, make_response
-from flask_login import LoginManager, UserMixin, login_required
-import socket
-import json
-import time
-import os
-
-login_manager = LoginManager()
-app = Flask(__name__)
-login_manager.init_app(app)
-
-STATUS = [
- "ok",
- "warning",
- "error",
- "unknown"
- ]
-
-HOST_STATUS = [
- "up",
- "down",
- "unreachable",
- ]
-
-#### Push
-AUTHORIZED_KEYS = os.environ.get("TOKENS", "").split()
-COMMAND_FILE = "/var/run/naemon/naemon.cmd"
-
-ERROR_NO_REQUEST_HANDLER="NO REQUEST HANDLER"
-ERROR_NO_TOKEN_SUPPLIED="NO TOKEN"
-ERROR_BAD_TOKEN_SUPPLIED="BAD TOKEN"
-
-ERROR_BAD_COMMAND_FILE="BAD COMMAND FILE"
-ERROR_COMMAND_FILE_OPEN_WRITE="COMMAND FILE UNWRITEABLE"
-ERROR_COMMAND_FILE_OPEN="CANNOT OPEN COMMAND FILE"
-ERROR_BAD_WRITE="WRITE ERROR"
-
-ERROR_BAD_DATA="BAD DATA"
-ERROR_BAD_JSON="BAD JSON"
-
-ERROR_NO_CORRECT_STATUS="NO STATUS WAS CORRECT"
-#### /Push
-
-def get_lq(request):
- # https://mathias-kettner.de/checkmk_livestatus.html
- socket_path="/var/run/naemon/live"
- s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- s.connect(socket_path)
- s.send(request.encode())
- s.shutdown(socket.SHUT_WR)
- chunks = []
- while len(chunks) == 0 or len(chunks[-1]) > 0:
- chunks.append(s.recv(4096))
- s.close()
- return b"".join(chunks).decode()
-
-class Host:
- def __init__(self, name, alias, status, webname, vhost):
- self.name = name
- self.alias = alias
- self.webname = webname or alias
- self.vhost = vhost
- self.status = status
- self.services = []
-
- @classmethod
- def parse_hosts(cls, payload, vhost):
- parsed = filter(lambda x: x.vhost == vhost, [cls.parse(p) for p in json.loads(payload)])
- return {p.name: p for p in parsed}
-
- @classmethod
- def parse(cls, payload):
- return cls(payload[0], payload[1], HOST_STATUS[payload[2]], payload[3].get("WEBSTATUS_NAME"), payload[3].get("WEBSTATUS_VHOST"))
-
- def __repr__(self):
- return "Host {}: {} ({})".format(self.name, self.alias, self.webname)
-
- @classmethod
- def query(cls, vhost):
- answer = get_lq("""GET hosts
-Filter: groups >= webstatus-hosts
-Columns: name alias state custom_variables
-OutputFormat: json
-""")
- return cls.parse_hosts(answer, vhost)
-
- def fill_services(self, services):
- self.services = [service for service in services if service.host == self.name]
-
-class ServiceGroup:
- def __init__(self, name, alias):
- self.name = name
- self.alias = alias
- self.services = []
-
- @classmethod
- def parse_groups(cls, payload):
- parsed = [cls.parse(p) for p in json.loads(payload)]
- return {p.name: p for p in parsed}
-
- @classmethod
- def parse(cls, payload):
- return cls(payload[0], payload[1])
-
- @classmethod
- def query(cls):
- answer = get_lq("""GET servicegroups
-Filter: name ~ ^webstatus-
-Columns: name alias custom_variables
-OutputFormat: json
-""")
- return cls.parse_groups(answer)
-
- def fill_services(self, services, hosts):
- self.services = [service for service in services if any([group == self.name for group in service.groups]) and service.host in hosts]
-
- def __repr__(self):
- return "ServiceGroup {}: {}".format(self.name, self.alias)
-
-class Service:
- def __init__(self, name, host, groups, status, webname, url, description, infos):
- self.name = name
- self.host = host
- self.groups = groups
- self.status = status
- self.webname = webname
- self.url = url
- self.description = description
- self.infos = infos
-
- @classmethod
- def parse_services(cls, payload):
- parsed = json.loads(payload)
- return [cls.parse(p) for p in parsed if cls.valid(p[2])]
-
- @staticmethod
- def valid(groups):
- return any([b.startswith("webstatus-") for b in groups])
-
- @classmethod
- def parse(cls, payload):
- return cls(payload[0],
- payload[1],
- payload[2],
- STATUS[payload[3]],
- payload[4].get("WEBSTATUS_NAME"),
- payload[4].get("WEBSTATUS_URL"),
- payload[5],
- payload[6])
-
- @classmethod
- def query(cls):
- answer = get_lq("""GET services
-Columns: display_name host_name groups state custom_variables description plugin_output
-OutputFormat: json
-""")
- return cls.parse_services(answer)
-
- def __repr__(self):
- return "Service {}: {}".format(self.name, self.webname)
-
-def get_infos(vhost):
- hosts = Host.query(vhost)
- servicegroups = ServiceGroup.query()
- services = Service.query()
-
- for host in hosts:
- hosts[host].fill_services(services)
- for group in servicegroups:
- servicegroups[group].fill_services(services, hosts)
- return (hosts, servicegroups, services)
-
-TEMPLATE='''
-
-
-
-
-
- Status
-
-
-
-
- Hosts
- {%- for host in hosts.values() %}
-
- {{ host.status }}
- {{ host.webname }}
-
- {%- for service in servicegroups["webstatus-resources"].services if service.host == host.name -%}
- {%- if loop.first %}
-
- {% endif %}
-
-
- {{ service.status }}
- {{ service.description }}
- {{ service.infos }}
-
-
- {%- if loop.last %}
-
- {% endif %}
- {% endfor %}
- {%- endfor %}
-
- {%- for group in servicegroups.values() if group.services and group.name != "webstatus-resources" %}
- {%- if loop.first %}
- Services
-
- {%- endif %}
-
-
{{ group.alias }}
- {%- for service in group.services if service.host in hosts -%}
- {%- if loop.first %}
-
- {% endif %}
-
-
- {{ service.status }}
-
- {% if service.url and service.url.startswith("https://") %}
- {{ service.webname or service.description }}
- {% else %}
- {{ service.webname or service.description }}
- {% endif %}
-
- {{ hosts[service.host].webname }}
-
-
- {%- if loop.last %}
-
- {% endif %}
- {%- endfor -%}
-
- {%- if loop.last %}
-
- {% endif %}
- {%- endfor %}
-
-
-'''
-
-@login_manager.request_loader
-def load_user_from_request(request):
- api_key = request.headers.get('Token')
- if api_key in AUTHORIZED_KEYS:
- return UserMixin()
- content = request.get_json(force=True, silent=True)
- if content is not None and content.get("token") in AUTHORIZED_KEYS:
- return UserMixin()
-
-@app.route("/live", methods=["POST"])
-@login_required
-def live():
- query = request.get_data()
- result = get_lq(query.decode() + "\n")
- resp = make_response(result)
- resp.content_type = "text/plain"
- return resp
-
-@app.route("/", methods=["GET"])
-def get():
- (hosts, servicegroups, services) = get_infos(request.host)
- resp = make_response(render_template_string(TEMPLATE, hosts=hosts, servicegroups=servicegroups))
- resp.content_type = "text/html"
- return resp
-
-@app.route("/", methods=["POST"])
-@login_required
-def push():
- content = request.get_json(force=True, silent=True)
- if content is None:
- return ERROR_BAD_JSON
- if content.get("cmd") != "submitcheck":
- return render_error(ERROR_NO_REQUEST_HANDLER)
- if "checkresult" not in content or not isinstance(content["checkresult"], list):
- return render_error(ERROR_BAD_DATA)
-
- checks = 0
- errors = 0
- for check in map(lambda x: CheckResult.from_json(x), content["checkresult"]):
- if check is None:
- errors += 1
- continue
- try:
- write_check_output(check)
- except Exception as e:
- return render_error(str(e))
- checks += 1
- return render_response(checks, errors)
-
-def write_check_output(check):
- if check.type== "service":
- command = "[{time}] PROCESS_SERVICE_CHECK_RESULT;{hostname};{servicename};{state};{output}";
- else:
- command = "[{time}] PROCESS_HOST_CHECK_RESULT;{hostname};{state};{output}";
- formatted = command.format(
- time=int(time.time()),
- hostname=check.hostname,
- state=check.state,
- output=check.output,
- servicename=check.servicename,
- )
-
- if not os.path.exists(COMMAND_FILE):
- raise Exception(ERROR_BAD_COMMAND_FILE)
- if not os.access(COMMAND_FILE, os.W_OK):
- raise Exception(ERROR_COMMAND_FILE_OPEN_WRITE)
- if not os.access(COMMAND_FILE, os.W_OK):
- raise Exception(ERROR_COMMAND_FILE_OPEN_WRITE)
- try:
- with open(COMMAND_FILE, "w") as c:
- c.write(formatted + "\n")
- except Exception as e:
- raise Exception(ERROR_BAD_WRITE)
-
-def render_error(error):
- return jsonify({
- "status": "error",
- "message": error,
- })
-
-def render_response(checks, errors):
- if checks > 0:
- return jsonify({
- "status": "ok",
- "result": {
- "checks": checks,
- "errors": errors,
- }
- })
- else:
- return jsonify({
- "status": "error",
- "message": ERROR_NO_CORRECT_STATUS,
- })
-
-class CheckResult:
- def __init__(self, hostname, state, output, servicename, checktype):
- self.hostname = hostname
- self.state = state
- self.output = output
- self.servicename = servicename
- self.type = checktype
-
- @classmethod
- def from_json(klass, j):
- if not isinstance(j, dict):
- return None
- for key in ["hostname", "state", "output"]:
- if key not in j or not isinstance(j[key], str):
- return None
- for key in ["servicename", "type"]:
- if key in j and not isinstance(j[key], str):
- return None
- return klass(
- j["hostname"],
- j["state"],
- j["output"],
- j.get("servicename", ""),
- j.get("type", "host"))
-
diff --git a/modules/private/monitoring/status_engine.nix b/modules/private/monitoring/status_engine.nix
deleted file mode 100644
index 39a753a..0000000
--- a/modules/private/monitoring/status_engine.nix
+++ /dev/null
@@ -1,115 +0,0 @@
-{ config, pkgs, lib, name, ... }:
-let
- package = pkgs.status_engine.worker.override { config_file = config.secrets.fullPaths."status_engine"; };
- env = config.myEnv.tools.status_engine;
-in
-{
- config = lib.mkIf config.myServices.status.enable {
- systemd.services.gearmand = {
- description = "Gearman daemon";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- DynamicUser = true;
- User = "gearmand";
- Type = "simple";
- ExecStart = "${pkgs.gearmand}/bin/gearmand --syslog -L 127.0.0.1 -q libsqlite3 --libsqlite3-db /var/lib/gearmand/gearmand.db --store-queue-on-shutdown -l stderr -P /run/gearmand/gearmand.pid";
- RuntimeDirectory = "gearmand";
- StateDirectory = "gearmand";
- };
- };
-
- secrets.keys."status_engine" = {
- permissions = "0400";
- user = "naemon";
- group = "naemon";
- text = ''
- node_name: ${name}
- use_gearman: 1
- gearman:
- address: 127.0.0.1
- port: 4730
- timeout: 1000
- use_rabbitmq: 0
- use_redis: 1
- redis:
- address: 127.0.0.1
- port: 6379
- db: 0
- store_live_data_in_archive_backend: 1
- use_mysql: 1
- mysql:
- host: ${env.mysql.remoteHost}
- port: ${env.mysql.port}
- username: ${env.mysql.user}
- password: ${env.mysql.password}
- database: ${env.mysql.database}
- use_crate: 0
- number_of_bulk_records: 100
- max_bulk_delay: 5
- number_servicestatus_worker: 1
- number_hoststatus_worker: 1
- number_logentry_worker: 1
- number_statechange_worker: 1
- number_hostcheck_worker: 1
- number_servicecheck_worker: 1
- number_misc_worker: 1
-
- process_perfdata: 1
- number_perfdata_worker: 1
- perfdata_backend:
- - mysql
-
- check_for_commands: 1
- command_check_interval: 15
- external_command_file: /run/naemon/naemon.cmd
- query_handler: /run/naemon/naemon.qh
- submit_method: qh
-
- syslog_enabled: 1
- syslog_tag: statusengine-worker
-
- # Archive age
- age_hostchecks: 5
- age_host_acknowledgements: 60
- age_host_notifications: 60
- age_host_statehistory: 365
- age_host_downtimes: 60
- age_servicechecks: 5
- age_service_acknowledgements: 60
- age_service_notifications: 60
- age_service_statehistory: 365
- age_service_downtimes: 60
- age_logentries: 5
- age_tasks: 1
- age_perfdata: 90
-
- disable_http_proxy: 1
- '';
- };
-
- services.redis = rec {
- enable = true;
- bind = "127.0.0.1";
- };
-
- services.cron = {
- mailto = "cron@immae.eu";
- systemCronJobs = [
- "0 0 * * * naemon cd ${package} && ./bin/Console.php cleanup"
- ];
- };
-
- systemd.services.status_engine_worker = {
- description = "Status engine worker";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- Type = "simple";
- Restart = "on-failure";
- User = "naemon";
- ExecStart = "${package}/bin/StatusengineWorker.php";
- };
- };
- };
-}
diff --git a/modules/private/monitoring/to_objects.nix b/modules/private/monitoring/to_objects.nix
deleted file mode 100644
index 12721d2..0000000
--- a/modules/private/monitoring/to_objects.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-{ lib }:
- with lib.attrsets;
- with lib.strings;
- with lib.lists;
- with lib.trivial;
-let
- pad = width: str: let
- padWidth = width - stringLength str;
- padding = concatStrings (genList (const " ") padWidth);
- in str + optionalString (padWidth > 0) padding;
- toStr = k: v:
- if k == "check_command" && builtins.isList v
- then builtins.concatStringsSep "!" v
- else v;
-
- toService = service: ''
- define service {
- ${builtins.concatStringsSep "\n" (mapAttrsToList (k: v:
- " ${pad 30 k} ${toStr k v}"
- ) (filterAttrs (k: v: ! builtins.elem k ["passiveInfo" "filter"]) service))}
- }
- '';
- toServices = services: builtins.concatStringsSep "\n" (map toService services);
-
- toCommand = k: v: ''
- define command {
- ${pad 30 "command_name"} ${k}
- ${pad 30 "command_line"} ${v}
- }
- '';
- toCommands = a: builtins.concatStringsSep "\n" (mapAttrsToList toCommand a);
-
- toOther = keyname: k: v: ''
- define ${keyname} {
- ${pad 30 "${keyname}_name"} ${k}
- ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv:
- " ${pad 30 kk} ${vv}"
- ) v)}
- }
- '';
- toOtherNoName = keyname: v: ''
- define ${keyname} {
- ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv:
- " ${pad 30 kk} ${vv}"
- ) v)}
- }
- '';
- toOthers = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toOther keyname) a);
- toOthersArray = keyname: a: builtins.concatStringsSep "\n" (map (toOtherNoName keyname) a);
-
- toTemplate = keyname: k: v: ''
- define ${keyname} {
- ${pad 30 "name"} ${k}
- ${pad 30 "register"} 0
- ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv:
- " ${pad 30 kk} ${vv}"
- ) v)}
- }
- '';
- toTemplates' = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toTemplate keyname) a);
- toTemplates = v: builtins.concatStringsSep "\n" (mapAttrsToList toTemplates' v);
-
- toObjects' = keyname: v:
- if keyname == "service"
- then toServices v
- else if keyname == "command"
- then toCommands v
- else if keyname == "templates"
- then toTemplates v
- else if builtins.elem keyname ["hostgroup" "host" "contactgroup" "contact" "timeperiod" "servicegroup"]
- then toOthers keyname v
- else if builtins.elem keyname ["servicedependency"]
- then toOthersArray keyname v
- else "";
- toObjects = v: builtins.concatStringsSep "\n" (mapAttrsToList toObjects' v);
-in
- toObjects
diff --git a/modules/private/mpd.nix b/modules/private/mpd.nix
deleted file mode 100644
index 640b001..0000000
--- a/modules/private/mpd.nix
+++ /dev/null
@@ -1,60 +0,0 @@
-{ lib, pkgs, config, ... }:
-{
- options.myServices.mpd.enable = lib.mkEnableOption "enable MPD";
- config = lib.mkIf config.myServices.mpd.enable {
- secrets.keys = {
- "mpd" = {
- permissions = "0400";
- text = config.myEnv.mpd.password;
- };
- "mpd-config" = {
- permissions = "0400";
- user = "mpd";
- group = "mpd";
- text = ''
- password "${config.myEnv.mpd.password}@read,add,control,admin"
- '';
- };
- };
- networking.firewall.allowedTCPPorts = [ 6600 ];
- users.users.mpd.extraGroups = [ "wwwrun" "keys" ];
- systemd.services.mpd.serviceConfig.RuntimeDirectory = "mpd";
- services.filesWatcher.mpd = {
- restart = true;
- paths = [ config.secrets.fullPaths."mpd-config" ];
- };
-
- services.mpd = {
- enable = true;
- network.listenAddress = "any";
- musicDirectory = config.myEnv.mpd.folder;
- extraConfig = ''
- include "${config.secrets.fullPaths."mpd-config"}"
- audio_output {
- type "null"
- name "No Output"
- mixer_type "none"
- }
- audio_output {
- type "httpd"
- name "OGG"
- encoder "vorbis"
- bind_to_address "/run/mpd/ogg.sock"
- quality "5.0"
- format "44100:16:1"
- }
- audio_output {
- type "httpd"
- name "MP3"
- encoder "lame"
- bind_to_address "/run/mpd/mp3.sock"
- quality "5.0"
- format "44100:16:1"
- }
-
-
- '';
- };
- };
-}
-
diff --git a/modules/private/pub/default.nix b/modules/private/pub/default.nix
deleted file mode 100644
index c419530..0000000
--- a/modules/private/pub/default.nix
+++ /dev/null
@@ -1,56 +0,0 @@
-{ lib, pkgs, config, ... }:
-{
- options = {
- myServices.pub.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Whether to enable pub user.
- '';
- };
- };
-
- config = lib.mkIf config.myServices.pub.enable {
- myServices.ssh.modules = [{
- snippet = builtins.readFile ./ldap_pub.sh;
- dependencies = [ pkgs.coreutils ];
- }];
- users.users.pub = let
- restrict = pkgs.runCommand "restrict" {
- file = ./restrict;
- buildInputs = [ pkgs.makeWrapper ];
- } ''
- mkdir -p $out/bin
- cp $file $out/bin/restrict
- chmod a+x $out/bin/restrict
- patchShebangs $out/bin/restrict
- wrapProgram $out/bin/restrict \
- --prefix PATH : ${lib.makeBinPath [ pkgs.bubblewrap pkgs.rrsync ]} \
- --set TMUX_RESTRICT ${./tmux.restrict.conf}
- '';
- purple-hangouts = pkgs.purple-hangouts.overrideAttrs(old: {
- installPhase = ''
- install -Dm755 -t $out/lib/purple-2/ libhangouts.so
- for size in 16 22 24 48; do
- install -TDm644 hangouts$size.png $out/share/pixmaps/pidgin/protocols/$size/hangouts.png
- done
- '';
- });
- in {
- createHome = true;
- description = "Restricted shell user";
- home = "/var/lib/pub";
- uid = config.myEnv.users.pub.uid;
- useDefaultShell = true;
- packages = [
- restrict
- pkgs.tmux
- (pkgs.pidgin.override { plugins = [
- pkgs.purple-plugin-pack purple-hangouts
- pkgs.purple-discord pkgs.purple-facebook
- pkgs.telegram-purple
- ]; })
- ];
- };
- };
-}
diff --git a/modules/private/pub/ldap_pub.sh b/modules/private/pub/ldap_pub.sh
deleted file mode 100644
index bbbefdc..0000000
--- a/modules/private/pub/ldap_pub.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh
-LDAP_PUB_RESTRICT_MEMBER="cn=restrict,cn=pub,ou=services,dc=immae,dc=eu"
-LDAP_PUB_FORWARD_MEMBER="cn=forward,cn=pub,ou=services,dc=immae,dc=eu"
-ECHO=$(which echo)
-
-if [[ $user == pub ]]; then
- ldap_search '(&(memberOf='$LDAP_PUB_RESTRICT_MEMBER')('$KEY'=*))' $KEY | \
- while read line ;
- do
- if [ ! -z "$line" ]; then
- if [[ $line == dn* ]]; then
- echo ""
- user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line")
- echo "# $user"
- elif [[ $line == $KEY* ]]; then
- key=$(clean_key_line pub "$line")
- key_forward=$(clean_key_line forward "$line")
- if [ ! -z "$key" ]; then
- if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
- echo -n 'command="/etc/profiles/per-user/pub/bin/restrict '$user'" '
- echo $key
- fi
- elif [ ! -z "$key_forward" ]; then
- if [[ $key_forward != *$'\n'* ]] && [[ $key_forward == ssh-* ]]; then
- echo "# forward only"
- echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" '
- echo $key_forward
- fi
- fi
- fi
- fi
- done
-
- echo ""
- ldap_search '(&(memberOf='$LDAP_PUB_FORWARD_MEMBER')('$KEY'=*))' $KEY | \
- while read line ;
- do
- if [ ! -z "$line" ]; then
- if [[ $line == dn* ]]; then
- echo ""
- user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line")
- echo "# $user"
- elif [[ $line == $KEY* ]]; then
- key=$(clean_key_line forward "$line")
- if [ ! -z "$key" ]; then
- if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
- echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" '
- echo $key
- fi
- fi
- fi
- fi
- done
- exit 0
-fi
-
diff --git a/modules/private/pub/restrict b/modules/private/pub/restrict
deleted file mode 100644
index b2f3be3..0000000
--- a/modules/private/pub/restrict
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env bash
-user="$1"
-rootuser="$HOME/$user/"
-mkdir -p $rootuser
-
-orig="$SSH_ORIGINAL_COMMAND"
-if [ -z "$orig" ]; then
- orig="/bin/bash -l"
-fi
-if [ "${orig:0:7}" = "command" ]; then
- orig="${orig:8}"
-fi
-
-case "$orig" in
-rsync*)
- rrsync $HOME/$user/
- ;;
-*)
- nix_store_paths() {
- nix-store -q -R \
- /run/current-system/sw \
- /etc/profiles/per-user/pub \
- /etc/ssl/certs/ca-bundle.crt \
- | while read i; do
- printf '%s--ro-bind\0'$i'\0'$i'\0' ''
- done
- }
-
- set -euo pipefail
- (exec -c bwrap --ro-bind /usr /usr \
- --args 10 \
- --dir /tmp \
- --dir /var \
- --symlink ../tmp var/tmp \
- --proc /proc \
- --dev /dev \
- --ro-bind /etc/resolv.conf /etc/resolv.conf \
- --ro-bind /etc/zoneinfo /etc/zoneinfo \
- --ro-bind /etc/ssl /etc/ssl \
- --ro-bind /etc/static/ssl/certs /etc/static/ssl/certs \
- --ro-bind /run/current-system/sw/lib/locale/locale-archive /etc/locale-archive \
- --ro-bind /run/current-system/sw/bin /bin \
- --ro-bind /etc/profiles/per-user/pub/bin /bin-pub \
- --bind /var/lib/pub/$user /var/lib/pub \
- --dir /var/lib/commons \
- --ro-bind $TMUX_RESTRICT /var/lib/commons/tmux.restrict.conf \
- --chdir /var/lib/pub \
- --unshare-all \
- --share-net \
- --dir /run/user/$(id -u) \
- --setenv TERM "$TERM" \
- --setenv LOCALE_ARCHIVE "/etc/locale-archive" \
- --setenv XDG_RUNTIME_DIR "/run/user/`id -u`" \
- --setenv PS1 "$user@pub $ " \
- --setenv PATH "/bin:/bin-pub" \
- --setenv HOME "/var/lib/pub" \
- --file 11 /etc/passwd \
- --file 12 /etc/group \
- -- $orig) \
- 10< <(nix_store_paths) \
- 11< <(getent passwd $UID 65534) \
- 12< <(getent group $(id -g) 65534)
- ;;
-esac
diff --git a/modules/private/pub/tmux.restrict.conf b/modules/private/pub/tmux.restrict.conf
deleted file mode 100644
index 5aefd1c..0000000
--- a/modules/private/pub/tmux.restrict.conf
+++ /dev/null
@@ -1,43 +0,0 @@
-# Pour les nostalgiques de screen
-# comme les raccourcis ne sont pas les mêmes, j'évite
-set -g prefix C-a
-unbind-key C-b
-
-unbind-key -a
-bind-key -n C-h list-keys
-bind-key C-d detach
-bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
-
-# même hack que sur screen lorsqu'on veut profiter du scroll du terminal
-# (xterm ...)
-set -g terminal-overrides 'xterm*:smcup@:rmcup@'
-
-#Pour les ctrl+arrow
-set-option -g xterm-keys on
-
-# c'est un minimum (defaut 2000)
-set-option -g history-limit 10000
-
-# lorsque j'ai encore un tmux ailleurs seule
-# sa fenetre active réduit la taille de ma fenetre locale
-setw -g aggressive-resize on
-
-# Pour etre alerté sur un changement dans une autre fenêtre
-setw -g monitor-activity on
-#set -g visual-activity on
-#set -g visual-bell on
-
-set -g base-index 1
-
-# repercuter le contenu de la fenetre dans la barre de titre
-# reference des string : man tmux (status-left)
-set -g set-titles on
-set -g set-titles-string '#H #W #T' # host window command
-
-#Dans les valeurs par defaut deja, avec le ssh-agent
-set -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY PATH"
-
-set -g status off
-set -g status-left ''
-set -g status-right ''
-
diff --git a/modules/private/ssh/default.nix b/modules/private/ssh/default.nix
deleted file mode 100644
index ee5dda5..0000000
--- a/modules/private/ssh/default.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.ssh;
-in
-{
- options.myServices.ssh = let
- module = lib.types.submodule {
- options = {
- snippet = lib.mkOption {
- type = lib.types.lines;
- description = ''
- Snippet to use
- '';
- };
- dependencies = lib.mkOption {
- type = lib.types.listOf lib.types.package;
- default = [];
- description = ''
- Dependencies of the package
- '';
- };
- };
- };
- in {
- predefinedModules = lib.mkOption {
- type = lib.types.attrsOf module;
- default = {
- regular = {
- snippet = builtins.readFile ./ldap_regular.sh;
- };
- };
- readOnly = true;
- description = ''
- Predefined modules
- '';
- };
- modules = lib.mkOption {
- type = lib.types.listOf module;
- default = [];
- description = ''
- List of modules to enable
- '';
- };
- };
- config = {
- networking.firewall.allowedTCPPorts = [ 22 ];
- } // (lib.mkIf (builtins.length cfg.modules > 0) {
-
- services.openssh.extraConfig = ''
- AuthorizedKeysCommand /etc/ssh/ldap_authorized_keys
- AuthorizedKeysCommandUser nobody
- '';
-
- secrets.keys."ssh-ldap" = {
- user = "nobody";
- group = "nogroup";
- permissions = "0400";
- text = config.myEnv.sshd.ldap.password;
- };
- system.activationScripts.sshd = {
- deps = [ "secrets" ];
- text = ''
- install -Dm400 -o nobody -g nogroup -T ${config.secrets.fullPaths."ssh-ldap"} /etc/ssh/ldap_password
- '';
- };
- # ssh is strict about parent directory having correct rights, don't
- # move it in the nix store.
- environment.etc."ssh/ldap_authorized_keys" = let
- deps = lib.lists.unique (
- [ pkgs.which pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.gnused pkgs.coreutils ]
- ++ lib.flatten (map (v: v.dependencies) cfg.modules)
- );
- fullScript = pkgs.runCommand "ldap_authorized_keys" {
- snippets = builtins.concatStringsSep "\n" (map (v: v.snippet) cfg.modules);
- } ''
- substituteAll ${./ldap_authorized_keys.sh} $out
- chmod a+x $out
- '';
- ldap_authorized_keys = pkgs.runCommand "ldap_authorized_keys" {
- buildInputs = [ pkgs.makeWrapper ];
- } ''
- makeWrapper "${fullScript}" "$out" --prefix PATH : ${lib.makeBinPath deps}
- '';
- in {
- enable = true;
- mode = "0755";
- user = "root";
- source = ldap_authorized_keys;
- };
- });
-}
diff --git a/modules/private/ssh/ldap_authorized_keys.sh b/modules/private/ssh/ldap_authorized_keys.sh
deleted file mode 100755
index 402f283..0000000
--- a/modules/private/ssh/ldap_authorized_keys.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env bash
-
-LDAPSEARCH=ldapsearch
-KEY="immaeSshKey"
-LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu"
-LDAP_PASS=$(cat /etc/ssh/ldap_password)
-LDAP_HOST="ldap.immae.eu"
-LDAP_BASE="dc=immae,dc=eu"
-
-suitable_for() {
- type_for="$1"
- key="$2"
-
- if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
- echo "$key"
- else
- key_type=$(cut -d " " -f 1 <<< "$key")
-
- if grep -q "\b-$type_for\b" <<< "$key_type"; then
- echo ""
- elif grep -q "\b$type_for\b" <<< "$key_type"; then
- echo $(sed -e "s/^[^ ]* //g" <<< "$key")
- else
- echo ""
- fi
- fi
-}
-
-clean_key_line() {
- type_for="$1"
- line="$2"
-
- if [[ "$line" == $KEY::* ]]; then
- # base64 keys should't happen, unless wrong copy-pasting
- key=""
- else
- key=$(sed -e "s/^$KEY: *//" -e "s/ *$//" <<< "$line")
- fi
-
- suitable_for "$type_for" "$key"
-}
-
-ldap_search() {
- $LDAPSEARCH -h $LDAP_HOST -ZZ -b $LDAP_BASE -D $LDAP_BIND -w "$LDAP_PASS" -x -o ldif-wrap=no -LLL "$@"
-}
-
-ldap_keys() {
- user=$1;
- @snippets@
-}
-
-ldap_keys $@
diff --git a/modules/private/ssh/ldap_regular.sh b/modules/private/ssh/ldap_regular.sh
deleted file mode 100644
index 4c2f47e..0000000
--- a/modules/private/ssh/ldap_regular.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh
-LDAP_MEMBER="cn=users,cn=ssh,ou=services,dc=immae,dc=eu"
-
-ldap_search '(&(memberOf='$LDAP_MEMBER')('$KEY'=*)(uid='$user'))' $KEY | \
- while read line ;
- do
- if [ ! -z "$line" ]; then
- if [[ $line == dn* ]]; then
- user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line")
- elif [[ $line == $KEY* ]]; then
- key=$(clean_key_line ssh "$line")
- if [ ! -z "$key" ]; then
- if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
- echo $key
- fi
- fi
- fi
- fi
- done
diff --git a/modules/private/system.nix b/modules/private/system.nix
deleted file mode 100644
index 5f3d79e..0000000
--- a/modules/private/system.nix
+++ /dev/null
@@ -1,98 +0,0 @@
-{ pkgs, lib, config, name, nodes, ... }:
-{
- config = {
- deployment.secrets."secret_vars.yml" = {
- source = builtins.toString ../../nixops/secrets/vars.yml;
- destination = config.secrets.secretsVars;
- owner.user = "root";
- owner.group = "root";
- permissions = "0400";
- };
-
- networking.extraHosts = builtins.concatStringsSep "\n"
- (lib.mapAttrsToList (n: v: "${v.config.hostEnv.ips.main.ip4} ${n}") nodes);
-
- users.extraUsers.root.openssh.authorizedKeys.keys = [ config.myEnv.sshd.rootKeys.nix_repository ];
- secrets.deleteSecretsVars = true;
- secrets.gpgKeys = [
- ../../nixops/public_keys/Immae.pub
- ];
- secrets.secretsVars = "/run/keys/vars.yml";
-
- services.openssh.enable = true;
-
- nixpkgs.overlays = builtins.attrValues (import ../../overlays) ++ [
- (self: super: {
- postgresql = self.postgresql_pam;
- mariadb = self.mariadb_pam;
- }) # don’t put them as generic overlay because of home-manager
- ];
-
- services.journald.extraConfig = ''
- #Should be "warning" but disabled for now, it prevents anything from being stored
- MaxLevelStore=info
- MaxRetentionSec=1year
- '';
-
- users.users =
- builtins.listToAttrs (map (x: lib.attrsets.nameValuePair x.name ({
- isNormalUser = true;
- home = "/home/${x.name}";
- createHome = true;
- linger = true;
- } // x)) (config.hostEnv.users pkgs))
- // {
- root.packages = let
- nagios-cli = pkgs.writeScriptBin "nagios-cli" ''
- #!${pkgs.stdenv.shell}
- sudo -u naemon ${pkgs.nagios-cli}/bin/nagios-cli -c ${./monitoring/nagios-cli.cfg}
- '';
- in
- [
- pkgs.telnet
- pkgs.htop
- pkgs.iftop
- pkgs.bind.dnsutils
- pkgs.httpie
- pkgs.iotop
- pkgs.whois
- pkgs.ngrep
- pkgs.tcpdump
- pkgs.tshark
- pkgs.tcpflow
- # pkgs.mitmproxy # failing
- pkgs.nmap
- pkgs.p0f
- pkgs.socat
- pkgs.lsof
- pkgs.psmisc
- pkgs.openssl
- pkgs.wget
-
- pkgs.cnagios
- nagios-cli
-
- pkgs.pv
- pkgs.smartmontools
- ];
- };
-
- users.mutableUsers = lib.mkDefault false;
-
- environment.etc.cnagios.source = "${pkgs.cnagios}/share/doc/cnagios";
- environment.systemPackages = [
- pkgs.git
- pkgs.vim
- pkgs.rsync
- pkgs.strace
- ] ++
- (lib.optional (builtins.length (config.hostEnv.users pkgs) > 0) pkgs.home-manager);
-
- systemd.targets.maintenance = {
- description = "Maintenance target with only sshd";
- after = [ "network-online.target" "sshd.service" ];
- requires = [ "network-online.target" "sshd.service" ];
- unitConfig.AllowIsolate = "yes";
- };
- };
-}
diff --git a/modules/private/system/backup-2.nix b/modules/private/system/backup-2.nix
deleted file mode 100644
index c01a666..0000000
--- a/modules/private/system/backup-2.nix
+++ /dev/null
@@ -1,137 +0,0 @@
-{ config, pkgs, resources, name, ... }:
-{
- deployment = {
- targetUser = "root";
- targetHost = config.hostEnv.ips.main.ip4;
- substituteOnDestination = true;
- };
- # ssh-keyscan backup-2 | nix-shell -p ssh-to-age --run ssh-to-age
- secrets.ageKeys = [ "age1kk3nr27qu42j28mcfdag5lhq0zu2pky7gfanvne8l4z2ctevjpgskmw0sr" ];
- secrets.keys = {
- "rsync_backup/identity" = {
- user = "backup";
- group = "backup";
- permissions = "0400";
- text = config.myEnv.rsync_backup.ssh_key.private;
- };
- "rsync_backup/identity.pub" = {
- user = "backup";
- group = "backup";
- permissions = "0444";
- text = config.myEnv.rsync_backup.ssh_key.public;
- };
- };
- boot.kernelPackages = pkgs.linuxPackages_latest;
- myEnv = import ../../../nixops/secrets/environment.nix;
-
- imports = [ ] ++ builtins.attrValues (import ../..);
-
- fileSystems = {
- "/backup2" = {
- fsType = "ext4";
- device = "UUID=b9425333-f567-435d-94d8-b26c22d93426";
- };
- "/" = { device = "/dev/sda1"; fsType = "ext4"; };
- };
-
- networking = {
- firewall.enable = true;
- interfaces."ens3".ipv4.addresses = pkgs.lib.attrsets.mapAttrsToList
- (n: ips: { address = ips.ip4; prefixLength = 32; })
- (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips);
- interfaces."ens3".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList
- (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or []))
- config.hostEnv.ips);
- defaultGateway6 = { address = "fe80::1"; interface = "ens3"; };
- };
-
- boot.loader.grub.device = "nodev";
-
- myServices.certificates.enable = true;
- security.acme.certs."${name}" = {
- user = config.services.nginx.user;
- group = config.services.nginx.group;
- };
- services.nginx = {
- enable = true;
- recommendedOptimisation = true;
- recommendedGzipSettings = true;
- recommendedProxySettings = true;
- };
- networking.firewall.allowedTCPPorts = [ 80 443 ];
-
- services.cron = {
- mailto = "cron@immae.eu";
- enable = true;
- };
-
- services.rsyncBackup = {
- mountpoint = "/backup2";
- profiles = config.myEnv.rsync_backup.profiles;
- ssh_key_public = config.secrets.fullPaths."rsync_backup/identity.pub";
- ssh_key_private = config.secrets.fullPaths."rsync_backup/identity";
- };
-
- myServices.mailRelay.enable = true;
- myServices.mailBackup.enable = true;
- myServices.monitoring.enable = true;
- myServices.databasesReplication = {
- postgresql = {
- enable = true;
- base = "/backup2";
- mainPackage = pkgs.postgresql;
- hosts = {
- eldiron = {
- slot = "backup_2";
- connection = "postgresql://backup-2:${config.hostEnv.ldap.password}@eldiron.immae.eu";
- package = pkgs.postgresql;
- };
- };
- };
- mariadb = {
- enable = true;
- base = "/backup2";
- hosts = {
- eldiron = {
- serverId = 2;
- # mysql resolves "backup-2" host and checks the ip, but uses /etc/hosts which only contains ip4
- host = config.myEnv.servers.eldiron.ips.main.ip4;
- port = "3306";
- user = "backup-2";
- password = config.hostEnv.ldap.password;
- dumpUser = "root";
- dumpPassword = config.myEnv.databases.mysql.systemUsers.root;
- };
- };
- };
- redis = {
- enable = true;
- base = "/backup2";
- hosts = {
- eldiron = {
- host = "127.0.0.1";
- port = "16379";
- };
- };
- };
- openldap = {
- enable = true;
- base = "/backup2";
- hosts = {
- eldiron = {
- url = "ldaps://${config.myEnv.ldap.host}:636";
- dn = config.myEnv.ldap.replication_dn;
- password = config.myEnv.ldap.replication_pw;
- base = config.myEnv.ldap.base;
- };
- };
- };
- };
-
- # This value determines the NixOS release with which your system is
- # to be compatible, in order to avoid breaking some software such as
- # database servers. You should change this only after NixOS release
- # notes say you should.
- # https://nixos.org/nixos/manual/release-notes.html
- system.stateVersion = "20.03"; # Did you read the comment?
-}
diff --git a/modules/private/system/dilion.nix b/modules/private/system/dilion.nix
deleted file mode 100644
index fa92cd9..0000000
--- a/modules/private/system/dilion.nix
+++ /dev/null
@@ -1,242 +0,0 @@
-{ config, pkgs, name, lib, ... }:
-{
- deployment = {
- targetUser = "root";
- targetHost = config.hostEnv.ips.main.ip4;
- substituteOnDestination = true;
- };
- # ssh-keyscan dilion | nix-shell -p ssh-to-age --run ssh-to-age
- secrets.ageKeys = [ "age1x49n6qa0arkdpq8530s7umgm0gqkq90exv4jep97q30rfnzknpaqate06a" ];
- nixpkgs.system = lib.mkOverride 900 "x86_64-linux";
- boot = {
- loader = {
- grub = {
- version = 2;
- devices = [ "/dev/sda" "/dev/sdb" "/dev/sdc" "/dev/sdd" ];
- };
- timeout = 1;
- };
- blacklistedKernelModules = [ "nvidiafb" ];
- supportedFilesystems = [ "zfs" ];
- kernelPackages = pkgs.linuxPackages_latest;
- kernelModules = [ "kvm-intel" ];
- initrd.availableKernelModules = [ "ahci" "sd_mod" ];
- initrd.secrets = {
- "/boot/pass.key" = "/boot/pass.key";
- };
- kernel.sysctl."vm.nr_hugepages" = 256; # for xmr-stak
- # available in nixos-20.09
- #zfs.requestEncryptionCredentials = [ "zpool/root" ];
- };
- nix.maxJobs = 8;
- powerManagement.cpuFreqGovernor = "powersave";
- hardware.enableRedistributableFirmware = true;
-
- myEnv = import ../../../nixops/secrets/environment.nix;
-
- swapDevices = [ { label = "swap"; } ];
- fileSystems = {
- "/" = { fsType = "zfs"; device = "zpool/root"; };
- "/boot" = { fsType = "ext4"; device = "/dev/disk/by-uuid/fd1c511e-2bc0-49d5-b8bb-95e7e8c8c816"; };
- "/etc" = { fsType = "zfs"; device = "zpool/root/etc"; };
- "/home" = { fsType = "zfs"; device = "zpool/root/home"; };
- "/home/immae" = { fsType = "zfs"; device = "zpool/root/home/immae"; };
- "/tmp" = { fsType = "zfs"; device = "zpool/root/tmp"; };
- "/var" = { fsType = "zfs"; device = "zpool/root/var"; };
- "/data" = { fsType = "ext4"; label = "data"; };
- "/nix" = { fsType = "ext4"; label = "nix"; };
- };
-
- services.udev.extraRules = ''
- ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="10:bf:48:7f:e6:3b", NAME="eth0"
- '';
-
- networking = {
- hostId = "27c3048d"; # generated with head -c4 /dev/urandom | od -A none -t x4
- firewall.enable = false;
- interfaces."eth0".ipv4.addresses =
- [ { address = config.hostEnv.ips.main.ip4; prefixLength = 27; } ]
- ++ pkgs.lib.attrsets.mapAttrsToList
- (n: ips: { address = ips.ip4; prefixLength = 32; })
- (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips);
- interfaces."eth0".ipv6.addresses =
- [ { address = "2a01:4f8:141:53e7::"; prefixLength = 64; } ]
- ++ pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList
- (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or []))
- config.hostEnv.ips);
- defaultGateway = { address = "176.9.10.225"; interface = "eth0"; };
- defaultGateway6 = { address = "fe80::1"; interface = "eth0"; };
- nameservers = [
- "213.133.98.98"
- "213.133.99.99"
- "213.133.100.100"
- "2a01:4f8:0:a0a1::add:1010"
- "2a01:4f8:0:a102::add:9999"
- "2a01:4f8:0:a111::add:9898"
- ];
- };
-
- myServices.ssh.modules = [ config.myServices.ssh.predefinedModules.regular ];
- imports = builtins.attrValues (import ../..) ++ [ ./dilion/vms.nix ];
-
- system.nssModules = [ pkgs.libvirt ];
- system.nssDatabases.hosts = lib.mkForce [ "files" "libvirt_guest" "mymachines" "dns" "myhostname" ];
- programs.zsh.enable = true;
-
- users.users.libvirt = {
- hashedPassword = "!";
- shell = pkgs.bashInteractive;
- isSystemUser = true;
- group = "libvirtd";
- packages = [ pkgs.netcat-openbsd ];
- openssh.authorizedKeys.keys = [
- config.myEnv.buildbot.ssh_key.public
- config.myEnv.sshd.rootKeys.ismael_flony
- ];
- };
-
- users.users.backup = {
- hashedPassword = "!";
- isSystemUser = true;
- extraGroups = [ "keys" ];
- shell = pkgs.bashInteractive;
- openssh.authorizedKeys.keys = let
- zreplConfig = config.secrets.fullPaths."zrepl/zrepl.yml";
- in
- ["command=\"${pkgs.zrepl}/bin/zrepl stdinserver --config ${zreplConfig} eldiron\",restrict ${config.myEnv.zrepl_backup.ssh_key.public}"];
- };
- security.sudo.extraRules = pkgs.lib.mkAfter [
- {
- commands = [
- { command = "/home/immae/.nix-profile/root_scripts/*"; options = [ "NOPASSWD" ]; }
- ];
- users = [ "immae" ];
- runAs = "root";
- }
- ];
-
- system.activationScripts.libvirtd_exports = ''
- install -m 0755 -o root -g root -d /var/lib/caldance
- '';
- virtualisation.docker.enable = true;
- virtualisation.docker.storageDriver = "zfs";
- virtualisation.libvirtd.enable = true;
- users.extraUsers.immae.extraGroups = [ "libvirtd" "docker" ];
- systemd.services.libvirtd.postStart = ''
- install -m 0770 -g libvirtd -d /var/lib/libvirt/images
- '';
- systemd.services.socat-caldance = {
- description = "Forward ssh port to caldance";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- serviceConfig = {
- ExecStart = "${pkgs.socat}/bin/socat TCP-LISTEN:8022,fork TCP:caldance:22";
- };
- };
-
- time.timeZone = "Europe/Paris";
- nix = {
- useSandbox = "relaxed";
- extraOptions = ''
- keep-outputs = true
- keep-derivations = true
- allow-unsafe-native-code-during-evaluation = true
- experimental-features = nix-command flakes
- #Assumed in NUR
- allow-import-from-derivation = true
- '';
- };
-
- security.pki.certificateFiles = [
- (pkgs.fetchurl {
- url = "http://downloads.e.eriomem.net/eriomemca.pem";
- sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh";
- })
- ];
-
- # This is equivalent to setting environment.sessionVariables.NIX_PATH
- nix.nixPath = [
- "home-manager=${pkgs.sources.home-manager.url}"
- "nixpkgs=${pkgs.sources.nixpkgs-home-manager.url}"
- ];
- nix.binaryCaches = [ "https://hydra.iohk.io" "https://cache.nixos.org" ];
- nix.binaryCachePublicKeys = [ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" ];
-
- myServices.monitoring.enable = true;
- myServices.certificates.enable = true;
- security.acme.certs."${name}-immae" = config.myServices.certificates.certConfig // {
- user = "immae";
- domain = "dilion.immae.eu";
- };
- security.acme.certs."${name}" = {
- user = config.services.nginx.user;
- group = config.services.nginx.group;
- extraDomains = {
- "dilion.immae.dev" = null;
- "caldance.cs.immae.dev" = null;
- };
- };
- services.nginx = {
- enable = true;
- recommendedOptimisation = true;
- recommendedGzipSettings = true;
- recommendedProxySettings = true;
- upstreams = {
- caldance.servers."caldance:3031" = {};
- };
- virtualHosts = {
- "dilion.immae.dev" = {
- acmeRoot = config.myServices.certificates.webroot;
- useACMEHost = name;
- forceSSL = true;
- root = "/home/immae/www";
- };
- "caldance.cs.immae.dev" = {
- acmeRoot = config.myServices.certificates.webroot;
- useACMEHost = name;
- forceSSL = true;
- locations."/".extraConfig = ''
- uwsgi_pass caldance;
- '';
- locations."/static/".alias = "/var/lib/caldance/caldance/app/www/static/";
- locations."/media/".alias = "/var/lib/caldance/caldance/media/";
- extraConfig = ''
- auth_basic "Authentification requise";
- auth_basic_user_file ${pkgs.writeText "htpasswd" config.myEnv.websites.caldance.integration.password};
- '';
- };
- };
- };
-
- systemd.services.zrepl.serviceConfig.RuntimeDirectory = lib.mkForce "zrepl zrepl/stdinserver";
- systemd.services.zrepl.serviceConfig.User = "backup";
- # zfs allow backup create,mount,receive,destroy,rename,snapshot,hold,bookmark,release zpool/backup
- services.zrepl = {
- enable = true;
- config = ''
- global:
- control:
- sockpath: /run/zrepl/control
- serve:
- stdinserver:
- sockdir: /run/zrepl/stdinserver
- jobs:
- - type: sink
- # must not change
- name: "backup-from-eldiron"
- root_fs: "zpool/backup"
- serve:
- type: stdinserver
- client_identities:
- - eldiron
- '';
- };
- # This value determines the NixOS release with which your system is
- # to be compatible, in order to avoid breaking some software such as
- # database servers. You should change this only after NixOS release
- # notes say you should.
- # https://nixos.org/nixos/manual/release-notes.html
- system.stateVersion = "20.03"; # Did you read the comment?
-}
-
diff --git a/modules/private/system/dilion/vms.nix b/modules/private/system/dilion/vms.nix
deleted file mode 100644
index af96622..0000000
--- a/modules/private/system/dilion/vms.nix
+++ /dev/null
@@ -1,185 +0,0 @@
-# inspired from https://nixos.wiki/wiki/Virtualization_in_NixOS
-{ config, pkgs, lib, ... }@args:
-let
- pools = {
- niximages = {
- type = "dir";
- target = "/etc/libvirtd/base-images";
- };
- buildbot-disks = rec {
- preStart = ''
- mkdir -p ${target}
- '';
- type = "dir";
- target = "/var/lib/libvirt/images/buildbot-disks";
- };
- zfspool = {
- # pool-define-as --name zfspool --source-name zpool/libvirt --type zfs
- type = "zfs";
- xml = ''
-
- zpool/libvirt
-
- '';
- };
- };
- networks = {
- immae = {
- bridgeNumber = "1";
- ipRange = "192.168.100";
- };
- };
- guests = {
- caldance = {
- pool = "zfspool";
- cpus = "1";
- memory = "2";
- network = "immae";
- diskSize = "10GiB";
- extraDevicesXML = ''
-
-
-
-
- '';
- };
- buildbot = {
- pool = "zfspool";
- cpus = "1";
- memory = "3";
- network = "immae";
- diskSize = "10GiB";
- destroyVolumeOnExit = true;
- };
- };
- toImage = f: "${import ./vms/base_image.nix f (args // { myEnv = config.myEnv; })}/nixos.qcow2";
-in
-{
- environment.etc."libvirtd/base-images/nixos.qcow2".source = toImage ./vms/base_configuration.nix;
- environment.etc."libvirtd/base-images/buildbot.qcow2".source = toImage ./vms/buildbot_configuration.nix;
- systemd.services = lib.mapAttrs' (name: guest: lib.nameValuePair "libvirtd-guest-${name}" {
- after = [ "libvirtd.service" "libvirtd-pool-${guest.pool}.service" "libvirtd-network-${guest.network}.service" ];
- requires = [ "libvirtd.service" "libvirtd-pool-${guest.pool}.service" "libvirtd-network-${guest.network}.service" ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- Type = "oneshot";
- RemainAfterExit = "yes";
- };
- script =
- let
- xml = pkgs.writeText "libvirt-guest-${name}.xml"
- ''
-
- ${name}
- UUID
- ${guest.memory}
- ${guest.cpus}
-
- hvm
-
-
- /run/current-system/sw/bin/qemu-system-x86_64
-
-
-
-
- ${guest.extraDevicesXML or ""}
-
-
-
-
-
-
-
-
-
-
- '';
- in
- guest.preStart or "" + ''
- if ! ${pkgs.libvirt}/bin/virsh vol-key 'guest-${name}' --pool ${guest.pool} &> /dev/null; then
- ${pkgs.libvirt}/bin/virsh vol-create-as --pool ${guest.pool} --name 'guest-${name}' --capacity '${guest.diskSize}'
- volume_path=$(${pkgs.libvirt}/bin/virsh vol-path --pool ${guest.pool} --vol 'guest-${name}')
- ${pkgs.qemu}/bin/qemu-img convert /etc/libvirtd/base-images/nixos.qcow2 $volume_path
- fi
- uuid="$(${pkgs.libvirt}/bin/virsh domuuid '${name}' || true)"
- ${pkgs.libvirt}/bin/virsh define <(sed "s/UUID/$uuid/" '${xml}')
- ${pkgs.libvirt}/bin/virsh start '${name}'
- '';
- preStop = ''
- ${pkgs.libvirt}/bin/virsh shutdown '${name}'
- let "timeout = $(date +%s) + 10"
- while [ "$(${pkgs.libvirt}/bin/virsh list --name | grep --count '^${name}$')" -gt 0 ]; do
- if [ "$(date +%s)" -ge "$timeout" ]; then
- # Meh, we warned it...
- ${pkgs.libvirt}/bin/virsh destroy '${name}'
- else
- # The machine is still running, let's give it some time to shut down
- sleep 0.5
- fi
- done
- '' + lib.optionalString (guest.destroyVolumeOnExit or false) ''
- if ${pkgs.libvirt}/bin/virsh vol-key 'guest-${name}' --pool ${guest.pool} &> /dev/null; then
- ${pkgs.libvirt}/bin/virsh vol-wipe --pool ${guest.pool} --vol 'guest-${name}' || true
- ${pkgs.libvirt}/bin/virsh vol-delete --pool ${guest.pool} --vol 'guest-${name}'
- fi
- '';
- }) guests // (lib.mapAttrs' (name: network: lib.nameValuePair "libvirtd-network-${name}" {
- after = [ "libvirtd.service" ];
- requires = [ "libvirtd.service" ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- Type = "oneshot";
- RemainAfterExit = "yes";
- };
- script = let
- xml = pkgs.writeText "libvirt-network-${name}.xml" ''
-
- ${name}
- UUID
-
-
-
-
-
-
-
-
-
- '';
- in ''
- uuid="$(${pkgs.libvirt}/bin/virsh net-uuid '${name}' || true)"
- ${pkgs.libvirt}/bin/virsh net-define <(sed "s/UUID/$uuid/" '${xml}')
- ${pkgs.libvirt}/bin/virsh net-start '${name}'
- '';
- preStop = ''
- ${pkgs.libvirt}/bin/virsh net-destroy '${name}'
- '';
- }) networks) // (lib.mapAttrs' (name: pool: lib.nameValuePair "libvirtd-pool-${name}" {
- after = [ "libvirtd.service" ];
- requires = [ "libvirtd.service" ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- Type = "oneshot";
- RemainAfterExit = "yes";
- };
- script = let
- xml = pkgs.writeText "libvirt-pool-${name}.xml" ''
-
- ${name}
- UUID
- ${pool.xml or ""}
- ${if pool ? target then ''
-
- ${pool.target}
-
- '' else ""}
-
- '';
- in pool.preStart or "" + ''
- uuid="$(${pkgs.libvirt}/bin/virsh pool-uuid '${name}' || true)"
- ${pkgs.libvirt}/bin/virsh pool-define <(sed "s/UUID/$uuid/" '${xml}')
- ${pkgs.libvirt}/bin/virsh pool-start '${name}' || true
- '';
- }) pools);
-}
diff --git a/modules/private/system/dilion/vms/base_configuration.nix b/modules/private/system/dilion/vms/base_configuration.nix
deleted file mode 100644
index e2caba2..0000000
--- a/modules/private/system/dilion/vms/base_configuration.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ lib, config, ... }@args:
-{
- options.myEnv = (import ../../../environment.nix (args // { name = "dummy"; })).options.myEnv;
- config = {
- fileSystems."/".device = "/dev/disk/by-label/nixos";
- boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "virtio_balloon" "virtio_blk" "virtio_pci" "virtio_ring" ];
- boot.loader = {
- grub = {
- version = 2;
- device = "/dev/vda";
- };
- timeout = 0;
- };
- services.openssh.enable = true;
- networking.firewall.allowedTCPPorts = [ 22 ];
- users = {
- mutableUsers = false;
- users.root.openssh.authorizedKeys.keys = [ config.myEnv.sshd.rootKeys.immae_dilion ];
- };
- };
-}
diff --git a/modules/private/system/dilion/vms/base_image.nix b/modules/private/system/dilion/vms/base_image.nix
deleted file mode 100644
index 8de8560..0000000
--- a/modules/private/system/dilion/vms/base_image.nix
+++ /dev/null
@@ -1,94 +0,0 @@
-configuration_file: { pkgs ? import {}, system ? builtins.currentSystem, myEnv, ... }:
-let
- config = (import {
- inherit system;
- modules = [ {
- myEnv = myEnv;
- imports = [ configuration_file ];
-
- # We want our template image to be as small as possible, but the deployed image should be able to be
- # of any size. Hence we resize on the first boot.
- systemd.services.resize-main-fs = {
- wantedBy = [ "multi-user.target" ];
- serviceConfig.Type = "oneshot";
- script =
- ''
- # Resize main partition to fill whole disk
- echo ", +" | ${pkgs.utillinux}/bin/sfdisk /dev/vda --no-reread -N 1
- ${pkgs.parted}/bin/partprobe
- # Resize filesystem
- ${pkgs.e2fsprogs}/bin/resize2fs /dev/vda1
- '';
- };
- } ];
- }).config;
-in pkgs.vmTools.runInLinuxVM (
- pkgs.runCommand "nixos-base-image"
- {
- memSize = 768;
- preVM =
- ''
- mkdir $out
- diskImage=image.qcow2
- ${pkgs.vmTools.qemu}/bin/qemu-img create -f qcow2 $diskImage 2G
- mv closure xchg/
- '';
- postVM =
- ''
- echo compressing VM image...
- ${pkgs.vmTools.qemu}/bin/qemu-img convert -c $diskImage -O qcow2 $out/nixos.qcow2
- '';
- buildInputs = [ pkgs.utillinux pkgs.perl pkgs.parted pkgs.e2fsprogs ];
- exportReferencesGraph =
- [ "closure" config.system.build.toplevel ];
- }
- ''
- # Create the partition
- parted /dev/vda mklabel msdos
- parted /dev/vda -- mkpart primary ext4 1M -1s
-
- # Format the partition
- mkfs.ext4 -L nixos /dev/vda1
- mkdir /mnt
- mount /dev/vda1 /mnt
-
- for dir in dev proc sys; do
- mkdir /mnt/$dir
- mount --bind /$dir /mnt/$dir
- done
-
- storePaths=$(perl ${pkgs.pathsFromGraph} /tmp/xchg/closure)
- echo filling Nix store...
- mkdir -p /mnt/nix/store
- set -f
- cp -prd $storePaths /mnt/nix/store
- # The permissions will be set up incorrectly if the host machine is not running NixOS
- chown -R 0:30000 /mnt/nix/store
-
- mkdir -p /mnt/etc/nix
- echo 'build-users-group = ' > /mnt/etc/nix/nix.conf
-
- # Register the paths in the Nix database.
- export USER=root
- printRegistration=1 perl ${pkgs.pathsFromGraph} /tmp/xchg/closure | \
- chroot /mnt ${config.nix.package.out}/bin/nix-store --load-db
-
- # Create the system profile to allow nixos-rebuild to work.
- chroot /mnt ${config.nix.package.out}/bin/nix-env \
- -p /nix/var/nix/profiles/system --set ${config.system.build.toplevel}
-
- # `nixos-rebuild' requires an /etc/NIXOS.
- mkdir -p /mnt/etc/nixos
- touch /mnt/etc/NIXOS
-
- # `switch-to-configuration' requires a /bin/sh
- mkdir -p /mnt/bin
- ln -s ${config.system.build.binsh}/bin/sh /mnt/bin/sh
-
- # Generate the GRUB menu.
- chroot /mnt ${config.system.build.toplevel}/bin/switch-to-configuration boot
-
- umount /mnt/{proc,dev,sys}
- umount /mnt
- ''
-)
diff --git a/modules/private/system/dilion/vms/buildbot_configuration.nix b/modules/private/system/dilion/vms/buildbot_configuration.nix
deleted file mode 100644
index 05b02d4..0000000
--- a/modules/private/system/dilion/vms/buildbot_configuration.nix
+++ /dev/null
@@ -1,67 +0,0 @@
-{ pkgs, config, lib, ... }:
-{
- imports = [
-
- ./base_configuration.nix
- ];
- systemd.services.buildbot-worker.serviceConfig.ExecStartPre = let
- cfg = config.services.buildbot-worker;
- script = pkgs.writeScript "decode-dmi" ''
- #!${pkgs.stdenv.shell}
-
- mkdir -vp "${cfg.buildbotDir}"
- varfile=${cfg.buildbotDir}/variables
- rm $varfile || true
- echo "[DEFAULT]" > $varfile
- strings=$(${pkgs.dmidecode}/bin/dmidecode --oem-string count)
- for i in $(seq 1 $strings); do
- ${pkgs.dmidecode}/bin/dmidecode --oem-string $i >> $varfile
- done
- chown -R ${cfg.user}:${cfg.group} ${cfg.buildbotDir}
- '';
- in
- lib.mkForce ["+${script}"];
- systemd.services.buildbot-worker.serviceConfig.ExecStart = let
- cfg = config.services.buildbot-worker;
- tacFile = pkgs.writeText "buildbot-worker.tac" ''
- import os
- from io import open
-
- from buildbot_worker.bot import Worker
- from twisted.application import service
-
- basedir = '${cfg.buildbotDir}'
-
- # note: this line is matched against to check that this is a worker
- # directory; do not edit it.
- application = service.Application('buildbot-worker')
-
- import configparser
- config = config = configparser.ConfigParser()
- config.read("${cfg.buildbotDir}/variables")
- master_url_split = config["DEFAULT"]["buildbot_master_url"].split(':')
- buildmaster_host = master_url_split[0]
- port = int(master_url_split[1])
- workername = config["DEFAULT"]["buildbot_worker_name"]
-
- with open('${cfg.workerPassFile}', 'r', encoding='utf-8') as passwd_file:
- passwd = passwd_file.read().strip('\r\n')
- keepalive = ${toString cfg.keepalive}
- umask = None
- maxdelay = 300
- numcpus = None
- allow_shutdown = None
-
- s = Worker(buildmaster_host, port, workername, passwd, basedir,
- keepalive, umask=umask, maxdelay=maxdelay,
- numcpus=numcpus, allow_shutdown=allow_shutdown)
- s.setServiceParent(application)
- '';
- in
- lib.mkForce "${cfg.package.pythonModule.pkgs.twisted}/bin/twistd --nodaemon --pidfile= --logfile - --python ${tacFile}";
- services.buildbot-worker = {
- enable = true;
- workerPass = config.myEnv.buildbot.workerPassword;
- packages = [ pkgs.git pkgs.gzip pkgs.openssh ];
- };
-}
diff --git a/modules/private/system/eldiron.nix b/modules/private/system/eldiron.nix
deleted file mode 100644
index 8b2784d..0000000
--- a/modules/private/system/eldiron.nix
+++ /dev/null
@@ -1,228 +0,0 @@
-{ config, pkgs, lib, ... }:
-{
- deployment = {
- targetUser = "root";
- targetHost = config.hostEnv.ips.main.ip4;
- substituteOnDestination = true;
- };
- # ssh-keyscan eldiron | nix-shell -p ssh-to-age --run ssh-to-age
- secrets.ageKeys = [ "age1dxr5lhvtnjssfaqpnf6qx80h8gfwkxg3tdf35m6n9wljmk7wadfs3kmahj" ];
- boot = {
- kernelModules = [ "kvm-intel" ];
- blacklistedKernelModules = [ "nvidiafb" ];
- loader.timeout = 1;
- loader.grub.devices = [ "/dev/sda" "/dev/sdb" ];
- kernel.sysctl = {
- # https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md
- "net.ipv4.tcp_sack" = 0;
- };
- supportedFilesystems = [ "zfs" ];
- kernelParams = ["zfs.zfs_arc_max=6442450944"];
- kernelPackages = pkgs.linuxPackages_latest;
- initrd.availableKernelModules = [ "ahci" "sd_mod" ];
- initrd.secrets = {
- "/boot/pass.key" = "/boot/pass.key";
- };
- };
- services.udev.extraRules = ''
- ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="c8:60:00:56:a0:88", NAME="eth0"
- '';
- nix.maxJobs = 8;
- powerManagement.cpuFreqGovernor = "powersave";
- myEnv = import ../../../nixops/secrets/environment.nix;
-
- fileSystems = {
- # pools:
- # zpool: ashift=12
- # zfast: ashift=12
- # zfs:
- # zpool/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy
- # zpool/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key
- # zpool/root/var: atime=on
- # zfast/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy
- # zfast/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key
- # zfast/root/etc: ø
- # zfast/root/nix: ø
- # zfast/root/tmp: async=disabled
- # zfast/root/var: atime=on
- # zfast/root/var/lib: ø
- # zfast/root/var/lib/mysql: logbias=throughput ; atime=off ; primarycache=metadata
- # zfast/root/var/lib/postgresql: recordsize=8K ; atime=off ; logbias=throughput
- # zfast/root/var/lib/postgresql/11.0: ø
- # zfast/root/var/lib/postgresql/11.0/pg_wal: ø
- "/" = { fsType = "zfs"; device = "zpool/root"; };
- "/boot" = { fsType = "ext4"; device = "/dev/disk/by-uuid/e6bb18fb-ff56-4b5f-ae9f-e60d40dc0622"; };
- "/etc" = { fsType = "zfs"; device = "zpool/root/etc"; };
- "/nix" = { fsType = "zfs"; device = "zfast/root/nix"; };
- "/tmp" = { fsType = "zfs"; device = "zfast/root/tmp"; };
- "/var" = { fsType = "zfs"; device = "zpool/root/var"; };
- "/var/lib/mysql" = { fsType = "zfs"; device = "zfast/root/var/lib/mysql"; };
- "/var/lib/postgresql" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql"; };
- "/var/lib/postgresql/11.0" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0"; };
- "/var/lib/postgresql/11.0/pg_wal" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0/pg_wal"; };
- };
- swapDevices = [ { label = "swap1"; } { label = "swap2"; } ];
- hardware.enableRedistributableFirmware = true;
-
- services.zfs = {
- autoScrub = {
- enable = false;
- };
- };
- networking = {
- hostId = "8262ca33"; # generated with head -c4 /dev/urandom | od -A none -t x4
- firewall.enable = true;
- # FIXME: on next reboot, remove the /27 and the localCommands
- interfaces."eth0".ipv4.addresses =
- pkgs.lib.attrsets.mapAttrsToList
- (n: ips: { address = ips.ip4; prefixLength = 32; })
- (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips)
- ++ [ { address = config.hostEnv.ips.main.ip4; prefixLength = 27; } ];
- interfaces."eth0".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList
- (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or []))
- config.hostEnv.ips);
- defaultGateway = "176.9.151.65";
- localCommands = ''
- # FIXME: Those commands were added by nixops and may not be
- # actually needed
- ip -6 addr add '2a01:4f8:160:3445::/64' dev 'eth0' || true
- ip -4 route change '176.9.151.64/27' via '176.9.151.65' dev 'eth0' || true
- ip -6 route add default via 'fe80::1' dev eth0 || true
- '';
- nameservers = [
- "213.133.98.98"
- "213.133.99.99"
- "213.133.100.100"
- "2a01:4f8:0:a0a1::add:1010"
- "2a01:4f8:0:a102::add:9999"
- "2a01:4f8:0:a111::add:9898"
- ];
- };
-
- imports = builtins.attrValues (import ../..);
-
- myServices.buildbot.enable = true;
- myServices.databases.enable = true;
- myServices.gitolite.enable = true;
- myServices.monitoring.enable = true;
- myServices.irc.enable = true;
- myServices.pub.enable = true;
- myServices.tasks.enable = true;
- myServices.mpd.enable = true;
- myServices.dns.enable = true;
- myServices.certificates.enable = true;
- myServices.websites.enable = true;
- myServices.gemini.enable = true;
- myServices.mail.enable = true;
- myServices.ejabberd.enable = true;
- myServices.vpn.enable = true;
- myServices.ftp.enable = true;
-
- services.netdata.enable = true;
- services.netdata.config.global."memory mode" = "none";
- services.netdata.config.health."enabled" = "no";
- services.netdata.config.web.mode = "none";
- users.users."${config.services.netdata.user}".extraGroups = [ "keys" ];
- environment.etc."netdata/stream.conf".source = config.secrets.fullPaths."netdata-stream.conf";
- secrets.keys = {
- "netdata-stream.conf" = {
- user = config.services.netdata.user;
- group = config.services.netdata.group;
- permissions = "0400";
- text = ''
- [stream]
- enabled = yes
- destination = ${config.myEnv.monitoring.netdata_aggregator}
- api key = ${config.myEnv.monitoring.netdata_keys.eldiron}
- '';
- };
- "zrepl_backup/identity" = {
- user = "root";
- group = "root";
- permissions = "0400";
- text = config.myEnv.zrepl_backup.ssh_key.private;
- };
- };
- programs.ssh.knownHosts.dilion = {
- hostNames = ["dilion.immae.eu"];
- publicKey = let
- profile = config.myEnv.rsync_backup.profiles.dilion;
- in
- "${profile.host_key_type} ${profile.host_key}";
- };
-
- services.cron = {
- enable = true;
- mailto = "cron@immae.eu";
- systemCronJobs = [
- ''
- 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "immae.eu.*Recipient address rejected"
- # Need a way to blacklist properly
- # 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "NOQUEUE:"
- 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtp -g "status=bounced"
- ''
- ];
- };
-
- environment.systemPackages = [ pkgs.bindfs ];
-
- services.zrepl = {
- enable = true;
- config = let
- redis_dump = pkgs.writeScript "redis-dump" ''
- #! ${pkgs.stdenv.shell}
- ${pkgs.redis}/bin/redis-cli bgsave
- '';
- in ''
- jobs:
- - type: push
- # must not change
- name: "backup-to-dilion"
- filesystems:
- "zpool/root": true
- "zpool/root/etc": true
- "zpool/root/var<": true
- connect:
- type: ssh+stdinserver
- host: dilion.immae.eu
- user: backup
- port: 22
- identity_file: ${config.secrets.fullPaths."zrepl_backup/identity"}
- snapshotting:
- type: periodic
- prefix: zrepl_
- interval: 1h
- #hooks:
- # - type: mysql-lock-tables
- # dsn: "${config.myEnv.zrepl_backup.mysql.user}:${config.myEnv.zrepl_backup.mysql.password}@tcp(localhost)/"
- # filesystems:
- # "zpool/root/var": true
- # - type: command
- # path: ${redis_dump}
- # err_is_fatal: false
- # filesystems:
- # "zpool/root/var": true
- send:
- encrypted: true
- pruning:
- keep_sender:
- - type: regex
- regex: "^manual_.*"
- - type: grid
- grid: 24x1h | 7x1d | 4x7d | 6x30d
- regex: "^zrepl_.*"
- keep_receiver:
- - type: regex
- regex: "^manual_.*"
- - type: grid
- grid: 6x4h | 7x1d | 4x7d | 6x30d
- regex: "^zrepl_.*"
- '';
- };
- # This value determines the NixOS release with which your system is
- # to be compatible, in order to avoid breaking some software such as
- # database servers. You should change this only after NixOS release
- # notes say you should.
- # https://nixos.org/nixos/manual/release-notes.html
- system.stateVersion = "20.03"; # Did you read the comment?
-}
diff --git a/modules/private/system/monitoring-1.nix b/modules/private/system/monitoring-1.nix
deleted file mode 100644
index dea5f45..0000000
--- a/modules/private/system/monitoring-1.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{ config, pkgs, resources, ... }:
-{
- deployment = {
- targetUser = "root";
- targetHost = config.hostEnv.ips.main.ip4;
- substituteOnDestination = true;
- };
- # ssh-keyscan monitoring-1 | nix-shell -p ssh-to-age --run ssh-to-age
- secrets.ageKeys = [ "age1dn4lzhgxusqrpjjnzm7w8ml39ptf326htuzmpqdqs2gg3wq7cqzqxuvx8k" ];
- boot.kernelPackages = pkgs.linuxPackages_latest;
- myEnv = import ../../../nixops/secrets/environment.nix;
-
- imports = [ ] ++ builtins.attrValues (import ../..);
-
- myServices.monitoring.enable = true;
- myServices.monitoring.master = true;
- myServices.status.enable = true;
- networking = {
- firewall.enable = true;
- interfaces."ens3".ipv4.addresses = pkgs.lib.attrsets.mapAttrsToList
- (n: ips: { address = ips.ip4; prefixLength = 32; })
- (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips);
- interfaces."ens3".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList
- (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or []))
- config.hostEnv.ips);
- defaultGateway6 = { address = "fe80::1"; interface = "ens3"; };
- };
- boot.loader.grub.device = "nodev";
- fileSystems."/" = { device = "/dev/sda1"; fsType = "ext4"; };
- myServices.mailRelay.enable = true;
-
- security.pki.certificateFiles = [
- (pkgs.fetchurl {
- url = "http://downloads.e.eriomem.net/eriomemca.pem";
- sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh";
- })
- ];
-
- services.netdata.enable = true;
- services.netdata.config.web."allow dashboard from" = "localhost";
- services.netdata.config.web."allow badges from" = "*";
- services.netdata.config.web."allow streaming from" = "*";
- services.netdata.config.web."allow netdata.conf from" = "fd*";
- services.netdata.config.web."allow management from" = "fd*";
- networking.firewall.allowedTCPPorts = [ 19999 ];
- environment.etc."netdata/stream.conf".source = config.secrets.fullPaths."netdata-stream.conf";
-
- secrets.keys = {
- "netdata-stream.conf" = {
- user = config.services.netdata.user;
- group = config.services.netdata.group;
- permissions = "0400";
- text = builtins.concatStringsSep "\n" (pkgs.lib.mapAttrsToList (_: key: ''
- [${key}]
- enabled = yes
- default history = 3600
- default memory = ram
- health enabled by default = auto
- '') config.myEnv.monitoring.netdata_keys);
- };
- };
- users.users."${config.services.netdata.user}".extraGroups = [ "keys" ];
- # This value determines the NixOS release with which your system is
- # to be compatible, in order to avoid breaking some software such as
- # database servers. You should change this only after NixOS release
- # notes say you should.
- # https://nixos.org/nixos/manual/release-notes.html
- system.stateVersion = "20.03"; # Did you read the comment?
-}
diff --git a/modules/private/system/quatresaisons.nix b/modules/private/system/quatresaisons.nix
deleted file mode 100644
index 82db70f..0000000
--- a/modules/private/system/quatresaisons.nix
+++ /dev/null
@@ -1,436 +0,0 @@
-{ config, pkgs, lib, ... }:
-let
- serverSpecificConfig = config.myEnv.serverSpecific.quatresaisons;
- yarnModules = pkgs.yarn2nix-moretea.mkYarnModules rec {
- name = "landing";
- pname = name;
- version = "v1.0.0";
- packageJSON = "${pkgs.sources.webapps-landing}/package.json";
- yarnLock = "${pkgs.sources.webapps-landing}/yarn.lock";
- yarnNix = ../websites/tools/tools/landing/yarn-packages.nix;
- };
- toLanding = landingConfig: pkgs.stdenv.mkDerivation rec {
- pname = "landing";
- version = "v1.0.0";
- src = pkgs.sources.webapps-landing;
-
- buildInputs = [ yarnModules pkgs.yarn2nix-moretea.yarn ];
- configurePhase = ''
- ln -s ${yarnModules}/node_modules .
- '';
- buildPhase = ''
- yarn build
- '';
- installPhase = ''
- cp -a dist $out
- cp -f ${landingConfig} $out/config.yml
- ln -s service-worker.js $out/worker.js
- '';
- };
- normalUsers = serverSpecificConfig.users;
- sponsoredUser = pkgs.writeScriptBin "sponsored_user" ''
- #!/usr/bin/env bash
-
- set -euo pipefail
- [ -z "''${SUDO_USER+x}" ] && echo "Must be run with sudo" && exit 1
-
- mygroup=$(id -ng $SUDO_USER)
-
- sponsored=$(getent group $mygroup | cut -d':' -f4)
-
- echo "Sponsored users: ''${sponsored:-}"
-
- log () {
- touch /var/log/sponsored_users
- chmod go-rwx /var/log/sponsored_users
- echo "`date` $mygroup $1" | LANG=C cat -v | tr '\012' ' ' | sed 's:$:\x0a:' >> /var/log/sponsored_users
- }
-
- create_user () {
- log "creates $1: $2"
- useradd -m -G users,$mygroup -g $mygroup -p '!' "$1"
- touch /var/lib/nixos/sponsored_users
- chmod go-rwx /var/lib/nixos/sponsored_users
- echo "$mygroup $1 $2" >> /var/lib/nixos/sponsored_users
- (${pkgs.openldap}/bin/ldapadd -c -D cn=root,dc=salle-s,dc=org \
- -y ${config.secrets.fullPaths."ldap/sync_password"} 2>/dev/null >/dev/null || true) </dev/null >/dev/null || true
-
- # Remove obsolete users
- ${pkgs.openldap}/bin/ldapsearch -LLL ${com} -s one -b "ou=users,dc=salle-s,dc=org" "uid" |\
- grep "^uid" | ${pkgs.gnused}/bin/sed -e "s/uid: //" | while read ldapuser; do
-
- for user in ${builtins.concatStringsSep " " (builtins.attrNames normalUsers)}; do
- if [ "$user" = "$ldapuser" ]; then
- continue 2
- fi
- done
- ${pkgs.openldap}/bin/ldapdelete -r ${com} uid=$ldapuser,ou=users,dc=salle-s,dc=org
- done
-
- # Subusers
- if [ -f /var/lib/nixos/sponsored_users ]; then
- cat /var/lib/nixos/sponsored_users | while read mainUser subUser name; do
- (${pkgs.openldap}/bin/ldapadd -c ${com} 2>/dev/null >/dev/null || true) <s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost
- Protocols h2 http/1.1
- AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
- '' ];
- ips =
- let ips = config.hostEnv.ips.main;
- in [ips.ip4] ++ (ips.ip6 or []);
-
- fallbackVhost = {
- certName = "quatresaisons";
- hosts = [ "quatresaisons.immae.eu" ];
- root = pkgs.runCommand "empty" {} "mkdir $out && touch $out/index.html";
- extraConfig = [ "DirectoryIndex index.html" ];
- };
- vhostConfs.salle-s = {
- certName = "quatresaisons";
- addToCerts = true;
- hosts = [ "salle-s.org" ];
- root = toLanding ./quatresaisons/landing.yml;
- extraConfig = [
- ''
-
- AllowOverride None
- Require all granted
- DirectoryIndex index.html
-
- ''
- ];
- };
- vhostConfs.tools = {
- certName = "quatresaisons";
- addToCerts = true;
- hosts = [ "4c.salle-s.org" "quatresaisons.salle-s.org" "quatre-saisons.salle-s.org" ];
- root = toLanding ./quatresaisons/landing_4c.yml;
- extraConfig = [
- ''
- Alias /charte ${serverSpecificConfig.charte_path}
-
- AllowOverride None
- Require all granted
- DirectoryIndex index.html index.txt
-
-
-
- AllowOverride None
- Require all granted
- DirectoryIndex index.html
-
- ''
- ];
- };
- };
- system.activationScripts.httpd = ''
- install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php
- install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions
- '';
-
- services.phpfpm = {
- phpOptions = ''
- session.save_path = "/var/lib/php/sessions"
- post_max_size = 20M
- ; 15 days (seconds)
- session.gc_maxlifetime = 1296000
- ; 30 days (minutes)
- session.cache_expire = 43200
- '';
- settings = {
- log_level = "notice";
- };
- };
-
-}
diff --git a/modules/private/system/quatresaisons/databases.nix b/modules/private/system/quatresaisons/databases.nix
deleted file mode 100644
index f7b27e0..0000000
--- a/modules/private/system/quatresaisons/databases.nix
+++ /dev/null
@@ -1,147 +0,0 @@
-{ pkgs, config, lib, ... }:
-{
- config = let
- serverSpecificConfig = config.myEnv.serverSpecific.quatresaisons;
- phpLdapAdmin = pkgs.webapps.phpldapadmin.override { config = config.secrets.fullPaths."webapps/tools-ldap"; };
- in {
- services.postgresql.enable = true;
- services.postgresql.package = pkgs.postgresql_12;
- services.postgresql.ensureUsers = [
- { name = "naemon"; }
- ];
- secrets.keys = {
- "ldap/password" = {
- permissions = "0400";
- user = "openldap";
- group = "openldap";
- text = "rootpw ${serverSpecificConfig.ldap_root_pw}";
- };
- "webapps/tools-ldap" = {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0400";
- text = ''
- custom->appearance['show_clear_password'] = true;
- $config->custom->appearance['hide_template_warning'] = true;
- $config->custom->appearance['theme'] = "tango";
- $config->custom->appearance['minimalMode'] = false;
- $config->custom->appearance['tree'] = 'AJAXTree';
-
- $servers = new Datastore();
-
- $servers->newServer('ldap_pla');
- $servers->setValue('server','name','LDAP');
- $servers->setValue('server','host','ldap://localhost');
- $servers->setValue('login','auth_type','cookie');
- $servers->setValue('login','bind_id','${serverSpecificConfig.ldap_phpldapadmin_dn}');
- $servers->setValue('login','bind_pass','${serverSpecificConfig.ldap_phpldapadmin_password}');
- $servers->setValue('appearance','pla_password_hash','ssha');
- $servers->setValue('login','attr','uid');
- $servers->setValue('login','fallback_dn',true);
- '';
- };
- };
-
- users.users.openldap.extraGroups = [ "keys" ];
- services.openldap = {
- enable = true;
- dataDir = "/var/lib/openldap";
- urlList = [ "ldap://localhost" ];
- logLevel = "none";
- extraConfig = ''
- pidfile /run/slapd/slapd.pid
- argsfile /run/slapd/slapd.args
-
- moduleload back_hdb
- backend hdb
- '';
-
- extraDatabaseConfig = ''
- moduleload memberof
- overlay memberof
-
- moduleload syncprov
- overlay syncprov
- syncprov-checkpoint 100 10
-
- index objectClass eq
- index uid pres,eq
- #index uidMember pres,eq
- index mail pres,sub,eq
- index cn pres,sub,eq
- index sn pres,sub,eq
- index dc eq
- index member eq
- index memberOf eq
-
- # No one must access that information except root
- access to attrs=description
- by * none
-
- access to attrs=entry,uid filter="(uid=*)"
- by dn.exact="${serverSpecificConfig.ldap_phpldapadmin_dn}" read
- by * break
-
- access to dn.subtree="ou=users,dc=salle-s,dc=org"
- by dn.subtree="ou=services,dc=salle-s,dc=org" read
- by * break
-
- access to *
- by self read
- by anonymous auth
- by * break
- '';
- rootpwFile = config.secrets.fullPaths."ldap/password";
- suffix = "dc=salle-s,dc=org";
- rootdn = "cn=root,dc=salle-s,dc=org";
- database = "hdb";
- };
-
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.tools.extraConfig = [
- ''
- Alias /ldap "${phpLdapAdmin}/htdocs"
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.ldap.socket}|fcgi://localhost"
-
-
- AllowOverride None
- Require all granted
-
- ''
- ];
- services.phpfpm.pools.ldap = {
- user = "wwwrun";
- group = "wwwrun";
- settings =
- let
- basedir = builtins.concatStringsSep ":" [ phpLdapAdmin config.secrets.fullPaths."webapps/tools-ldap" ];
- in {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "LdapPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/phpldapadmin";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/phpldapadmin";
- };
- phpPackage = pkgs.php72;
- };
- system.activationScripts.ldap = {
- deps = [ "users" ];
- text = ''
- install -m 0755 -o wwwrun -g wwwrun -d /var/lib/php/sessions/phpldapadmin
- '';
- };
- systemd.services.phpfpm-ldap = {
- after = lib.mkAfter [ "openldap.service" ];
- wants = [ "openldap.service" ];
- };
- };
-}
diff --git a/modules/private/system/quatresaisons/landing.yml b/modules/private/system/quatresaisons/landing.yml
deleted file mode 100644
index cf4ba87..0000000
--- a/modules/private/system/quatresaisons/landing.yml
+++ /dev/null
@@ -1,32 +0,0 @@
----
-# Homepage configuration
-# See https://fontawesome.com/icons for icons options
-
-title: "Websites dashboard"
-subtitle: "Salle-S"
-footer: false
-#footer: 'Created with ❤️ with bulma , vuejs & font awesome // Fork me on
' # set false if you want to hide it.
-
-# Optional navbar
-# links: [] # Allows for navbar (dark mode, layout, and search) without any links
-links: []
-
-# Services
-# First level array represent a group.
-# Leave only a "items" key if not using group (group name, icon & tagstyle are optional, section separation will not be displayed).
-services:
- - name: "Quatramaran"
- items:
- - name: "Roundcube"
- logo: "assets/tools/roundcube.svg"
- url: "https://quatramaran.salle-s.org/roundcube/"
- - name: "Les dessous de paillasse"
- url: "https://dessous-de-paillasse.salle-s.org"
- - name: "Quatre Saisons"
- items:
- - name: "Charte d’utilisation"
- icon: "fas fa-scroll"
- url: "https://4c.salle-s.org/charte/"
- - name: "Nextcloud"
- logo: "assets/tools/nextcloud.png"
- url: "https://nextcloud.4c.salle-s.org"
diff --git a/modules/private/system/quatresaisons/landing_4c.yml b/modules/private/system/quatresaisons/landing_4c.yml
deleted file mode 100644
index 0b9f6b6..0000000
--- a/modules/private/system/quatresaisons/landing_4c.yml
+++ /dev/null
@@ -1,24 +0,0 @@
----
-# Homepage configuration
-# See https://fontawesome.com/icons for icons options
-
-title: "Websites dashboard"
-subtitle: "Quatre saisons"
-footer: false
-#footer: 'Created with ❤️ with bulma , vuejs & font awesome // Fork me on
' # set false if you want to hide it.
-
-# Optional navbar
-# links: [] # Allows for navbar (dark mode, layout, and search) without any links
-links: []
-
-# Services
-# First level array represent a group.
-# Leave only a "items" key if not using group (group name, icon & tagstyle are optional, section separation will not be displayed).
-services:
- - items:
- - name: "Charte d’utilisation"
- icon: "fas fa-scroll"
- url: "https://4c.salle-s.org/charte/"
- - name: "Nextcloud"
- logo: "assets/tools/nextcloud.png"
- url: "https://nextcloud.4c.salle-s.org"
diff --git a/modules/private/system/quatresaisons/nextcloud.nix b/modules/private/system/quatresaisons/nextcloud.nix
deleted file mode 100644
index 89d69d5..0000000
--- a/modules/private/system/quatresaisons/nextcloud.nix
+++ /dev/null
@@ -1,141 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- nextcloud = pkgs.webapps.nextcloud.withApps (a: [
- a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.circles
- a.contacts a.cookbook a.deck a.extract a.files_markdown
- a.files_readmemd a.flowupload a.gpxedit a.gpxpod a.keeweb a.maps
- a.metadata a.music a.notes a.ocsms a.passman a.polls a.spreed
- a.social a.tasks
- ]);
- varDir = "/var/lib/nextcloud";
- phpFpm = rec {
- basedir = builtins.concatStringsSep ":" ([ nextcloud varDir ] ++ nextcloud.apps);
- pool = {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[output_buffering]" = "0";
- "php_admin_value[max_execution_time]" = "1800";
- "php_admin_value[zend_extension]" = "opcache";
- #already enabled by default?
- #"php_value[opcache.enable]" = "1";
- "php_value[opcache.enable_cli]" = "1";
- "php_value[opcache.interned_strings_buffer]" = "8";
- "php_value[opcache.max_accelerated_files]" = "10000";
- "php_value[opcache.memory_consumption]" = "128";
- "php_value[opcache.save_comments]" = "1";
- "php_value[opcache.revalidate_freq]" = "1";
- "php_admin_value[memory_limit]" = "512M";
-
- "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-in {
- config = {
- services.postgresql.ensureDatabases = [ "nextcloud" ];
- services.postgresql.ensureUsers = [
- { name = "nextcloud"; ensurePermissions = { "DATABASE nextcloud" = "ALL PRIVILEGES"; }; }
- ];
- services.websites.env.production.modules = [ "proxy_fcgi" ];
-
- services.websites.env.production.vhostConfs.cloud = {
- certName = "quatresaisons";
- addToCerts = true;
- hosts = ["nextcloud.4c.salle-s.org" ];
- root = nextcloud;
- extraConfig =
- [
- ''
- SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
-
- AcceptPathInfo On
- DirectoryIndex index.php
- Options FollowSymlinks
- Require all granted
- AllowOverride all
-
-
- Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
-
-
- CGIPassAuth on
- SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud.socket}|fcgi://localhost"
-
-
-
- ''
- ];
- };
- services.websites.env.production.vhostConfs.cloud_wait = let
- content = pkgs.writeText "contenu" ''
- nextcloud est un service qui a besoin de pérennité du nom
- "nextcloud.salle-s.org", on va peut-etre y arriver, c'est une
- question de jours, voir le message informatique.internet:8017
- '';
- in {
- certName = "quatresaisons";
- addToCerts = true;
- hosts = ["nextcloud.salle-s.org" ];
- root = content;
- extraConfig =
- [
- ''
- Alias / ${content}
- ''
- ];
- };
-
- users.users.root.packages = let
- occ = pkgs.writeScriptBin "nextcloud-occ" ''
- #! ${pkgs.stdenv.shell}
- cd ${nextcloud}
- NEXTCLOUD_CONFIG_DIR="${nextcloud}/config" \
- exec \
- sudo -E -u wwwrun ${pkgs.php74}/bin/php \
- -c ${pkgs.php74}/etc/php.ini \
- occ $*
- '';
- in [ occ ];
-
- system.activationScripts.nextcloud = {
- deps = [ "users" ];
- text = let
- confs = lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) nextcloud.otherConfig;
- in
- ''
- install -m 0755 -o wwwrun -g wwwrun -d ${varDir}
- install -m 0755 -o wwwrun -g wwwrun -d ${varDir}/config
- install -m 0750 -o wwwrun -g wwwrun -d ${varDir}/phpSessions
- ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v:
- "install -D -m 0644 -o wwwrun -g wwwrun -T ${v} ${varDir}/config/${n}.json"
- ) confs)}
- '';
- };
- services.phpfpm.pools.nextcloud = {
- user = "wwwrun";
- group = "wwwrun";
- settings = phpFpm.pool;
- phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache all.imagick ]);
- };
-
- services.cron = {
- enable = true;
- systemCronJobs = let
- script = pkgs.writeScriptBin "nextcloud-cron" ''
- #! ${pkgs.stdenv.shell}
- export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive
- export PATH=/run/wrappers/bin:$PATH
- ${pkgs.php74}/bin/php -d memory_limit=512M -f ${nextcloud}/cron.php
- '';
- in [
- ''
- */15 * * * * wwwrun ${script}/bin/nextcloud-cron
- ''
- ];
- };
- };
-}
diff --git a/modules/private/tasks/default.nix b/modules/private/tasks/default.nix
deleted file mode 100644
index 6480255..0000000
--- a/modules/private/tasks/default.nix
+++ /dev/null
@@ -1,355 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.tasks;
- server_vardir = config.services.taskserver.dataDir;
- fqdn = "task.immae.eu";
- user = config.services.taskserver.user;
- env = config.myEnv.tools.task;
- group = config.services.taskserver.group;
- taskserver-user-certs = pkgs.runCommand "taskserver-user-certs" {} ''
- mkdir -p $out/bin
- cat > $out/bin/taskserver-user-certs <<"EOF"
- #!/usr/bin/env bash
-
- user=$1
-
- silent_certtool() {
- if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then
- echo "GNUTLS certtool invocation failed with output:" >&2
- echo "$output" >&2
- fi
- }
-
- silent_certtool -p \
- --bits 4096 \
- --outfile "${server_vardir}/userkeys/$user.key.pem"
- ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${server_vardir}/userkeys/$user.key.pem"
-
- silent_certtool -c \
- --template "${pkgs.writeText "taskserver-ca.template" ''
- tls_www_client
- encryption_key
- signing_key
- expiration_days = 3650
- ''}" \
- --load-ca-certificate "${server_vardir}/keys/ca.cert" \
- --load-ca-privkey "${server_vardir}/keys/ca.key" \
- --load-privkey "${server_vardir}/userkeys/$user.key.pem" \
- --outfile "${server_vardir}/userkeys/$user.cert.pem"
- EOF
- chmod a+x $out/bin/taskserver-user-certs
- patchShebangs $out/bin/taskserver-user-certs
- '';
- taskwarrior-web = pkgs.webapps.taskwarrior-web;
- socketsDir = "/run/taskwarrior-web";
- varDir = "/var/lib/taskwarrior-web";
- taskwebPages = let
- uidPages = lib.attrsets.zipAttrs (
- lib.lists.flatten
- (lib.attrsets.mapAttrsToList (k: c: map (v: { "${v}" = k; }) c.uid) env.taskwarrior-web)
- );
- pages = lib.attrsets.mapAttrs (uid: items:
- if lib.lists.length items == 1 then
- ''
-
-
-
-
-
-
- ''
- else
- ''
-
-
- To-do list disponibles
-
-
-
-
-
- ${builtins.concatStringsSep "\n" (map (item: "${item} ") items)}
-
-
-
- ''
- ) uidPages;
- in
- pkgs.runCommand "taskwerver-pages" {} ''
- mkdir -p $out/
- ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: "cp ${pkgs.writeText k v} $out/${k}.html") pages)}
- echo "Please login" > $out/index.html
- '';
-in {
- options.myServices.tasks = {
- enable = lib.mkEnableOption "my tasks service";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "webapps/tools-taskwarrior-web" = {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0400";
- text = ''
- SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}"
- SetEnv TASKD_VARDIR "${server_vardir}"
- SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}"
- SetEnv TASKD_LDAP_DN "${env.ldap.dn}"
- SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}"
- SetEnv TASKD_LDAP_BASE "${env.ldap.base}"
- SetEnv TASKD_LDAP_FILTER "${env.ldap.filter}"
- '';
- };
- } // (lib.mapAttrs' (name: userConfig: lib.nameValuePair "webapps/tools-taskwarrior/${name}-taskrc" {
- inherit user group;
- permissions = "0400";
- text = let
- credentials = "${userConfig.org}/${name}/${userConfig.key}";
- dateFormat = userConfig.date;
- in ''
- data.location=${varDir}/${name}
- taskd.certificate=${server_vardir}/userkeys/taskwarrior-web.cert.pem
- taskd.key=${server_vardir}/userkeys/taskwarrior-web.key.pem
- # IdenTrust DST Root CA X3
- # obtained here: https://letsencrypt.org/fr/certificates/
- taskd.ca=${pkgs.writeText "ca.cert" ''
- -----BEGIN CERTIFICATE-----
- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
- TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
- cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
- WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
- ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
- MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
- h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
- 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
- A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
- T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
- B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
- B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
- KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
- OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
- jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
- qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
- rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
- HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
- hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
- ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
- 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
- NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
- ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
- TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
- jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
- oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
- 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
- mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
- emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
- -----END CERTIFICATE-----''}
- taskd.server=${fqdn}:${toString config.services.taskserver.listenPort}
- taskd.credentials=${credentials}
- dateformat=${dateFormat}
- '';
- }) env.taskwarrior-web);
- services.websites.env.tools.watchPaths = [ config.secrets.fullPaths."webapps/tools-taskwarrior-web" ];
- services.websites.env.tools.modules = [ "proxy_fcgi" "sed" ];
- services.websites.env.tools.vhostConfs.task = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "task.immae.eu" ];
- root = ./www;
- extraConfig = [ ''
-
- DirectoryIndex index.php
- Use LDAPConnect
- Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.tasks.socket}|fcgi://localhost"
-
- Include ${config.secrets.fullPaths."webapps/tools-taskwarrior-web"}
-
- ''
- ''
-
- ProxyPass "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/"
- ProxyPassReverse "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/"
- ProxyPassReverse http://${fqdn}/
-
- SetOutputFilter Sed
- OutputSed "s|/ajax|/taskweb/%{folderName}/ajax|g"
- OutputSed "s|\([^x]\)/tasks|\1/taskweb/%{folderName}/tasks|g"
- OutputSed "s|\([^x]\)/projects|\1/taskweb/%{folderName}/projects|g"
- OutputSed "s|http://${fqdn}/|/taskweb/%{folderName}/|g"
- OutputSed "s|/img/relax.jpg|/taskweb/%{folderName}/img/relax.jpg|g"
-
- ''
- ''
- Alias /taskweb ${taskwebPages}
-
- DirectoryIndex index.html
- Require all granted
-
-
- RewriteEngine on
- RewriteRule ^/taskweb$ /taskweb/ [R=301,L]
- RedirectMatch permanent ^/taskweb/([^/]+)$ /taskweb/$1/
-
- RewriteCond %{LA-U:REMOTE_USER} !=""
- RewriteCond ${taskwebPages}/%{LA-U:REMOTE_USER}.html -f
- RewriteRule ^/taskweb/?$ ${taskwebPages}/%{LA-U:REMOTE_USER}.html [L]
-
-
- Use LDAPConnect
- Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu
-
- ''
- ] ++ (lib.attrsets.mapAttrsToList (k: v: ''
-
- ${builtins.concatStringsSep "\n" (map (uid: "Require ldap-attribute uid=${uid}") v.uid)}
-
- Use Taskwarrior ${k}
-
- '') env.taskwarrior-web);
- };
- services.phpfpm.pools = {
- tasks = {
- user = user;
- group = group;
- settings = {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "dynamic";
- "pm.max_children" = "60";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "10";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "TaskPHPSESSID";
- "php_admin_value[open_basedir]" = "${./www}:/tmp:${server_vardir}:/etc/profiles/per-user/${user}/bin/";
- };
- phpEnv = {
- PATH = "/etc/profiles/per-user/${user}/bin";
- };
- phpPackage = pkgs.php72;
- };
- };
-
- security.acme.certs."task" = config.myServices.certificates.certConfig // {
- inherit user group;
- domain = fqdn;
- postRun = ''
- systemctl restart taskserver.service
- '';
- };
-
- users.users.${user} = {
- extraGroups = [ "keys" ];
- packages = [ taskserver-user-certs ];
- };
-
- system.activationScripts.taskserver = {
- deps = [ "users" ];
- text = ''
- install -m 0750 -o ${user} -g ${group} -d ${server_vardir}
- install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/userkeys
- install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/keys
-
- if [ ! -e "${server_vardir}/keys/ca.key" ]; then
- silent_certtool() {
- if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then
- echo "GNUTLS certtool invocation failed with output:" >&2
- echo "$output" >&2
- fi
- }
-
- silent_certtool -p \
- --bits 4096 \
- --outfile "${server_vardir}/keys/ca.key"
-
- silent_certtool -s \
- --template "${pkgs.writeText "taskserver-ca.template" ''
- cn = ${fqdn}
- expiration_days = -1
- cert_signing_key
- ca
- ''}" \
- --load-privkey "${server_vardir}/keys/ca.key" \
- --outfile "${server_vardir}/keys/ca.cert"
-
- chown :${group} "${server_vardir}/keys/ca.key"
- chmod g+r "${server_vardir}/keys/ca.key"
- fi
- '';
- };
-
- services.taskserver = {
- enable = true;
- allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ];
- inherit fqdn;
- listenHost = "::";
- pki.manual.ca.cert = "${server_vardir}/keys/ca.cert";
- pki.manual.server.cert = "${config.security.acme.certs.task.directory}/fullchain.pem";
- pki.manual.server.crl = "${config.security.acme.certs.task.directory}/invalid.crl";
- pki.manual.server.key = "${config.security.acme.certs.task.directory}/key.pem";
- requestLimit = 104857600;
- };
-
- system.activationScripts.taskwarrior-web = {
- deps = [ "users" ];
- text = ''
- if [ ! -f ${server_vardir}/userkeys/taskwarrior-web.cert.pem ]; then
- ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web
- chown taskd:taskd ${server_vardir}/userkeys/taskwarrior-web.cert.pem ${server_vardir}/userkeys/taskwarrior-web.key.pem
- fi
- '';
- };
-
- systemd.slices.taskwarrior = {
- description = "Taskwarrior slice";
- };
-
- systemd.services = (lib.attrsets.mapAttrs' (name: userConfig:
- lib.attrsets.nameValuePair "taskwarrior-web-${name}" {
- description = "Taskwarrior webapp for ${name}";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- path = [ pkgs.taskwarrior ];
-
- environment.TASKRC = config.secrets.fullPaths."webapps/tools-taskwarrior/${name}-taskrc";
- environment.BUNDLE_PATH = "${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}";
- environment.BUNDLE_GEMFILE = "${taskwarrior-web.gems.confFiles}/Gemfile";
- environment.LC_ALL = "fr_FR.UTF-8";
-
- script = ''
- exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${socketsDir}/${name}.sock
- '';
-
- serviceConfig = {
- Slice = "taskwarrior.slice";
- User = user;
- PrivateTmp = true;
- Restart = "always";
- TimeoutSec = 60;
- Type = "simple";
- WorkingDirectory = taskwarrior-web;
- StateDirectoryMode = 0750;
- StateDirectory = assert lib.strings.hasPrefix "/var/lib/" varDir;
- (lib.strings.removePrefix "/var/lib/" varDir + "/${name}");
- RuntimeDirectoryPreserve = "yes";
- RuntimeDirectory = assert lib.strings.hasPrefix "/run/" socketsDir;
- lib.strings.removePrefix "/run/" socketsDir;
- };
-
- unitConfig.RequiresMountsFor = varDir;
- }) env.taskwarrior-web) // {
- taskserver-ca.postStart = ''
- chown :${group} "${server_vardir}/keys/ca.key"
- chmod g+r "${server_vardir}/keys/ca.key"
- '';
- taskserver-ca.serviceConfig.Slice = "taskwarrior.slice";
- taskserver-init.serviceConfig.Slice = "taskwarrior.slice";
- taskserver.serviceConfig.Slice = "taskwarrior.slice";
- };
-
- };
-}
diff --git a/modules/private/tasks/www/index.php b/modules/private/tasks/www/index.php
deleted file mode 100644
index 49ccd24..0000000
--- a/modules/private/tasks/www/index.php
+++ /dev/null
@@ -1,168 +0,0 @@
- $value) {
- if ($key !== "count") {
- $entries[] = explode(":", $value);
- }
-}
-
-if (isset($_GET["file"])) {
- $basecert = $vardir . "/userkeys/" . $ldap_user;
- if (!file_exists($basecert . ".cert.pem")) {
- exec("taskserver-user-certs $ldap_user");
- }
- $certificate = file_get_contents($basecert . ".cert.pem");
- $cert_key = file_get_contents($basecert . ".key.pem");
-
- // IdenTrust DST Root CA X3
- // obtained here: https://letsencrypt.org/fr/certificates/
- $server_cert = "-----BEGIN CERTIFICATE-----
-MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
-TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
-cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
-WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
-ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
-MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
-h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
-0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
-A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
-T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
-B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
-B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
-KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
-OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
-jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
-qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
-rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
-hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
-ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
-3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
-NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
-ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
-TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
-jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
-oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
-4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
-mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
-emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
------END CERTIFICATE-----";
-
- $file = $_GET["file"];
- switch($file) {
- case "ca.cert.pem":
- $content = $server_cert;
- $name = "ca.cert.pem";
- $type = "application/x-x509-ca-cert";
- break;
- case "cert.pem":
- $content = $certificate;
- $name = $ldap_user . ".cert.pem";
- $type = "application/x-x509-ca-cert";
- break;
- case "key.pem":
- $content = $cert_key;
- $name = $ldap_user . ".key.pem";
- $type = "application/x-x509-ca-cert";
- break;
- case "mirakel";
- foreach ($entries as $entry) {
- list($org, $user, $key) = $entry;
- if ($key == $_GET["key"]) { break; }
- }
- $name = $user . ".mirakel";
- $type = "text/plain";
- $content = "username: $user
-org: $org
-user key: $key
-server: $host
-client.cert:
-$certificate
-Client.key:
-$cert_key
-ca.cert:
-$server_cert
-";
- break;
- default:
- die("invalid file name");
- break;
- }
-
- header("Content-Type: $type");
- header('Content-Disposition: attachment; filename="' . $name . '"');
- header('Content-Transfer-Encoding: binary');
- header('Accept-Ranges: bytes');
- header('Cache-Control: private');
- header('Pragma: private');
- echo $content;
- exit;
-}
-?>
-
-
- Taskwarrior configuration
-
-
-
-For command line interface, download the files, put them near your Taskwarrior
-configuration files, and add that to your Taskwarrior configuration:
-
-taskd.certificate=/path/to/.cert.pem
-taskd.key=/path/to/.key.pem
-taskd.server=
- 1) {
- echo "# Chose one of them\n";
- foreach($entries as $entry) {
- list($org, $user, $key) = $entry;
- echo "# taskd.credentials=$org/$user/$key\n";
- }
-} else { ?>
-taskd.credentials=//
-
-taskd.ca=/path/to/ca.cert.pem
-
-For Mirakel, download and import the file:
-
-For Android Taskwarrior app, see instructions here .
-
-
-
diff --git a/modules/private/vpn/default.nix b/modules/private/vpn/default.nix
deleted file mode 100644
index d4b197d..0000000
--- a/modules/private/vpn/default.nix
+++ /dev/null
@@ -1,65 +0,0 @@
-{ config, pkgs, lib, ... }:
-let
- cfg = config.myServices.vpn;
-in
-{
- options.myServices = {
- vpn.enable = lib.mkEnableOption "Enable vpn service";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "tinc/key.priv" = {
- user = "root";
- group = "root";
- permissions = "0400";
- text = config.myEnv.vpn.eldiron.privateKey;
- };
- "tinc/key.pub" = {
- user = "root";
- group = "root";
- permissions = "0400";
- text = config.myEnv.vpn.eldiron.publicKey;
- };
- };
- networking.firewall.allowedTCPPorts = [ 655 1194 ];
- system.activationScripts.tinc = let
- configFiles = pkgs.runCommand "tinc-files" {
- mainInterface = "eth0";
- hostName = "ImmaeEu";
- network = "Immae";
- keyFile = config.secrets.fullPaths."tinc/key.priv";
- } ''
- mkdir -p $out
- for i in ${./tinc}/*; do
- substituteAll $i $out/$(basename $i)
- done
- '';
- in ''
- install -m750 -o root -g root -d /var/lib/tinc/ /var/lib/tinc/Immae
- install -m700 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/{host-*,tinc-*}
- install -m400 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/tinc.conf
- if [ ! -d /var/lib/tinc/Immae/hosts ]; then
- ${pkgs.git}/bin/git clone -b master https://git.immae.eu/perso/Immae/Config/tinc/hosts /var/lib/tinc/Immae/hosts
- fi
- '';
-
- systemd.slices.tinc = {
- description = "Tinc slice";
- };
-
- systemd.services.tinc-Immae = {
- description = "Tinc Daemon - Immae";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- path = [ pkgs.tinc pkgs.bashInteractive pkgs.iproute pkgs.gnused pkgs.gawk pkgs.git pkgs.glibc ];
- serviceConfig = {
- Slice = "tinc.slice";
- Type = "simple";
- Restart = "always";
- RestartSec = "3";
- ExecStart = "${pkgs.tinc}/bin/tincd -d1 -D -c /var/lib/tinc/Immae --pidfile /run/tinc.Immae.pid";
- };
- };
- };
-}
diff --git a/modules/private/vpn/tinc/host-down b/modules/private/vpn/tinc/host-down
deleted file mode 100755
index 1e79bd3..0000000
--- a/modules/private/vpn/tinc/host-down
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-
-SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }')
-NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '`
-for NODEIP in $NODEIPS; do
- ip neigh del proxy $NODEIP dev @mainInterface@
-done
diff --git a/modules/private/vpn/tinc/host-up b/modules/private/vpn/tinc/host-up
deleted file mode 100755
index 2f7cee2..0000000
--- a/modules/private/vpn/tinc/host-up
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-
-SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }')
-while [ -z "$NODEIPS" ]; do
- NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '`
- sleep 5
-done
-for NODEIP in $NODEIPS; do
- ip neigh add proxy $NODEIP dev @mainInterface@
-done
-(cd /var/lib/tinc/@network@/hosts && git pull -q origin master) || true
diff --git a/modules/private/vpn/tinc/tinc-down b/modules/private/vpn/tinc/tinc-down
deleted file mode 100755
index 1cc45c0..0000000
--- a/modules/private/vpn/tinc/tinc-down
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# This file closes down the tap device.
-
-echo 0 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp
-echo 0 > /proc/sys/net/ipv6/conf/all/forwarding
-
-GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1`
-
-ip neigh del proxy $GWIP dev eth0
-
-ip -6 addr del $GWIP/96 dev $INTERFACE
-ip -6 link set $INTERFACE down
diff --git a/modules/private/vpn/tinc/tinc-up b/modules/private/vpn/tinc/tinc-up
deleted file mode 100755
index 26c1ec3..0000000
--- a/modules/private/vpn/tinc/tinc-up
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-echo 1 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp
-echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
-
-SUBNET=`getent hosts sn.vpn.immae.eu | head -n1 | cut -d' ' -f1`
-GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1`
-
-ip -6 link set $INTERFACE up mtu 1280 txqueuelen 1000
-
-ip -6 addr add $GWIP/96 dev $INTERFACE
-ip -6 route add $SUBNET/80 dev $INTERFACE
-
-ip neigh add proxy $GWIP dev @mainInterface@
diff --git a/modules/private/vpn/tinc/tinc.conf b/modules/private/vpn/tinc/tinc.conf
deleted file mode 100644
index 7a4f103..0000000
--- a/modules/private/vpn/tinc/tinc.conf
+++ /dev/null
@@ -1,11 +0,0 @@
-BindToAddress = * 655
-BindToAddress = * 1194
-
-Name = @hostName@
-Interface = vpn6
-
-Mode = switch
-
-Device = /dev/net/tun
-GraphDumpFile = /var/lib/tinc/@network@/tinc_graph
-PrivateKeyFile = @keyFile@
diff --git a/modules/private/websites/_www/googleb6d69446ff4ca3e5.html b/modules/private/websites/_www/googleb6d69446ff4ca3e5.html
deleted file mode 100644
index ff6dbf3..0000000
--- a/modules/private/websites/_www/googleb6d69446ff4ca3e5.html
+++ /dev/null
@@ -1 +0,0 @@
-google-site-verification: googleb6d69446ff4ca3e5.html
\ No newline at end of file
diff --git a/modules/private/websites/_www/index.htm b/modules/private/websites/_www/index.htm
deleted file mode 100644
index 0274251..0000000
--- a/modules/private/websites/_www/index.htm
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- Hello World HTML
-
-
- It works!
-
-
diff --git a/modules/private/websites/_www/maintenance_immae.html b/modules/private/websites/_www/maintenance_immae.html
deleted file mode 100644
index 90f265f..0000000
--- a/modules/private/websites/_www/maintenance_immae.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
- Maintenance
-
-
-
-
-
-
- Erreur serveur ou maintenance en cours !
-
-
Une mise à jour ou une opération de maintenance est en cours sur le site. Retentez dans quelques instants ou patientez, la page se rechargera automatiquement.
-
-
-
-
- Server error or website in maintenance!
-
-
An update or a maintenance is on track on the website. Please try again in a few seconds or wait, the page will reload automatically.
-
-
-
-
diff --git a/modules/private/websites/_www/nossl.html b/modules/private/websites/_www/nossl.html
deleted file mode 100644
index 4401a80..0000000
--- a/modules/private/websites/_www/nossl.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- No SSL site
-
-
- No SSL on this site
- Use for wifi networks with login page that doesn't work well with
- https.
-
-
diff --git a/modules/private/websites/bakeer/cloud.nix b/modules/private/websites/bakeer/cloud.nix
deleted file mode 100644
index bf78317..0000000
--- a/modules/private/websites/bakeer/cloud.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.bakeer.cloud;
- nextcloud = config.myServices.tools.cloud.farm.package;
-in {
- options.myServices.websites.bakeer.cloud.enable = lib.mkEnableOption "enable Bakeer’s cloud";
-
- config = lib.mkIf cfg.enable {
- myServices.tools.cloud.farm.instances = [ "bakeer" ];
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.bakeer = {
- certName = "bakeer";
- certMainHost = "bakeer.immae.eu";
- addToCerts = true;
- hosts = ["bakeer.immae.eu" "baxsolution.immae.eu"];
- root = nextcloud;
- extraConfig = [
- config.myServices.tools.cloud.farm.vhosts.bakeer
- ];
- };
- };
-}
-
diff --git a/modules/private/websites/capitaines/discourse_static/discourse.png b/modules/private/websites/capitaines/discourse_static/discourse.png
deleted file mode 100644
index 91ce42d..0000000
Binary files a/modules/private/websites/capitaines/discourse_static/discourse.png and /dev/null differ
diff --git a/modules/private/websites/capitaines/discourse_static/index.html b/modules/private/websites/capitaines/discourse_static/index.html
deleted file mode 100644
index 4c2ead0..0000000
--- a/modules/private/websites/capitaines/discourse_static/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
- This instance is now closed - Discourse
-
-
-
-
-
-
Sorry, this instance is closed now.
-
-
-
diff --git a/modules/private/websites/capitaines/landing_pages.nix b/modules/private/websites/capitaines/landing_pages.nix
deleted file mode 100644
index edba8b9..0000000
--- a/modules/private/websites/capitaines/landing_pages.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-{ lib, config, ... }:
-let
- cfg = config.myServices.websites.capitaines.landing_pages;
- certName = "capitaines";
- domain = "capitaines.fr";
-in {
- options.myServices.websites.capitaines.landing_pages.enable = lib.mkEnableOption "enable Capitaines's landing pages";
-
- config = lib.mkIf cfg.enable {
- services.websites.env.production.vhostConfs.capitaines_mastodon = rec {
- inherit certName;
- certMainHost = "mastodon.${domain}";
- hosts = [ certMainHost ];
- root = ./mastodon_static;
- extraConfig = [
- ''
- ErrorDocument 404 /index.html
-
- DirectoryIndex index.html
- Options Indexes FollowSymLinks MultiViews Includes
- Require all granted
-
- ''
- ];
- };
-
- services.websites.env.production.vhostConfs.capitaines_discourse = {
- inherit certName;
- addToCerts = true;
- hosts = [ "discourse.${domain}" ];
- root = ./discourse_static;
- extraConfig = [
- ''
- ErrorDocument 404 /index.html
-
- DirectoryIndex index.html
- Options Indexes FollowSymLinks MultiViews Includes
- Require all granted
-
- ''
- ];
- };
-
- services.websites.env.production.vhostConfs.capitaines = {
- inherit certName;
- addToCerts = true;
- hosts = [ domain ];
- root = ../_www;
- extraConfig = [ ''
-
- DirectoryIndex index.htm
- Require all granted
-
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/capitaines/mastodon_static/index.html b/modules/private/websites/capitaines/mastodon_static/index.html
deleted file mode 100644
index fae4152..0000000
--- a/modules/private/websites/capitaines/mastodon_static/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
- This instance is now closed - Mastodon
-
-
-
-
-
-
Sorry, this instance is closed now.
-
-
-
diff --git a/modules/private/websites/capitaines/mastodon_static/oops.png b/modules/private/websites/capitaines/mastodon_static/oops.png
deleted file mode 100644
index 0abddad..0000000
Binary files a/modules/private/websites/capitaines/mastodon_static/oops.png and /dev/null differ
diff --git a/modules/private/websites/chloe/app/default.nix b/modules/private/websites/chloe/app/default.nix
deleted file mode 100644
index d23e3e0..0000000
--- a/modules/private/websites/chloe/app/default.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ environment ? "prod"
-, varDir ? "/var/lib/chloe_${environment}"
-, spip, stdenv, sassc, sources }:
-let
- siteDir = stdenv.mkDerivation {
- version = sources.websites-chloe-app.version;
- pname = "chloe";
- src = sources.websites-chloe-app;
- buildPhase = ''
- make
- '';
- installPhase = ''
- cp -a . $out
- '';
- buildInputs = [ sassc ];
- };
-in
-spip.override {
- ldap = true;
- siteName = "chloe";
- inherit environment siteDir varDir;
-}
diff --git a/modules/private/websites/chloe/config/chmod.php b/modules/private/websites/chloe/config/chmod.php
deleted file mode 100644
index aae16cd..0000000
--- a/modules/private/websites/chloe/config/chmod.php
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/private/websites/chloe/config/connect.php b/modules/private/websites/chloe/config/connect.php
deleted file mode 100644
index 18b0933..0000000
--- a/modules/private/websites/chloe/config/connect.php
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/modules/private/websites/chloe/config/ldap.php b/modules/private/websites/chloe/config/ldap.php
deleted file mode 100644
index 825b7ed..0000000
--- a/modules/private/websites/chloe/config/ldap.php
+++ /dev/null
@@ -1,9 +0,0 @@
- array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',);
-$GLOBALS['ldap_search'] = getenv("SPIP_LDAP_SEARCH");
-?>
diff --git a/modules/private/websites/chloe/integration.nix b/modules/private/websites/chloe/integration.nix
deleted file mode 100644
index 533568e..0000000
--- a/modules/private/websites/chloe/integration.nix
+++ /dev/null
@@ -1,104 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- apacheUser = config.services.httpd.Inte.user;
- apacheGroup = config.services.httpd.Inte.group;
- ccfg = config.myEnv.websites.chloe.integration;
- webRoot = "/var/lib/ftp/immae/chloe";
- varDir = "/var/lib/ftp/immae/chloe_var";
- cfg = config.myServices.websites.chloe.integration;
-in {
- options.myServices.websites.chloe.integration.enable = lib.mkEnableOption "enable Chloe's website in integration";
-
- config = lib.mkIf cfg.enable {
- secrets.keys."websites/chloe/integration" = {
- user = apacheUser;
- group = apacheGroup;
- permissions = "0400";
- text = ''
- SetEnv SPIP_CONFIG_DIR "${./config}"
- SetEnv SPIP_VAR_DIR "${varDir}"
- SetEnv SPIP_SITE "chloe-dev"
- SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu"
- SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu"
- SetEnv SPIP_LDAP_SEARCH_DN "${ccfg.ldap.dn}"
- SetEnv SPIP_LDAP_SEARCH_PW "${ccfg.ldap.password}"
- SetEnv SPIP_LDAP_SEARCH "${ccfg.ldap.filter}"
- SetEnv SPIP_MYSQL_HOST "${ccfg.mysql.host}"
- SetEnv SPIP_MYSQL_PORT "${ccfg.mysql.port}"
- SetEnv SPIP_MYSQL_DB "${ccfg.mysql.database}"
- SetEnv SPIP_MYSQL_USER "${ccfg.mysql.user}"
- SetEnv SPIP_MYSQL_PASSWORD "${ccfg.mysql.password}"
- '';
- };
- systemd.services.phpfpm-chloe_integration.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-chloe_integration.wants = [ "mysql.service" ];
- services.phpfpm.pools.chloe_integration = {
- user = config.services.httpd.Inte.user;
- group = config.services.httpd.Inte.group;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- # "php_admin_flag[log_errors]" = "on";
- "php_admin_value[open_basedir]" = "${../../../../pkgs/webapps/spip/spip_mes_options.php}:${./config}:${webRoot}:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
- };
- phpPackage = pkgs.php72;
- };
- system.activationScripts.chloe_integration = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir} ${varDir}/IMG ${varDir}/tmp ${varDir}/local
- install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${varDir}/phpSessions
- '';
- };
- services.websites.env.integration.modules = [ "proxy_fcgi" ];
- services.websites.env.integration.vhostConfs.chloe_integration = {
- certName = "integration";
- addToCerts = true;
- hosts = ["test.chc.immae.dev" ];
- root = webRoot;
- extraConfig = [
- ''
- Include ${config.secrets.fullPaths."websites/chloe/integration"}
-
- RewriteEngine On
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.chloe_integration.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.php index.htm index.html
- Options -Indexes +FollowSymLinks +MultiViews +Includes
- Include ${webRoot}/htaccess.txt
-
- AllowOverride AuthConfig FileInfo Limit
- Require all granted
-
-
-
- Require all denied
-
-
-
- Require all denied
-
-
-
- Use LDAPConnect
- Require ldap-group cn=chc.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
- ''
- ];
- };
- services.websites.env.integration.watchPaths = [
- config.secrets.fullPaths."websites/chloe/integration"
- ];
- };
-}
diff --git a/modules/private/websites/chloe/production.nix b/modules/private/websites/chloe/production.nix
deleted file mode 100644
index 211232c..0000000
--- a/modules/private/websites/chloe/production.nix
+++ /dev/null
@@ -1,112 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
- ccfg = config.myEnv.websites.chloe.production;
- app = pkgs.callPackage ./app {
- inherit (ccfg) environment;
- inherit (pkgs.webapps) spip;
- varDir = "/var/lib/chloe_production";
- };
- cfg = config.myServices.websites.chloe.production;
-in {
- options.myServices.websites.chloe.production.enable = lib.mkEnableOption "enable Chloe's website in production";
-
- config = lib.mkIf cfg.enable {
- secrets.keys."websites/chloe/production" = {
- user = apacheUser;
- group = apacheGroup;
- permissions = "0400";
- text = ''
- SetEnv SPIP_CONFIG_DIR "${./config}"
- SetEnv SPIP_VAR_DIR "${app.varDir}"
- SetEnv SPIP_SITE "chloe-${app.environment}"
- SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu"
- SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu"
- SetEnv SPIP_LDAP_SEARCH_DN "${ccfg.ldap.dn}"
- SetEnv SPIP_LDAP_SEARCH_PW "${ccfg.ldap.password}"
- SetEnv SPIP_LDAP_SEARCH "${ccfg.ldap.filter}"
- SetEnv SPIP_MYSQL_HOST "${ccfg.mysql.host}"
- SetEnv SPIP_MYSQL_PORT "${ccfg.mysql.port}"
- SetEnv SPIP_MYSQL_DB "${ccfg.mysql.database}"
- SetEnv SPIP_MYSQL_USER "${ccfg.mysql.user}"
- SetEnv SPIP_MYSQL_PASSWORD "${ccfg.mysql.password}"
- '';
- };
- services.webstats.sites = [ { name = "osteopathe-cc.fr"; } ];
-
- systemd.services.phpfpm-chloe_production.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-chloe_production.wants = [ "mysql.service" ];
- services.phpfpm.pools.chloe_production = {
- user = config.services.httpd.Prod.user;
- group = config.services.httpd.Prod.group;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- # "php_admin_flag[log_errors]" = "on";
- "php_admin_value[open_basedir]" = "${app.spipConfig}:${./config}:${app}:${app.varDir}:/tmp";
- "php_admin_value[session.save_path]" = "${app.varDir}/phpSessions";
- "pm" = "dynamic";
- "pm.max_children" = "20";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "3";
- };
- phpPackage = pkgs.php72;
- };
- system.activationScripts.chloe_production = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} ${app.varDir}/IMG ${app.varDir}/tmp ${app.varDir}/local
- install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions
- '';
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.chloe = {
- certName = "chloe";
- certMainHost = "osteopathe-cc.fr";
- hosts = ["osteopathe-cc.fr" "www.osteopathe-cc.fr" ];
- root = app.webRoot;
- extraConfig = [
- ''
- Use Stats osteopathe-cc.fr
-
- RewriteEngine On
- RewriteCond "%{HTTP_HOST}" "!^www\.osteopathe-cc\.fr$" [NC]
- RewriteRule ^(.+)$ https://www.osteopathe-cc.fr$1 [R=302,L]
-
- Include ${config.secrets.fullPaths."websites/chloe/production"}
-
- RewriteEngine On
- RewriteRule ^/news.rss /spip.php?page=backend&id_rubrique=1
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.chloe_production.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.php index.htm index.html
- Options -Indexes +FollowSymLinks +MultiViews +Includes
- Include ${app.webRoot}/htaccess.txt
-
- AllowOverride AuthConfig FileInfo Limit
- Require all granted
-
-
-
- Require all denied
-
-
-
- Require all denied
-
- ''
- ];
- };
- services.websites.env.production.watchPaths = [
- config.secrets.fullPaths."websites/chloe/production"
- ];
- };
-}
diff --git a/modules/private/websites/cip-ca/sympa.nix b/modules/private/websites/cip-ca/sympa.nix
deleted file mode 100644
index bb66fc6..0000000
--- a/modules/private/websites/cip-ca/sympa.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ lib, config, ... }:
-let
- cfg = config.myServices.websites.cip-ca.sympa;
-in
-{
- options.myServices.websites.cip-ca.sympa.enable = lib.mkEnableOption "enable cip-ca’s sympa website";
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.vhostConfs.cipca_sympa = {
- certName = "cip-ca";
- certMainHost = "mail.cip-ca.fr";
- hosts = [ "mail.cip-ca.fr" ];
- root = null;
- extraConfig = [
- ''
- Alias /static-sympa/ /var/lib/sympa/static_content/
-
- Require all granted
- AllowOverride none
-
-
- SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://"
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/commons/adminer.nix b/modules/private/websites/commons/adminer.nix
deleted file mode 100644
index eae6a9a..0000000
--- a/modules/private/websites/commons/adminer.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{ config, callPackage }:
-callPackage ../tools/tools/adminer.nix {
- forcePhpSocket = config.services.phpfpm.pools.adminer.socket;
-}
diff --git a/modules/private/websites/connexionswing/app/default.nix b/modules/private/websites/connexionswing/app/default.nix
deleted file mode 100644
index b14b03b..0000000
--- a/modules/private/websites/connexionswing/app/default.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{ environment, varDir, secretsPath
-, composerEnv, fetchurl, fetchgit, sources }:
-let
- app = composerEnv.buildPackage (
- import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } //
- rec {
- pname = "connexionswing";
- name = "${pname}-${version}";
- version = sources.websites-connexionswing-app.version;
- src = sources.websites-connexionswing-app;
- noDev = (environment == "prod");
- preInstall = ''
- export SYMFONY_ENV="${environment}"
- '';
- postInstall = ''
- cd $out
- ${if environment == "prod" then "php ./bin/console assetic:dump --env=prod --no-debug" else ""}
- rm app/config/parameters.yml
- ln -sf ${secretsPath} app/config/parameters.yml
- rm -rf var/{logs,cache}
- ln -sf ${varDir}/var/{logs,cache} var/
- ln -sf ${varDir}/{medias,uploads} web/images/
- '';
- passthru = {
- inherit varDir environment;
- webRoot = "${app}/web";
- };
- });
-in app
diff --git a/modules/private/websites/connexionswing/app/php-packages.nix b/modules/private/websites/connexionswing/app/php-packages.nix
deleted file mode 100644
index 10bb737..0000000
--- a/modules/private/websites/connexionswing/app/php-packages.nix
+++ /dev/null
@@ -1,597 +0,0 @@
-# Generated with composer2nix and adapted to return only the list of
-# packages
-{ composerEnv, fetchurl, fetchgit ? null }:
-{
- packages = {
- "behat/transliterator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c";
- src = fetchurl {
- url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c;
- sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0";
- };
- };
- };
- "components/bootstrap" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "components-bootstrap-670295b9d6170a79acc8586a15e729bf24128275";
- src = fetchurl {
- url = https://api.github.com/repos/components/bootstrap/zipball/670295b9d6170a79acc8586a15e729bf24128275;
- sha256 = "0lcq9cjnywvf1nd8k99flgcf2dmfgyyxzsvcpip8xiibmh5x04p9";
- };
- };
- };
- "components/jquery" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "components-jquery-5dd7297d7603e11e53bdcca2a71074d92de37b8f";
- src = fetchurl {
- url = https://api.github.com/repos/components/jquery/zipball/5dd7297d7603e11e53bdcca2a71074d92de37b8f;
- sha256 = "1maplw3yic1pzbwwl2amjlivipsi1w0r8bq7i0mmjaqf7wij506i";
- };
- };
- };
- "components/jqueryui" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "components-jqueryui-44ecf3794cc56b65954cc19737234a3119d036cc";
- src = fetchurl {
- url = https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc;
- sha256 = "1y0ppxk44jkxbh38i05sg0zcgk927s5wy6sjngwr5qifibqbcbhk";
- };
- };
- };
- "composer/ca-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "composer-ca-bundle-d2c0a83b7533d6912e8d516756ebd34f893e9169";
- src = fetchurl {
- url = https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169;
- sha256 = "1as399dzrfbjnifb87j1g5cvrbacyddbay8fv59i56xx1bdq7lwc";
- };
- };
- };
- "doctrine/annotations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-annotations-54cacc9b81758b14e3ce750f205a393d52339e97";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97;
- sha256 = "1wi5skihqbcinlkrkr15nmmvqkn2gydqib8xl232abdvfq1q0w24";
- };
- };
- };
- "doctrine/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-cache-eb152c5100571c7a45470ff2a35095ab3f3b900b";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b;
- sha256 = "0iq0qqv1smlqz63jhj2fpjy54c5dwfwxyf5c89iky6i0yb81gwyd";
- };
- };
- };
- "doctrine/collections" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-collections-1a4fb7e902202c33cce8c55989b945612943c2ba";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba;
- sha256 = "0fkiwkx7zbmfnh4p21za807lh1n7g1f4lpgy8y59g4r5krvpl90w";
- };
- };
- };
- "doctrine/common" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-common-4acb8f89626baafede6ee5475bc5844096eba8a9";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9;
- sha256 = "0qjqframvg81z3lwqaj5haanqj9v3dfbj170pxmwlgmrfsbr16zh";
- };
- };
- };
- "doctrine/dbal" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-dbal-729340d8d1eec8f01bff708e12e449a3415af873";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873;
- sha256 = "184p8h0n6mcm0y6vfyh0z6qcxmmf8h5z4vdvxd4ycmx0531lnhj3";
- };
- };
- };
- "doctrine/doctrine-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-bundle-703fad32e4c8cbe609caf45a71a1d4266c830f0f";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/703fad32e4c8cbe609caf45a71a1d4266c830f0f;
- sha256 = "0v2f63j22i3im8jbmv7spi8j42fay6dnxjvbxnbwj190ajxl6sdp";
- };
- };
- };
- "doctrine/doctrine-cache-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-cache-bundle-4c8e363f96427924e7e519c5b5119b4f54512697";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/4c8e363f96427924e7e519c5b5119b4f54512697;
- sha256 = "1irm04iijzq6gziknwyb10a9s0xbzh04xs5i2d6aac86cc29187c";
- };
- };
- };
- "doctrine/doctrine-migrations-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-migrations-bundle-a9e506369f931351a2a6dd2aef588a822802b1b7";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/a9e506369f931351a2a6dd2aef588a822802b1b7;
- sha256 = "1jgrqsgdwcm2g8rml76qr6b19s1vxfbnrp43qr6n1g9kbx7y9wg9";
- };
- };
- };
- "doctrine/inflector" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-inflector-90b2128806bfde671b6952ab8bea493942c1fdae";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae;
- sha256 = "01vmclj3k7xil51jg329fznshh8d07pvm4mr89lvfn1d7fyrq6qw";
- };
- };
- };
- "doctrine/instantiator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-instantiator-8e884e78f9f0eb1329e445619e04456e64d8051d";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d;
- sha256 = "15dcja45rnwya431pcm826l68k1g8f1fabl7rih69alcdyvdlln4";
- };
- };
- };
- "doctrine/lexer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c;
- sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74";
- };
- };
- };
- "doctrine/migrations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-migrations-c81147c0f2938a6566594455367e095150547f72";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/migrations/zipball/c81147c0f2938a6566594455367e095150547f72;
- sha256 = "0x8hvxbm3f40sx25nq8zlh1kr936pagghzp89l0gdy5bar7cdzi5";
- };
- };
- };
- "doctrine/orm" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-orm-810a7baf81462a5ddf10e8baa8cb94b6eec02754";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/doctrine2/zipball/810a7baf81462a5ddf10e8baa8cb94b6eec02754;
- sha256 = "1hmkc7917kgnav9hmlgvlp7qwm3zjj910ci71g9yqwjh6s28wrf1";
- };
- };
- };
- "fig/link-util" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac;
- sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64";
- };
- };
- };
- "friendsofsymfony/jsrouting-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "friendsofsymfony-jsrouting-bundle-49c1069132dcef371fb526351569deabeb6f0d8e";
- src = fetchurl {
- url = https://api.github.com/repos/FriendsOfSymfony/FOSJsRoutingBundle/zipball/49c1069132dcef371fb526351569deabeb6f0d8e;
- sha256 = "0ymmxhxbjnzj8bk3zq55vq0xvsaq82348v321gy2jyi90d19p5j7";
- };
- };
- };
- "gedmo/doctrine-extensions" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "gedmo-doctrine-extensions-1e400fbd05b7e5f912f55fe95805450f7d3bed60";
- src = fetchurl {
- url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/1e400fbd05b7e5f912f55fe95805450f7d3bed60;
- sha256 = "14hmivynyzc1c9l5kxj9gbwjrkv9m9lrjjx2r1m74wdhi5p0p20v";
- };
- };
- };
- "immae/connexionswing-ckeditor-component" = {
- targetDir = "";
- src = fetchgit {
- name = "immae-connexionswing-ckeditor-component-3b35bd273a79f6b01fda7a246aed64aca147ea7a";
- url = "https://git.immae.eu/perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git";
- rev = "3b35bd273a79f6b01fda7a246aed64aca147ea7a";
- sha256 = "1w0y6k28ci73n0db9gwvqg7grzvh1z718ys9v1ik8cla7zw83bni";
- };
- };
- "immae/jquery-touchswipe" = {
- targetDir = "";
- src = fetchgit {
- name = "immae-jquery-touchswipe-3e15949df974d6612d76dc9ee75cd976dbcc2114";
- url = "https://git.immae.eu/perso/Immae/Projets/packagist/jquery-touchswipe.git";
- rev = "3e15949df974d6612d76dc9ee75cd976dbcc2114";
- sha256 = "1pnvki1j3a65cdwwqs0id790ni813lh3r0m7556gdn0hsqa1cc4d";
- };
- };
- "incenteev/composer-parameter-handler" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550";
- src = fetchurl {
- url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550;
- sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm";
- };
- };
- };
- "jdorn/sql-formatter" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc";
- src = fetchurl {
- url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc;
- sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi";
- };
- };
- };
- "kriswallsmith/assetic" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "kriswallsmith-assetic-e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1";
- src = fetchurl {
- url = https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1;
- sha256 = "1dqk4zvx8fgqf8rb81sj9bipl5431jib2b9kcvxyig5fw99irpf8";
- };
- };
- };
- "monolog/monolog" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "monolog-monolog-fd8c787753b3a2ad11bc60c063cff1358a32a3b4";
- src = fetchurl {
- url = https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4;
- sha256 = "0avf3y8raw23krwdb7kw9qb5bsr5ls4i7qd2vh7hcds3qjixg3h9";
- };
- };
- };
- "ocramius/proxy-manager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "ocramius-proxy-manager-57e9272ec0e8deccf09421596e0e2252df440e11";
- src = fetchurl {
- url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11;
- sha256 = "10crhcnhz42b01i6lv6ysgc7awp7yw82p4i2a4sg6bjihw677yps";
- };
- };
- };
- "paragonie/random_compat" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "paragonie-random_compat-258c89a6b97de7dfaf5b8c7607d0478e236b04fb";
- src = fetchurl {
- url = https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb;
- sha256 = "11arrici2mgfj7r847wm423pqrvfj9wn9jcgyxnq4rzyahaxz5l1";
- };
- };
- };
- "psr/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8;
- sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz";
- };
- };
- };
- "psr/container" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f;
- sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j";
- };
- };
- };
- "psr/link" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562;
- sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13";
- };
- };
- };
- "psr/log" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-log-4ebe3a8bf773a19edfe0a84b6585ba3d401b724d";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d;
- sha256 = "1mlcv17fjw39bjpck176ah1z393b6pnbw3jqhhrblj27c70785md";
- };
- };
- };
- "psr/simple-cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b;
- sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw";
- };
- };
- };
- "ricbra/robots-txt-bundle" = {
- targetDir = "Ricbra/Bundle/RobotsTxtBundle";
- src = composerEnv.buildZipPackage {
- name = "ricbra-robots-txt-bundle-80d122a708893a762041464890e59a76babd6c22";
- src = fetchurl {
- url = https://api.github.com/repos/ricbra/robots-txt-bundle/zipball/80d122a708893a762041464890e59a76babd6c22;
- sha256 = "0w3lfzy1ys0bwl3shy4ychldfd711w1p2y13i1az2z2gh731d0ad";
- };
- };
- };
- "robloach/component-installer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "robloach-component-installer-908a859aa7c4949ba9ad67091e67bac10b66d3d7";
- src = fetchurl {
- url = https://api.github.com/repos/RobLoach/component-installer/zipball/908a859aa7c4949ba9ad67091e67bac10b66d3d7;
- sha256 = "19y5sv4k338bihzmm8iac6q43r18vxhmbpvrdhz8jn39r51ampq9";
- };
- };
- };
- "sensio/distribution-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-distribution-bundle-eb6266b3b472e4002538610b28a0a04bcf94891a";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a;
- sha256 = "0wyffqj924lz9cv0vbahyngjw1g850v0p34swygzzgp3cr0ank13";
- };
- };
- };
- "sensio/framework-extra-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-framework-extra-bundle-bb907234df776b68922eb4b25bfa061683597b6a";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a;
- sha256 = "011hcljjcfq5qy4a7mlf0hwqxyb58yci40ini0n5rqandcyk2nck";
- };
- };
- };
- "sensiolabs/security-checker" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensiolabs-security-checker-dc270d5fec418cc6ac983671dba5d80ffaffb142";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142;
- sha256 = "0fnshyd6f8j91a7y604nh6sqgscjl48mfa0727g2r4hkdfz8hpd1";
- };
- };
- };
- "swiftmailer/swiftmailer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "swiftmailer-swiftmailer-7ffc1ea296ed14bf8260b6ef11b80208dbadba91";
- src = fetchurl {
- url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91;
- sha256 = "1vl5pzgvr2yfrj1yfs02mi917b0gr56v76ibi40r51a3346zhp6v";
- };
- };
- };
- "symfony/assetic-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-assetic-bundle-2e0a23a4874838e26de6f025e02fc63328921a4c";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c;
- sha256 = "17rxrkyzxa6x5nn7qhhhdgx4z0nlznnq5fifza4wv9znca8bbwyc";
- };
- };
- };
- "symfony/monolog-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-monolog-bundle-8781649349fe418d51d194f8c9d212c0b97c40dd";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/monolog-bundle/zipball/8781649349fe418d51d194f8c9d212c0b97c40dd;
- sha256 = "0wcqhg1vfdj3mxacr3fxpgqwy1rk9znjg9bmzx4jymk8l16i7bq8";
- };
- };
- };
- "symfony/polyfill-apcu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-apcu-9b83bd010112ec196410849e840d9b9fefcb15ad";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/9b83bd010112ec196410849e840d9b9fefcb15ad;
- sha256 = "0iiiqbn0bs0zqc95nz8l1qa5ysy0iifx4f27r9wnhzsh6f1h02mv";
- };
- };
- };
- "symfony/polyfill-intl-icu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-intl-icu-80ee17ae83c10cd513e5144f91a73607a21edb4e";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/80ee17ae83c10cd513e5144f91a73607a21edb4e;
- sha256 = "1hck9bn8zfb1pmx2yccf4w5dd9rbmvwii7hncin6px6nasi6wzvv";
- };
- };
- };
- "symfony/polyfill-mbstring" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-mbstring-3296adf6a6454a050679cde90f95350ad604b171";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171;
- sha256 = "02wyx9fjx9lyc5q5d3bnn8aw9xag8im2wqanmbkljwd5vmx9k9b2";
- };
- };
- };
- "symfony/polyfill-php56" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php56-af98553c84912459db3f636329567809d639a8f6";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php56/zipball/af98553c84912459db3f636329567809d639a8f6;
- sha256 = "1l1ydsd7cq3s97cpgl4fw1qxc2wmv27yfxa3q8ng9p66ypzvkw42";
- };
- };
- };
- "symfony/polyfill-php70" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php70-77454693d8f10dd23bb24955cffd2d82db1007a6";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6;
- sha256 = "146d620ca725iqdh7j0dqb99h20d4vs641c9vjy9x4jws3rgj905";
- };
- };
- };
- "symfony/polyfill-util" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-util-1a5ad95d9436cbff3296034fe9f8d586dce3fb3a";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-util/zipball/1a5ad95d9436cbff3296034fe9f8d586dce3fb3a;
- sha256 = "0l7w4dlr7y3qijpaiq7hfhbhv1qqz9jjknr1n6k4vrss2a8d1sxk";
- };
- };
- };
- "symfony/swiftmailer-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec;
- sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01";
- };
- };
- };
- "symfony/symfony" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-symfony-4babd75194d45f7a4412560038924f3008c67ef2";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/symfony/zipball/4babd75194d45f7a4412560038924f3008c67ef2;
- sha256 = "1347qp994yg6k91v5gwdwnn202bz92m0pj4090b59z5nqxh7463d";
- };
- };
- };
- "twig/extensions" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "twig-extensions-d188c76168b853481cc75879ea045bf93d718e9c";
- src = fetchurl {
- url = https://api.github.com/repos/twigphp/Twig-extensions/zipball/d188c76168b853481cc75879ea045bf93d718e9c;
- sha256 = "0d6wywys5fqzi3m8g8h3sb5phl5y3a7vfc95n214mqp0iwrcmzwm";
- };
- };
- };
- "twig/twig" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "twig-twig-b48680b6eb7d16b5025b9bfc4108d86f6b8af86f";
- src = fetchurl {
- url = https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f;
- sha256 = "1q82f246wq7whl11lx00n0skwmllppvpzg20x6q4frmw44dc6v9a";
- };
- };
- };
- "willdurand/jsonp-callback-validator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "willdurand-jsonp-callback-validator-1a7d388bb521959e612ef50c5c7b1691b097e909";
- src = fetchurl {
- url = https://api.github.com/repos/willdurand/JsonpCallbackValidator/zipball/1a7d388bb521959e612ef50c5c7b1691b097e909;
- sha256 = "19ds8f3nbss4b2xvqkcjkcvz0l4c5nhrm8w8yxc8a508r0jmd9in";
- };
- };
- };
- "zendframework/zend-code" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-code-95033f061b083e16cdee60530ec260d7d628b887";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887;
- sha256 = "0h77qf267l2sp9wg3n61dpgpf6wh6p5jssy8mrg7vlns2j03f9f5";
- };
- };
- };
- "zendframework/zend-eventmanager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd;
- sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n";
- };
- };
- };
- };
- devPackages = {
- "doctrine/data-fixtures" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-data-fixtures-17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/data-fixtures/zipball/17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e;
- sha256 = "15k7vl58kwh02g0a93rab82ifbgmc91srgminzlkjq5kx8agh7ab";
- };
- };
- };
- "doctrine/doctrine-fixtures-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-fixtures-bundle-74b8cc70a4a25b774628ee59f4cdf3623a146273";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/74b8cc70a4a25b774628ee59f4cdf3623a146273;
- sha256 = "1bbflq8k6izwqgp9ka2gyb5y96a80b4lnlc5wrgc5gnih7hqidlf";
- };
- };
- };
- "sensio/generator-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65;
- sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3";
- };
- };
- };
- "symfony/phpunit-bridge" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-phpunit-bridge-7470518370113785f67a7fd8e6e1667661e88805";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/7470518370113785f67a7fd8e6e1667661e88805;
- sha256 = "0jd28ag0wks9sv62rkwsbx68csvdl5gabbz2h01hkqpa23gdkhs9";
- };
- };
- };
- };
-}
diff --git a/modules/private/websites/connexionswing/integration.nix b/modules/private/websites/connexionswing/integration.nix
deleted file mode 100644
index 9cf2b94..0000000
--- a/modules/private/websites/connexionswing/integration.nix
+++ /dev/null
@@ -1,141 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.connexionswing.integration;
- webRoot = "/var/lib/ftp/immae/connexionswing/web";
- varDir = "/var/lib/ftp/immae/connexionswing_var";
- cfg = config.myServices.websites.connexionswing.integration;
- pcfg = config.services.phpApplication;
-in {
- options.myServices.websites.connexionswing.integration.enable = lib.mkEnableOption "enable Connexionswing's website in integration";
-
- config = lib.mkIf cfg.enable {
- services.phpApplication.apps.connexionswing_integration = {
- websiteEnv = "integration";
- httpdUser = config.services.httpd.Inte.user;
- httpdGroup = config.services.httpd.Inte.group;
- inherit webRoot varDir;
- varDirPaths = {
- "medias" = "0700";
- "uploads" = "0700";
- "var" = "0700";
- };
- app = "/var/lib/ftp/immae/connexionswing";
- serviceDeps = [ "mysql.service" ];
- preStartActions = [
- "./bin/console --env=dev cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" "/run/wrappers/bin/sendmail" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
- };
- phpEnv = {
- SYMFONY_DEBUG_MODE = "\"yes\"";
- };
- phpWatchFiles = [
- config.secrets.fullPaths."websites/connexionswing/integration"
- ];
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/connexionswing/integration" = {
- user = config.services.httpd.Inte.user;
- group = config.services.httpd.Inte.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_host: ${secrets.mysql.host}
- database_port: ${secrets.mysql.port}
- database_name: ${secrets.mysql.database}
- database_user: ${secrets.mysql.user}
- database_password: ${secrets.mysql.password}
- database_server_version: ${pkgs.mariadb.mysqlVersion}
- mailer_transport: sendmail
- mailer_host: null
- mailer_user: null
- mailer_password: null
- subscription_email: ${secrets.email}
- allow_robots: true
- secret: ${secrets.secret}
- '';
- };
-
- services.websites.env.integration.vhostConfs.connexionswing_integration = {
- certName = "integration";
- addToCerts = true;
- hosts = ["connexionswing.cs.immae.dev" "sandetludo.cs.immae.dev" ];
- root = webRoot;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.connexionswing_integration}|fcgi://localhost"
-
-
-
- Options FollowSymLinks
- AllowOverride None
- Require all granted
-
-
-
- Options FollowSymLinks
- AllowOverride None
- Require all granted
-
-
-
- Use LDAPConnect
- Require ldap-group cn=cs.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- DirectoryIndex app_dev.php
-
-
- Options -MultiViews
-
-
-
- RewriteEngine On
-
- RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
- RewriteRule ^(.*) - [E=BASE:%1]
-
- # Maintenance script
- RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
- RewriteCond %{SCRIPT_FILENAME} !maintenance.php
- RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L]
- ErrorDocument 503 /maintenance.php
-
- # Sets the HTTP_AUTHORIZATION header removed by Apache
- RewriteCond %{HTTP:Authorization} .
- RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- RewriteCond %{ENV:REDIRECT_STATUS} ^$
- RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
-
- # If the requested filename exists, simply serve it.
- # We only want to let Apache serve files and not directories.
- RewriteCond %{REQUEST_FILENAME} -f
- RewriteRule ^ - [L]
-
- # Rewrite all other queries to the front controller.
- RewriteRule ^ %{ENV:BASE}/app_dev.php [L]
-
-
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/connexionswing/production.nix b/modules/private/websites/connexionswing/production.nix
deleted file mode 100644
index 4b0407f..0000000
--- a/modules/private/websites/connexionswing/production.nix
+++ /dev/null
@@ -1,110 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.connexionswing.production;
- app = pkgs.callPackage ./app {
- composerEnv = pkgs.composerEnv.override { php = pkgs.php72; };
- environment = secrets.environment;
- varDir = "/var/lib/connexionswing_production";
- secretsPath = config.secrets.fullPaths."websites/connexionswing/production";
- };
- cfg = config.myServices.websites.connexionswing.production;
- pcfg = config.services.phpApplication;
-in {
- options.myServices.websites.connexionswing.production.enable = lib.mkEnableOption "enable Connexionswing's website in production";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "connexionswing.com"; } ];
- services.phpApplication.apps.connexionswing_production = {
- websiteEnv = "production";
- httpdUser = config.services.httpd.Prod.user;
- httpdGroup = config.services.httpd.Prod.group;
- inherit (app) webRoot varDir;
- varDirPaths = {
- "medias" = "0700";
- "uploads" = "0700";
- "var" = "0700";
- };
- inherit app;
- serviceDeps = [ "mysql.service" ];
- preStartActions = [
- "./bin/console --env=${app.environment} cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" "/run/wrappers/bin/sendmail" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "dynamic";
- "pm.max_children" = "20";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "3";
- };
- phpWatchFiles = [
- config.secrets.fullPaths."websites/connexionswing/production"
- ];
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/connexionswing/production" = {
- user = config.services.httpd.Prod.user;
- group = config.services.httpd.Prod.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_host: ${secrets.mysql.host}
- database_port: ${secrets.mysql.port}
- database_name: ${secrets.mysql.database}
- database_user: ${secrets.mysql.user}
- database_password: ${secrets.mysql.password}
- database_server_version: ${pkgs.mariadb.mysqlVersion}
- mailer_transport: sendmail
- mailer_host: null
- mailer_user: null
- mailer_password: null
- subscription_email: ${secrets.email}
- allow_robots: true
- secret: ${secrets.secret}
- services:
- swiftmailer.mailer.default.transport:
- class: Swift_SendmailTransport
- arguments: ['/run/wrappers/bin/sendmail -bs']
- '';
- };
-
- services.websites.env.production.vhostConfs.connexionswing_production = {
- certName = "connexionswing";
- certMainHost = "connexionswing.com";
- hosts = ["connexionswing.com" "sandetludo.com" "www.connexionswing.com" "www.sandetludo.com" ];
- root = app.webRoot;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.connexionswing_production}|fcgi://localhost"
-
-
-
- Options FollowSymLinks
- AllowOverride None
- Require all granted
-
-
-
- Options FollowSymLinks
- AllowOverride None
- Require all granted
-
-
- Use Stats connexionswing.com
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/default.nix b/modules/private/websites/default.nix
deleted file mode 100644
index 4864034..0000000
--- a/modules/private/websites/default.nix
+++ /dev/null
@@ -1,324 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- www_root = ./_www;
- theme_root = pkgs.webapps.apache-theme.theme;
- apacheConfig = {
- cache = {
- # This setting permits to ignore time-based cache for files in the
- # nix store:
- # If a client requires an If-Modified-Since from timestamp 1, then
- # this header is removed, and if the response contains a
- # too old Last-Modified tag, then it is removed too
- extraConfig = ''
-
- RequestHeader unset If-Modified-Since
-
- Header unset Last-Modified "expr=%{LAST_MODIFIED} < 19991231235959"
- '';
- };
- gzip = {
- modules = [ "deflate" "filter" ];
- extraConfig = ''
- AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
- '';
- };
- macros = {
- modules = [ "macro" ];
- };
- stats = {
- extraConfig = ''
-
- Alias /webstats ${config.services.webstats.dataDir}/%{domain}
-
- DirectoryIndex index.html
- AllowOverride None
- Require all granted
-
-
- Use LDAPConnect
- Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu
-
-
- '';
- };
- ldap = {
- modules = [ "ldap" "authnz_ldap" ];
- extraConfig = ''
-
- LDAPSharedCacheSize 500000
- LDAPCacheEntries 1024
- LDAPCacheTTL 600
- LDAPOpCacheEntries 1024
- LDAPOpCacheTTL 600
-
-
- Include ${config.secrets.fullPaths."apache-ldap"}
- '';
- };
- global = {
- extraConfig = ''
- ErrorDocument 500 /maintenance_immae.html
- ErrorDocument 501 /maintenance_immae.html
- ErrorDocument 502 /maintenance_immae.html
- ErrorDocument 503 /maintenance_immae.html
- ErrorDocument 504 /maintenance_immae.html
- Alias /maintenance_immae.html ${www_root}/maintenance_immae.html
- ProxyPass /maintenance_immae.html !
-
- AliasMatch "(.*)/googleb6d69446ff4ca3e5.html" ${www_root}/googleb6d69446ff4ca3e5.html
-
- AllowOverride None
- Require all granted
-
- '';
- };
- apaxy = {
- extraConfig = (pkgs.webapps.apache-theme.override { inherit theme_root; }).apacheConfig;
- };
- http2 = {
- modules = [ "http2" ];
- extraConfig = ''
- Protocols h2 http/1.1
- '';
- };
- customLog = {
- extraConfig = ''
- LogFormat "%{Host}i:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost
- '';
- };
- };
- makeModules = lib.lists.flatten (lib.attrsets.mapAttrsToList (n: v: v.modules or []) apacheConfig);
- makeExtraConfig = (builtins.filter (x: x != null) (lib.attrsets.mapAttrsToList (n: v: v.extraConfig or null) apacheConfig));
- moomin = let
- lines = lib.splitString "\n" (lib.fileContents ./moomin.txt);
- pad = width: str: let
- padWidth = width - lib.stringLength str;
- padding = lib.concatStrings (lib.genList (lib.const "0") padWidth);
- in lib.optionalString (padWidth > 0) padding + str;
- in
- lib.imap0 (i: e: ''Header always set "X-Moomin-${pad 2 (builtins.toString i)}" "${e}"'') lines;
-in
-{
- options.myServices.websites.enable = lib.mkEnableOption "enable websites";
-
- config = lib.mkIf config.myServices.websites.enable {
- users.users.wwwrun.extraGroups = [ "keys" ];
- networking.firewall.allowedTCPPorts = [ 80 443 ];
-
- secrets.keys."apache-ldap" = {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0400";
- text = ''
-
-
- AuthLDAPURL ldap://ldap.immae.eu:389/dc=immae,dc=eu STARTTLS
- AuthLDAPBindDN cn=httpd,ou=services,dc=immae,dc=eu
- AuthLDAPBindPassword "${config.myEnv.httpd.ldap.password}"
- AuthType Basic
- AuthName "Authentification requise (Acces LDAP)"
- AuthBasicProvider ldap
-
-
- '';
- };
-
- system.activationScripts = {
- httpd = ''
- install -d -m 0755 /var/lib/acme/acme-challenges
- install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions
- '';
- };
-
- services.phpfpm = {
- phpOptions = ''
- session.save_path = "/var/lib/php/sessions"
- post_max_size = 20M
- ; 15 days (seconds)
- session.gc_maxlifetime = 1296000
- ; 30 days (minutes)
- session.cache_expire = 43200
- '';
- settings = {
- log_level = "notice";
- };
- };
-
- services.filesWatcher.httpdProd.paths = [ config.secrets.fullPaths."apache-ldap" ];
- services.filesWatcher.httpdInte.paths = [ config.secrets.fullPaths."apache-ldap" ];
- services.filesWatcher.httpdTools.paths = [ config.secrets.fullPaths."apache-ldap" ];
-
- services.websites.env.production = {
- enable = true;
- adminAddr = "httpd@immae.eu";
- httpdName = "Prod";
- ips =
- let ips = config.myEnv.servers.eldiron.ips.production;
- in [ips.ip4] ++ (ips.ip6 or []);
- modules = makeModules;
- extraConfig = makeExtraConfig;
- fallbackVhost = {
- certName = "eldiron";
- hosts = ["eldiron.immae.eu" ];
- root = www_root;
- extraConfig = [ "DirectoryIndex index.htm" ];
- };
- };
-
- services.websites.env.integration = {
- enable = true;
- adminAddr = "httpd@immae.eu";
- httpdName = "Inte";
- ips =
- let ips = config.myEnv.servers.eldiron.ips.integration;
- in [ips.ip4] ++ (ips.ip6 or []);
- modules = makeModules;
- extraConfig = makeExtraConfig ++ moomin;
- fallbackVhost = {
- certName = "eldiron";
- hosts = ["eldiron.immae.eu" ];
- root = www_root;
- extraConfig = [ "DirectoryIndex index.htm" ];
- };
- };
-
- services.websites.env.tools = {
- enable = true;
- adminAddr = "httpd@immae.eu";
- httpdName = "Tools";
- ips =
- let ips = config.myEnv.servers.eldiron.ips.main;
- in [ips.ip4] ++ (ips.ip6 or []);
- modules = makeModules;
- extraConfig = makeExtraConfig ++
- [ ''
- RedirectMatch ^/licen[cs]es?_et_tip(ping)?$ https://www.immae.eu/licences_et_tip.html
- RedirectMatch ^/licen[cs]es?_and_tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html
- RedirectMatch ^/licen[cs]es?$ https://www.immae.eu/licenses_and_tipping.html
- RedirectMatch ^/tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html
- RedirectMatch ^/(mentions|mentions_legales|legal)$ https://www.immae.eu/mentions.html
- RedirectMatch ^/CGU$ https://www.immae.eu/CGU
- ''
- ];
- nosslVhost = {
- enable = true;
- host = "nossl.immae.eu";
- };
- fallbackVhost = {
- certName = "eldiron";
- hosts = ["eldiron.immae.eu" ];
- root = www_root;
- extraConfig = [ "DirectoryIndex index.htm" ];
- };
- };
-
- myServices.websites = {
- bakeer.cloud.enable = true;
- capitaines.landing_pages.enable = true;
-
- chloe = {
- integration.enable = true;
- production.enable = true;
- };
-
- cip-ca = {
- sympa.enable = true;
- };
-
- connexionswing = {
- integration.enable = true;
- production.enable = true;
- };
-
- denise = {
- evariste.enable = true;
- denisejerome.enable = true;
- oms.enable = true;
- bingo.enable = true;
- aventuriers.enable = true;
- production.enable = true;
- };
-
- emilia = {
- moodle.enable = false;
- atelierfringant.enable = true;
- };
-
- florian = {
- app.enable = true;
- integration.enable = true;
- production.enable = true;
- };
-
- immae = {
- production.enable = true;
- release.enable = true;
- temp.enable = true;
- };
-
- isabelle = {
- aten_integration.enable = true;
- aten_production.enable = true;
- iridologie.enable = true;
- };
-
- jerome.naturaloutil.enable = true;
-
- leila.production.enable = true;
-
- ludivine = {
- integration.enable = true;
- production.enable = true;
- };
-
- nassime.production.enable = true;
-
- nath.villon.enable = true;
-
- papa = {
- surveillance.enable = true;
- maison_bbc.enable = true;
- };
-
- patrick_fodella = {
- ecolyeu.enable = true;
- altermondia.enable = true;
- };
-
- piedsjaloux = {
- integration.enable = true;
- production.enable = true;
- };
-
- ressourcerie_banon.production.enable = true;
- ressourcerie_banon.cryptpad.enable = true;
- ressourcerie_banon.cloud.enable = true;
-
- richie.production.enable = true;
-
- syden.peertube.enable = true;
-
- telio_tortay.production.enable = true;
-
- tools.assets.enable = true;
- tools.cloud.enable = true;
- tools.commento.enable = true;
- tools.cryptpad.enable = true;
- tools.dav.enable = true;
- tools.db.enable = true;
- tools.diaspora.enable = true;
- tools.etherpad-lite.enable = true;
- tools.git.enable = true;
- tools.mastodon.enable = true;
- tools.mediagoblin.enable = true;
- tools.peertube.enable = true;
- tools.performance.enable = true;
- tools.tools.enable = true;
- tools.email.enable = true;
- tools.stats.enable = false;
-
- games.codenames.enable = true;
- games.terraforming-mars.enable = true;
- };
- };
-}
diff --git a/modules/private/websites/denise/aventuriers.nix b/modules/private/websites/denise/aventuriers.nix
deleted file mode 100644
index 2bbf7bf..0000000
--- a/modules/private/websites/denise/aventuriers.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.websites.denise.aventuriers;
- varDir = "/var/lib/buildbot/outputs/denise/aventuriers";
-in {
- options.myServices.websites.denise.aventuriers.enable = lib.mkEnableOption "enable Denise's Aventuriers website";
-
- config = lib.mkIf cfg.enable {
- services.websites.env.production.vhostConfs.denise_aventuriers = {
- certName = "denise";
- addToCerts = true;
- hosts = [ "aventuriers.syanni.eu" ];
- root = varDir;
- extraConfig = [
- ''
-
- DirectoryIndex aventuriers.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/denise/bingo.nix b/modules/private/websites/denise/bingo.nix
deleted file mode 100644
index 9130462..0000000
--- a/modules/private/websites/denise/bingo.nix
+++ /dev/null
@@ -1,100 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.websites.denise.bingo;
- varDir = "/var/lib/buildbot/outputs/denise/bingo";
- varDirBeta = "/var/lib/buildbot/outputs/denise/bingo_beta";
- socket = "/run/denise_bingo/socket.sock";
- socket_beta = "/run/denise_bingo_beta/socket.sock";
-in {
- options.myServices.websites.denise.bingo.enable = lib.mkEnableOption "enable Denise's bingo website";
-
- config = lib.mkIf cfg.enable {
- services.websites.env.production.vhostConfs.denise_bingo = {
- certName = "denise";
- addToCerts = true;
- hosts = [ "bingo.syanni.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPreserveHost on
- ProxyVia On
- ProxyRequests Off
- ProxyPassMatch ^/.well-known/acme-challenge !
- ProxyPass / unix://${socket}|http://bingo.syanni.eu/
- ProxyPassReverse / unix://${socket}|http://bingo.syanni.eu/
- ''
- ];
- };
-
- systemd.services.denise-bingo = {
- description = "Denise bingo website";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Type = "simple";
- WorkingDirectory = varDir;
- ExecStart = let
- python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.matplotlib p.unidecode ]);
- in
- "${python}/bin/gunicorn -w4 -p /run/denise_bingo/gunicorn.pid --bind unix:${socket} app:app";
- User = "wwwrun";
- Restart = "always";
- RestartSec = "5s";
- PIDFile = "/run/denise_bingo/gunicorn.pid";
- RuntimeDirectory = "denise_bingo";
- StandardOutput = "journal";
- StandardError = "inherit";
- };
- };
-
- security.sudo.extraRules = [
- {
- commands = [
- { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-bingo-beta.service"; }
- { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-bingo.service"; }
- ];
- users = ["buildbot"];
- runAs = "root";
- }
- ];
- services.websites.env.integration.vhostConfs.denise_bingo_beta = {
- certName = "denise";
- addToCerts = true;
- hosts = [ "beta.bingo.syanni.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPreserveHost on
- ProxyVia On
- ProxyRequests Off
- ProxyPassMatch ^/.well-known/acme-challenge !
- ProxyPass / unix://${socket_beta}|http://beta.bingo.syanni.eu/
- ProxyPassReverse / unix://${socket_beta}|http://beta.bingo.syanni.eu/
- ''
- ];
- };
-
- systemd.services.denise-bingo-beta = {
- description = "Denise bingo beta website";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Type = "simple";
- WorkingDirectory = varDirBeta;
- ExecStart = let
- python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask ]);
- in
- "${python}/bin/gunicorn -w4 -p /run/denise_bingo_beta/gunicorn.pid --bind unix:${socket_beta} app:app";
- User = "wwwrun";
- Restart = "always";
- RestartSec = "5s";
- PIDFile = "/run/denise_bingo_beta/gunicorn.pid";
- RuntimeDirectory = "denise_bingo_beta";
- StandardOutput = "journal";
- StandardError = "inherit";
- };
- };
- };
-}
diff --git a/modules/private/websites/denise/denisejerome.nix b/modules/private/websites/denise/denisejerome.nix
deleted file mode 100644
index a75e591..0000000
--- a/modules/private/websites/denise/denisejerome.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ lib, config, ... }:
-let
- cfg = config.myServices.websites.denise.denisejerome;
- varDir = "/var/lib/ftp/denise/denisejerome";
- env = config.myEnv.websites.denisejerome;
-in {
- options.myServices.websites.denise.denisejerome.enable = lib.mkEnableOption "enable Denise Jerome's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "denisejerome.piedsjaloux.fr"; } ];
-
- services.websites.env.production.vhostConfs.denise_denisejerome = {
- certName = "denise";
- certMainHost = "denisejerome.piedsjaloux.fr";
- hosts = ["denisejerome.piedsjaloux.fr" ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats denisejerome.piedsjaloux.fr
-
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride AuthConfig
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/denise/evariste.nix b/modules/private/websites/denise/evariste.nix
deleted file mode 100644
index 42f9b2e..0000000
--- a/modules/private/websites/denise/evariste.nix
+++ /dev/null
@@ -1,104 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.websites.denise.evariste;
- nsiVarDir = "/var/lib/ftp/denise/nsievariste";
- stmgVarDir = "/var/lib/ftp/denise/stmgevariste";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.denise.evariste.enable = lib.mkEnableOption "enable NSI/STMG Evariste website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [
- { name = "nsievariste.immae.eu"; }
- { name = "stmgevariste.immae.eu"; }
- ];
-
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- system.activationScripts.denise_evariste = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/denise_nsievariste
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/denise_stmgevariste
- '';
- };
- services.phpfpm.pools.denise_nsievariste = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/denise_nsievariste:${nsiVarDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/denise_nsievariste";
- };
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.vhostConfs.denise_nsievariste = {
- certName = "denise_evariste";
- addToCerts = true;
- certMainHost = "nsievariste.immae.eu";
- hosts = ["nsievariste.immae.eu" ];
- root = nsiVarDir;
- extraConfig = [
- ''
- Use Stats nsievariste.immae.eu
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.denise_nsievariste.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
-
- services.phpfpm.pools.denise_stmgevariste = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/denise_stmgevariste:${stmgVarDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/denise_stmgevariste";
- };
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.vhostConfs.denise_stmgevariste = {
- certName = "denise_evariste";
- addToCerts = true;
- hosts = ["stmgevariste.immae.eu" ];
- root = stmgVarDir;
- extraConfig = [
- ''
- Use Stats stmgevariste.immae.eu
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.denise_stmgevariste.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/denise/oms.nix b/modules/private/websites/denise/oms.nix
deleted file mode 100644
index 2f18037..0000000
--- a/modules/private/websites/denise/oms.nix
+++ /dev/null
@@ -1,100 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.websites.denise.oms;
- varDir = "/var/lib/buildbot/outputs/denise/oms";
- varDirBeta = "/var/lib/buildbot/outputs/denise/oms_beta";
- socket = "/run/denise_oms/socket.sock";
- socket_beta = "/run/denise_oms_beta/socket.sock";
-in {
- options.myServices.websites.denise.oms.enable = lib.mkEnableOption "enable Denise's OMS website";
-
- config = lib.mkIf cfg.enable {
- services.websites.env.production.vhostConfs.denise_oms = {
- certName = "denise";
- addToCerts = true;
- hosts = [ "oms.syanni.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPreserveHost on
- ProxyVia On
- ProxyRequests Off
- ProxyPassMatch ^/.well-known/acme-challenge !
- ProxyPass / unix://${socket}|http://oms.syanni.eu/
- ProxyPassReverse / unix://${socket}|http://oms.syanni.eu/
- ''
- ];
- };
-
- systemd.services.denise-oms = {
- description = "Denise OMS website";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Type = "simple";
- WorkingDirectory = varDir;
- ExecStart = let
- python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.matplotlib p.unidecode ]);
- in
- "${python}/bin/gunicorn -w4 -p /run/denise_oms/gunicorn.pid --bind unix:${socket} app:app";
- User = "wwwrun";
- Restart = "always";
- RestartSec = "5s";
- PIDFile = "/run/denise_oms/gunicorn.pid";
- RuntimeDirectory = "denise_oms";
- StandardOutput = "journal";
- StandardError = "inherit";
- };
- };
-
- security.sudo.extraRules = [
- {
- commands = [
- { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-oms-beta.service"; }
- { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-oms.service"; }
- ];
- users = ["buildbot"];
- runAs = "root";
- }
- ];
- services.websites.env.integration.vhostConfs.denise_oms_beta = {
- certName = "denise";
- addToCerts = true;
- hosts = [ "beta.oms.syanni.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPreserveHost on
- ProxyVia On
- ProxyRequests Off
- ProxyPassMatch ^/.well-known/acme-challenge !
- ProxyPass / unix://${socket_beta}|http://beta.oms.syanni.eu/
- ProxyPassReverse / unix://${socket_beta}|http://beta.oms.syanni.eu/
- ''
- ];
- };
-
- systemd.services.denise-oms-beta = {
- description = "Denise OMS beta website";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- serviceConfig = {
- Type = "simple";
- WorkingDirectory = varDirBeta;
- ExecStart = let
- python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.matplotlib p.unidecode ]);
- in
- "${python}/bin/gunicorn -w4 -p /run/denise_oms_beta/gunicorn.pid --bind unix:${socket_beta} app:app";
- User = "wwwrun";
- Restart = "always";
- RestartSec = "5s";
- PIDFile = "/run/denise_oms_beta/gunicorn.pid";
- RuntimeDirectory = "denise_oms_beta";
- StandardOutput = "journal";
- StandardError = "inherit";
- };
- };
- };
-}
diff --git a/modules/private/websites/denise/production.nix b/modules/private/websites/denise/production.nix
deleted file mode 100644
index 9b28e9e..0000000
--- a/modules/private/websites/denise/production.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.websites.denise.production;
-in {
- options.myServices.websites.denise.production.enable = lib.mkEnableOption "enable Denise's website";
-
- config = lib.mkIf cfg.enable {
- services.websites.env.production.vhostConfs.denise_production = {
- certName = "denise";
- addToCerts = true;
- hosts = [ "syanni.eu" "www.syanni.eu" ];
- root = ../_www;
- extraConfig = [
- ''
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride AuthConfig
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/emilia/atelierfringant.nix b/modules/private/websites/emilia/atelierfringant.nix
deleted file mode 100644
index b47452f..0000000
--- a/modules/private/websites/emilia/atelierfringant.nix
+++ /dev/null
@@ -1,65 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.emilia.atelierfringant;
- varDir = "/var/lib/ftp/emilia/atelierfringant";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.emilia.atelierfringant.enable = lib.mkEnableOption "enable Émilia's website";
-
- config = lib.mkIf cfg.enable {
- system.activationScripts.emilia_atelierfringant = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/ftp/emilia/atelierfringant
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/emilia
- '';
- };
- systemd.services.phpfpm-emilia_atelierfringant.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-emilia_atelierfringant.wants = [ "mysql.service" ];
- services.phpfpm.pools.emilia_atelierfringant = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/emilia:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/emilia";
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- disable_functions = "mail"
- '';
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.emilia_atelierfringant = {
- certName = "emilia";
- certMainHost = "atelierfringant.org";
- hosts = ["atelierfringant.org" "www.atelierfringant.org" ];
- root = varDir;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.emilia_atelierfringant.socket}|fcgi://localhost"
-
-
-
- AllowOverride None
- Require all denied
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride all
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/emilia/moodle.nix b/modules/private/websites/emilia/moodle.nix
deleted file mode 100644
index 779c460..0000000
--- a/modules/private/websites/emilia/moodle.nix
+++ /dev/null
@@ -1,65 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.emilia.moodle;
- env = config.myEnv.websites.emilia;
- varDir = "/var/lib/emilia_moodle";
- siteDir = ./moodle;
- # php_admin_value[upload_max_filesize] = 50000000
- # php_admin_value[post_max_size] = 50000000
- configFile = ''
- dbtype = 'pgsql';
- $CFG->dblibrary = 'native';
- $CFG->dbhost = '${env.postgresql.host}';
- $CFG->dbname = '${env.postgresql.database}';
- $CFG->dbuser = '${env.postgresql.user}';
- $CFG->dbpass = '${env.postgresql.password}';
- $CFG->prefix = 'mdl_';
- $CFG->dboptions = array (
- 'dbpersist' => 0,
- 'dbport' => '${env.postgreesql.port}',
- 'dbsocket' => '${env.postgresql.password}',
- );
-
- $CFG->wwwroot = 'https://www.saison-photo.org';
- $CFG->dataroot = '${varDir}';
- $CFG->admin = 'admin';
-
- $CFG->directorypermissions = 02777;
-
- require_once(__DIR__ . '/lib/setup.php');
-
- // There is no php closing tag in this file,
- // it is intentional because it prevents trailing whitespace problems!
- '';
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.emilia.moodle.enable = lib.mkEnableOption "enable Emilia's website";
-
- config = lib.mkIf cfg.enable {
- system.activationScripts.emilia_moodle = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir}
- '';
- services.websites.env.production.vhostConfs.emilia_moodle = {
- certName = "emilia";
- certMainHost = "saison-photo.org";
- hosts = [ "saison-photo.org" "www.saison-photo.org" ];
- root = siteDir;
- extraConfig = [
- ''
-
- DirectoryIndex pause.html
- Options Indexes FollowSymLinks MultiViews Includes
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/emilia/moodle/pause.html b/modules/private/websites/emilia/moodle/pause.html
deleted file mode 100644
index 8b99c59..0000000
--- a/modules/private/websites/emilia/moodle/pause.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
- Pause
-
-
-
-
-
- Site web en pause !
-
-
Le site et les cours de photographie sont actuellement en pause.
-
-
-
-
diff --git a/modules/private/websites/florian/app.nix b/modules/private/websites/florian/app.nix
deleted file mode 100644
index 2df344f..0000000
--- a/modules/private/websites/florian/app.nix
+++ /dev/null
@@ -1,142 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; };
- secrets = config.myEnv.websites.tellesflorian.integration;
- webRoot = "/var/lib/ftp/immae/florian/web";
- cfg = config.myServices.websites.florian.app;
- pcfg = config.services.phpApplication;
-in {
- options.myServices.websites.florian.app.enable = lib.mkEnableOption "enable Florian's app in integration";
-
- config = lib.mkIf cfg.enable {
- services.phpApplication.apps.florian_app = {
- websiteEnv = "integration";
- httpdUser = config.services.httpd.Inte.user;
- httpdGroup = config.services.httpd.Inte.group;
- inherit webRoot;
- varDir = "/var/lib/ftp/immae/florian_var";
- varDirPaths = {
- "var" = "0700";
- };
- app = "/var/lib/ftp/immae/florian";
- serviceDeps = [ "mysql.service" ];
- preStartActions = [
- "./bin/console --env=dev cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
- };
- phpEnv = {
- SYMFONY_DEBUG_MODE = "\"yes\"";
- };
- phpWatchFiles = [
- config.secrets.fullPaths."websites/florian/app"
- ];
- phpPackage = pkgs.php72;
- };
-
- secrets.keys = {
- "websites/florian/app_passwords" = {
- user = config.services.httpd.Inte.user;
- group = config.services.httpd.Inte.group;
- permissions = "0400";
- text = ''
- invite:${secrets.invite_passwords}
- '';
- };
- "websites/florian/app" = {
- user = config.services.httpd.Inte.user;
- group = config.services.httpd.Inte.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_host: ${secrets.mysql.host}
- database_port: ${secrets.mysql.port}
- database_name: ${secrets.mysql.database}
- database_user: ${secrets.mysql.user}
- database_password: ${secrets.mysql.password}
- mailer_transport: smtp
- mailer_host: 127.0.0.1
- mailer_user: null
- mailer_password: null
- secret: ${secrets.secret}
- '';
- };
- };
-
- services.websites.env.integration.modules = adminer.apache.modules;
- services.websites.env.integration.vhostConfs.florian_app = {
- certName = "integration";
- addToCerts = true;
- hosts = [ "app.tellesflorian.com" ];
- root = webRoot;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.florian_app}|fcgi://localhost"
-
-
-
- AuthBasicProvider file ldap
- Use LDAPConnect
- Require ldap-group cn=app.tellesflorian.com,cn=httpd,ou=services,dc=immae,dc=eu
-
- AuthUserFile "${config.secrets.fullPaths."websites/florian/app_passwords"}"
- Require user "invite"
-
- ErrorDocument 401 " "
-
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- DirectoryIndex app_dev.php
-
-
- Options -MultiViews
-
-
-
- RewriteEngine On
-
- RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
- RewriteRule ^(.*) - [E=BASE:%1]
-
- # Maintenance script
- RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
- RewriteCond %{SCRIPT_FILENAME} !maintenance.php
- RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L]
- ErrorDocument 503 /maintenance.php
-
- # Sets the HTTP_AUTHORIZATION header removed by Apache
- RewriteCond %{HTTP:Authorization} .
- RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- RewriteCond %{ENV:REDIRECT_STATUS} ^$
- RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
-
- # If the requested filename exists, simply serve it.
- # We only want to let Apache serve files and not directories.
- RewriteCond %{REQUEST_FILENAME} -f
- RewriteRule ^ - [L]
-
- # Rewrite all other queries to the front controller.
- RewriteRule ^ %{ENV:BASE}/app_dev.php [L]
-
-
-
- ''
- (adminer.apache.vhostConf null)
- ];
- };
- };
-}
diff --git a/modules/private/websites/florian/app/default.nix b/modules/private/websites/florian/app/default.nix
deleted file mode 100644
index 28a7ec1..0000000
--- a/modules/private/websites/florian/app/default.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{ environment, varDir, secretsPath
-, composerEnv, fetchurl, sources }:
-let
- app = composerEnv.buildPackage (
- import ./php-packages.nix { inherit composerEnv fetchurl; } //
- rec {
- version = sources.websites-florian-app.version;
- pname = "tellesflorian";
- name = "${pname}-${version}";
- src = sources.websites-florian-app;
- noDev = (environment == "prod");
- preInstall = ''
- export SYMFONY_ENV="${environment}"
- '';
- postInstall = ''
- cd $out
- rm app/config/parameters.yml
- ln -sf ${secretsPath} app/config/parameters.yml
- rm -rf var/{logs,cache}
- ln -sf ${varDir}/var/{logs,cache,sessions} var/
- '';
- passthru = {
- inherit varDir environment;
- webRoot = "${app}/web";
- };
- });
-in app
diff --git a/modules/private/websites/florian/app/php-packages.nix b/modules/private/websites/florian/app/php-packages.nix
deleted file mode 100644
index 0c7e00c..0000000
--- a/modules/private/websites/florian/app/php-packages.nix
+++ /dev/null
@@ -1,389 +0,0 @@
-# Generated with composer2nix and adapted to return only the list of
-# packages
-{ composerEnv, fetchurl }:
-{
- packages = {
- "composer/ca-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "composer-ca-bundle-943b2c4fcad1ef178d16a713c2468bf7e579c288";
- src = fetchurl {
- url = https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288;
- sha256 = "1gljia7akifp57w4rjzyh1km23kwymmvglz0mgafdgqzczcw0m6w";
- };
- };
- };
- "doctrine/annotations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-annotations-f25c8aab83e0c3e976fd7d19875f198ccf2f7535";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535;
- sha256 = "08vm22fqq8r4bg2fk06y4inqnc8x0yfmsss28w5ra2011x2phq4z";
- };
- };
- };
- "doctrine/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-cache-eb152c5100571c7a45470ff2a35095ab3f3b900b";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b;
- sha256 = "0iq0qqv1smlqz63jhj2fpjy54c5dwfwxyf5c89iky6i0yb81gwyd";
- };
- };
- };
- "doctrine/collections" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-collections-6c1e4eef75f310ea1b3e30945e9f06e652128b8a";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a;
- sha256 = "1dkxr2vjycykpcnnmq68rcnn1ww0kbpizd5pxxm6x9i2ilj8cbn7";
- };
- };
- };
- "doctrine/common" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-common-7bce00698899aa2c06fe7365c76e4d78ddb15fa3";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/common/zipball/7bce00698899aa2c06fe7365c76e4d78ddb15fa3;
- sha256 = "12yizcsxsbhhi8hwaik4zalr12n5nxbpld05zygqhx6miyr92jyd";
- };
- };
- };
- "doctrine/dbal" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-dbal-729340d8d1eec8f01bff708e12e449a3415af873";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873;
- sha256 = "184p8h0n6mcm0y6vfyh0z6qcxmmf8h5z4vdvxd4ycmx0531lnhj3";
- };
- };
- };
- "doctrine/doctrine-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-bundle-eb6e4fb904a459be28872765ab6e2d246aac7c87";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/eb6e4fb904a459be28872765ab6e2d246aac7c87;
- sha256 = "0kkisgyblc9hf9x3zpbb1wif51fa8mi6svyd44nls38k9k93dp17";
- };
- };
- };
- "doctrine/doctrine-cache-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-cache-bundle-9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1;
- sha256 = "08bqz18vk4673pnm2r2pcph6pdchc36zajnma1p9c6dp21sv7iki";
- };
- };
- };
- "doctrine/inflector" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-inflector-90b2128806bfde671b6952ab8bea493942c1fdae";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae;
- sha256 = "01vmclj3k7xil51jg329fznshh8d07pvm4mr89lvfn1d7fyrq6qw";
- };
- };
- };
- "doctrine/instantiator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-instantiator-8e884e78f9f0eb1329e445619e04456e64d8051d";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d;
- sha256 = "15dcja45rnwya431pcm826l68k1g8f1fabl7rih69alcdyvdlln4";
- };
- };
- };
- "doctrine/lexer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c;
- sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74";
- };
- };
- };
- "doctrine/orm" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-orm-810a7baf81462a5ddf10e8baa8cb94b6eec02754";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/doctrine2/zipball/810a7baf81462a5ddf10e8baa8cb94b6eec02754;
- sha256 = "1hmkc7917kgnav9hmlgvlp7qwm3zjj910ci71g9yqwjh6s28wrf1";
- };
- };
- };
- "fig/link-util" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac;
- sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64";
- };
- };
- };
- "incenteev/composer-parameter-handler" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550";
- src = fetchurl {
- url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550;
- sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm";
- };
- };
- };
- "jdorn/sql-formatter" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc";
- src = fetchurl {
- url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc;
- sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi";
- };
- };
- };
- "monolog/monolog" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "monolog-monolog-fd8c787753b3a2ad11bc60c063cff1358a32a3b4";
- src = fetchurl {
- url = https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4;
- sha256 = "0avf3y8raw23krwdb7kw9qb5bsr5ls4i7qd2vh7hcds3qjixg3h9";
- };
- };
- };
- "paragonie/random_compat" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "paragonie-random_compat-5da4d3c796c275c55f057af5a643ae297d96b4d8";
- src = fetchurl {
- url = https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8;
- sha256 = "1hp6pin4923c300yi85m7qk04gsrbygv52wv5zm7giyyf0k0g073";
- };
- };
- };
- "psr/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8;
- sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz";
- };
- };
- };
- "psr/container" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f;
- sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j";
- };
- };
- };
- "psr/link" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562;
- sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13";
- };
- };
- };
- "psr/log" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-log-4ebe3a8bf773a19edfe0a84b6585ba3d401b724d";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d;
- sha256 = "1mlcv17fjw39bjpck176ah1z393b6pnbw3jqhhrblj27c70785md";
- };
- };
- };
- "psr/simple-cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b;
- sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw";
- };
- };
- };
- "sensio/distribution-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-distribution-bundle-eb6266b3b472e4002538610b28a0a04bcf94891a";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a;
- sha256 = "0wyffqj924lz9cv0vbahyngjw1g850v0p34swygzzgp3cr0ank13";
- };
- };
- };
- "sensio/framework-extra-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-framework-extra-bundle-bf4940572e43af679aaa13be98f3446a1c237bd8";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bf4940572e43af679aaa13be98f3446a1c237bd8;
- sha256 = "1kb1n5w3kfc0kf4pslqdx5pgp0g4hmaag0i00wvjj2n3pjfm5lhf";
- };
- };
- };
- "sensiolabs/security-checker" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensiolabs-security-checker-dc270d5fec418cc6ac983671dba5d80ffaffb142";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142;
- sha256 = "0fnshyd6f8j91a7y604nh6sqgscjl48mfa0727g2r4hkdfz8hpd1";
- };
- };
- };
- "swiftmailer/swiftmailer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "swiftmailer-swiftmailer-7ffc1ea296ed14bf8260b6ef11b80208dbadba91";
- src = fetchurl {
- url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91;
- sha256 = "1vl5pzgvr2yfrj1yfs02mi917b0gr56v76ibi40r51a3346zhp6v";
- };
- };
- };
- "symfony/monolog-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-monolog-bundle-8781649349fe418d51d194f8c9d212c0b97c40dd";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/monolog-bundle/zipball/8781649349fe418d51d194f8c9d212c0b97c40dd;
- sha256 = "0wcqhg1vfdj3mxacr3fxpgqwy1rk9znjg9bmzx4jymk8l16i7bq8";
- };
- };
- };
- "symfony/polyfill-apcu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-apcu-e8ae2136ddb53dea314df56fcd88e318ab936c00";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00;
- sha256 = "07wdszb9ircnidjk3fp3cvcrggxv3sfm996jzd0a9pm6vfz9hymv";
- };
- };
- };
- "symfony/polyfill-intl-icu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-intl-icu-254919c03761d46c29291616576ed003f10e91c1";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/254919c03761d46c29291616576ed003f10e91c1;
- sha256 = "01yivzv7p55fzrkkyvgd57zpyz82zn1qp0h6nzr77k01rkv3w0ds";
- };
- };
- };
- "symfony/polyfill-mbstring" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-mbstring-78be803ce01e55d3491c1397cf1c64beb9c1b63b";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b;
- sha256 = "0cqr8ni6wpbaxa9gyr40y5bsv54pa2g8kdarlfw3qg2rgzmk0yz1";
- };
- };
- };
- "symfony/polyfill-php56" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php56-ebc999ce5f14204c5150b9bd15f8f04e621409d8";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8;
- sha256 = "0b2j56l6d6rdggx7vr20d527df4pjfp4lgxpglsgbf5912rcyf83";
- };
- };
- };
- "symfony/polyfill-php70" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php70-3532bfcd8f933a7816f3a0a59682fc404776600f";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php70/zipball/3532bfcd8f933a7816f3a0a59682fc404776600f;
- sha256 = "151m76lc9w0kxnnwk4zdcjlmj7fppibnp8jisgpvvq32ml3fizdi";
- };
- };
- };
- "symfony/polyfill-util" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-util-e17c808ec4228026d4f5a8832afa19be85979563";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563;
- sha256 = "17sdpdidc0b701f9rippjv1grfci7wrdpy2i1inlwwpr6zy782cq";
- };
- };
- };
- "symfony/swiftmailer-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec;
- sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01";
- };
- };
- };
- "symfony/symfony" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-symfony-874d4d659774d7bab90538072c83ed532dd17dc5";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/symfony/zipball/874d4d659774d7bab90538072c83ed532dd17dc5;
- sha256 = "02rsn3sc34jh107n576jfbh666k06y44yr7hw61nir0d864k8api";
- };
- };
- };
- "twig/twig" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "twig-twig-9c24f2cd39dc1906b76879e099970b7e53724601";
- src = fetchurl {
- url = https://api.github.com/repos/twigphp/Twig/zipball/9c24f2cd39dc1906b76879e099970b7e53724601;
- sha256 = "0brfj2lahrrw1322zy6jyd380hjks1ynzzkmq3875a282gzrfkdz";
- };
- };
- };
- };
- devPackages = {
- "sensio/generator-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65;
- sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3";
- };
- };
- };
- "symfony/phpunit-bridge" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-phpunit-bridge-32b06d2b0babf3216e55acfce42249321a304f03";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/32b06d2b0babf3216e55acfce42249321a304f03;
- sha256 = "0vw4q3lvz8gfs0r93ds8yymz8586k0czwa01c7d172rc8x02v0qq";
- };
- };
- };
- };
-}
diff --git a/modules/private/websites/florian/integration.nix b/modules/private/websites/florian/integration.nix
deleted file mode 100644
index 8ac1f46..0000000
--- a/modules/private/websites/florian/integration.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; };
- cfg = config.myServices.websites.florian.integration;
- varDir = "/var/lib/ftp/florian/www.ft.immae.dev";
- env = config.myEnv.websites.florian;
-in {
- options.myServices.websites.florian.integration.enable = lib.mkEnableOption "enable Florian's website integration";
-
- config = lib.mkIf cfg.enable {
- security.acme.certs."ftp".extraDomains."ft.immae.dev" = null;
-
- services.websites.env.integration.modules = adminer.apache.modules;
- services.websites.env.integration.vhostConfs.florian_integration = {
- certName = "integration";
- addToCerts = true;
- hosts = [ "www.ft.immae.dev" ];
- root = varDir;
- extraConfig = [
- (adminer.apache.vhostConf null)
- ''
- ServerAdmin ${env.server_admin}
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/florian/production.nix b/modules/private/websites/florian/production.nix
deleted file mode 100644
index 1c5ffa6..0000000
--- a/modules/private/websites/florian/production.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; };
- cfg = config.myServices.websites.florian.production;
- varDir = "/var/lib/ftp/florian/tellesflorian.com";
- env = config.myEnv.websites.florian;
-in {
- options.myServices.websites.florian.production.enable = lib.mkEnableOption "enable Florian's website production";
-
- config = lib.mkIf cfg.enable {
- security.acme.certs."ftp".extraDomains."tellesflorian.com" = null;
-
- services.websites.env.production.modules = adminer.apache.modules;
- services.websites.env.production.vhostConfs.florian_production = {
- certName = "florian";
- certMainHost = "tellesflorian.com";
- hosts = [ "tellesflorian.com" "www.tellesflorian.com" ];
- root = varDir;
- extraConfig = [
- (adminer.apache.vhostConf null)
- ''
- ServerAdmin ${env.server_admin}
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/immae/chatons/immae-eu.properties b/modules/private/websites/immae/chatons/immae-eu.properties
deleted file mode 100644
index 32b2d47..0000000
--- a/modules/private/websites/immae/chatons/immae-eu.properties
+++ /dev/null
@@ -1,46 +0,0 @@
-# https://framagit.org/chatons/chatonsinfos/-/blob/master/MODELES/organization.properties
-
-# [File]
-file.class = organization
-file.protocol = ChatonsInfos-0.1
-file.datetime = 2021-01-11T22:23:00
-file.generator = Immae avec ses doigts
-
-# [Organisation]
-organization.country.name = France
-organization.country.code = FR
-organization.name = ImmaeEu
-organization.description = ImmaeEu est un CHATONS des Alpes Maritimes
-organization.website = https://www.immae.eu
-organization.logo = https://assets.immae.eu/logo.jpg
-organization.socialnetworks.diaspora = https://diaspora.immae.eu/people/1a185f29cc76cb35
-organization.socialnetworks.facebook = https://www.facebook.com/ismael.bouya
-organization.socialnetworks.mastodon = https://mastodon.immae.eu/@immae
-organization.socialnetworks.peertube = https://peertube.immae.eu/accounts/immae/
-organization.socialnetworks.twitter = https://twitter.com/_immae
-organization.chatrooms.xmpp = ismael@immae.fr
-organization.chatrooms.irc = immae@freenode
-organization.chatrooms.matrix = @immae:matrix.org
-organization.owner.name = Ismaël Bouya
-organization.owner.website = https://www.immae.eu
-organization.owner.logo = https://assets.immae.eu/logo.jpg
-organization.contact.url = https://www.immae.eu/contacts_fr.html
-organization.contact.email = contact@mail.immae.eu
-organization.legal.url = https://www.immae.eu/mentions.html
-organization.guide.technical = https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/
-organization.status.level = ACTIVE
-organization.status.description = En activité
-organization.startdate = 01/01/2019
-
-organization.memberof.chatons.startdate = 01/07/2019
-organization.memberof.chatons.status.level = ACTIVE
-organization.memberof.chatons.status.description = Participe au collectif
-
-# [Subs]
-# Un lien vers un fichier properties complémentaire (type URL, optionnel, ex. https://www.chapril.org/.well-known/chapril.properties).
-subs.etherpad = https://www.immae.eu/.well-known/chatonsinfos/service-etherpad.properties
-
-
-# [Metrics]
-#metrics.http.total.2020 =
-
diff --git a/modules/private/websites/immae/chatons/service-etherpad.properties b/modules/private/websites/immae/chatons/service-etherpad.properties
deleted file mode 100644
index cfcab1d..0000000
--- a/modules/private/websites/immae/chatons/service-etherpad.properties
+++ /dev/null
@@ -1,164 +0,0 @@
-# service.properties
-
-# [File]
-# Classe du fichier (valeur parmi Federation/Organization/Service/Device, obligatoire).
-file.class = service
-
-# Version de l'ontologie utilisée utilisé (type STRING, recommandé).
-file.protocol = ChatonsInfos-0.1
-
-# Date et horaire de génération du fichier (type DATETIME, recommandé).
-file.datetime = 2021-01-04T00:01:00
-
-# Nom du générateur du fichier (type STRING, recommandé). Exemple : Florian avec ses doigts
-file.generator = Immae avec ses doigts
-
-
-# [Service]
-# Nom du service (type STRING, obligatoire). Exemple : Pad Exemple
-service.name = Etherpard
-
-# Description du service (type STRING, recommandé).
-service.description = Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément.
-
-# Lien du site web du service (type URL, recommandé). Exemple : https://pad.exemple.ext
-service.website = https://ether.immae.eu
-
-# Lien du logo du service (type URL, recommandé, ex. https://www.chapril.org/.well-known/statoolinfos/chapril-logo-mini.png.
-service.logo = https://ether.immae.eu/favicon.ico
-
-# Lien de la page web des mentions légales du service (type URL, recommandé). Exemple : https://pad.exemple.ext/cgu.html
-service.legal.url = https://www.immae.eu/mentions.html
-
-# Lien de la documentation web du service (type URL, recommandé).
-service.guide.technical = https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/
-
-# Lien des aides web pour le service (type URL, recommandé).
-service.guide.user =
-
-# Lien de la page de support du service (type URL, recommandé). Exemple : https://exemple.ext/contact.html
-service.contact.url = https://www.immae.eu/contacts_fr.html
-
-# Courriel du support du service (type EMAIL, recommandé). Exemple : contact@exemple.ext
-service.contact.email = contact@mail.immae.eu
-
-# Date d'ouverture du service (type DATE, recommandé). Exemple : 20/03/2020
-service.startdate = 01/01/2019
-
-# Date de fermeture du service (type DATE, optionnel).
-service.enddate =
-
-# Statut du service (un parmi {OK,WARNING,ALERT,ERROR,OVER,VOID}, obligatoire).
-service.status.level = OK
-
-# Description du statut du service (type STRING, optionnel, exemple : mise à jour en cours)
-service.status.description = OK
-
-# Inscriptions requises pour utiliser le service (parmi None;Free;Member;Client, obligatoire).
-service.registration = None
-
-# [Software]
-# Nom du logiciel (type STRING, obligatoire).
-software.name = Etherpad
-
-# Lien du site web du logiciel (type URL, recommandé).
-software.website = https://etherpad.org/
-
-# Lien web vers la licence du logiciel (type URL, obligatoire).
-software.license.url = https://github.com/ether/etherpad-lite/blob/develop/LICENSE
-
-# Nom de la licence du logiciel (type STRING, obligatoire).
-software.license.name = Apache License Version 2.0
-
-# Version du logiciel (type STRING, recommandé).
-software.version = 1.8.3
-
-# Lien web vers les sources du logiciel (type URL, recommandé).
-software.source.url = https://github.com/ether/etherpad-lite
-
-# Liste de modules optionnels installés (type VALUES, optionnel, ex. Nextcloud-Calendar,Nextcloud-Talk).
-software.modules = ep_align,ep_bookmark,ep_colors,ep_comments_page,ep_cursortrace,ep_delete_empty_pads,ep_embedmedia,ep_font_size,ep_headings2,ep_immae_buttons,ep_ldapauth,ep_line_height,ep_markdown,ep_mypads,ep_page_view,ep_previewimages,ep_ruler,ep_scrollto,ep_set_title_on_pad,ep_subscript_and_superscript,ep_timesliderdiff
-
-
-# [Host]
-# Nom de l'hébergeur de la machine qui fait tourner le service, dans le cas d'un auto-hébergement c'est vous ! (type STRING, obligatoire). Exemple : OVH.
-host.name = Hetzner
-
-# Description de l'hébergeur (type STRING, optionnel).
-host.description =
-
-# Type de serveur (un parmi NANO, PHYSICAL, VIRTUAL, SHARED, CLOUD, obligatoire, ex. PHYSICAL).
-# NANO : nano-ordinateur (Raspberry Pi, Olimex…)
-# PHYSICAL : machine physique
-# VIRTUAL : machine virtuelle
-# SHARED : hébergement mutualisé
-# CLOUD : infrastructure multi-serveurs
-host.server.type = PHYSICAL
-
-# Type d'hébergement (un parmi HOME, HOSTEDBAY, HOSTEDSERVER, OUTSOURCED, obligatoire, ex. HOSTEDSERVER).
-# HOME : hébergement à domicile
-# HOSTEDBAY : serveur personnel hébergé dans une baie d'un fournisseur
-# HOSTEDSERVER : serveur d'un fournisseur
-# OUTSOURCED : infrastructure totalement sous-traitée
-host.provider.type = HOSTEDSERVER
-
-# Si vous avez du mal à remplir les champs précédents, ce tableau pourra vous aider :
-# NANO PHYSICAL VIRTUAL SHARED CLOUD
-# HOME pm pm vm shared cloud
-# HOSTEDBAY -- pm vm shared cloud
-# HOSTEDSERVER -- pm vm shared cloud
-# OUTSOURCED -- -- vps shared cloud
-# Légendes : pm : physical machine ; vm : virtual machine ; vps : virtual private server.
-
-# Pays de l'hébergeur (type STRING, recommandé). Exemple : France
-host.country.name = Allemagne
-
-# Code pays de l'hébergeur (type STRING, recommandé). Exemple : FR
-host.country.code = DE
-
-
-
-# [Subs]
-# Un lien vers un fichier properties complémentaire (type URL, optionnel). Exemple : https://
-subs.foo =
-
-# [Metrics]
-# Nom du métrique (type STRING, recommandé).
-metrics.http.total.name = Nombre total de requêtes HTTP
-
-# Description du métrique (type STRING, recommandé).
-metrics.http.total.description = Somme des requêtes HTTP ipv4 et ipv6.
-
-# Métrique à valeur anuelle (type NUMERIC, optionnel).
-metrics.http.total.2020 =
-
-# Métrique à valeur mensuelle (type MONTHS, optionnel).
-metrics.http.total.2020.months=
-
-# Métrique à valeur hebdomadaire (type WEEKS, optionnel).
-metrics.http.total.2020.weeks=
-
-# Métrique à valeur quotidienne (type DAYS, optionnel).
-metrics.http.total.2020.days=
-
-
-# Nom du métrique (type STRING, recommandé).
-metrics.visitors.total.name = Nombre total de visiteurs
-
-# Description du métrique (type STRING, recommandé).
-metrics.visitors.total.description =
-
-# Métrique à valeur anuelle (type NUMERIC, optionnel).
-metrics.visitors.total.2020 =
-
-# Métrique à valeur mensuelle (type MONTHS, optionnel).
-metrics.visitors.total.2020.months=
-
-# Métrique à valeur hebdomadaire (type WEEKS, optionnel).
-metrics.visitors.total.2020.weeks=
-
-# Métrique à valeur quotidienne (type DAYS, optionnel).
-metrics.visitors.total.2020.days=
-
-
-# [Metrics spécifiques au service]
diff --git a/modules/private/websites/immae/eurl/certificates/2021-certificate.crt b/modules/private/websites/immae/eurl/certificates/2021-certificate.crt
deleted file mode 100644
index 671534c..0000000
--- a/modules/private/websites/immae/eurl/certificates/2021-certificate.crt
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDyzCCArOgAwIBAgIUXNW7Lmte+fa5YxI7Gdznl7ZaLPIwDQYJKoZIhvcNAQEL
-BQAwdTELMAkGA1UEBhMCRlIxGDAWBgNVBAgMD0FscGVzLU1hcml0aW1lczEPMA0G
-A1UEBwwGR3Jhc3NlMRUwEwYDVQQKDAxJbW1hZUV1IEVVUkwxJDAiBgkqhkiG9w0B
-CQEWFWNvbnRhY3RAbWFpbC5pbW1hZS5ldTAeFw0yMTAxMTkwMDI5MDlaFw0yMjAx
-MTkwMDI5MDlaMHUxCzAJBgNVBAYTAkZSMRgwFgYDVQQIDA9BbHBlcy1NYXJpdGlt
-ZXMxDzANBgNVBAcMBkdyYXNzZTEVMBMGA1UECgwMSW1tYWVFdSBFVVJMMSQwIgYJ
-KoZIhvcNAQkBFhVjb250YWN0QG1haWwuaW1tYWUuZXUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDeyWKvTu2kuJ2HSgRzZZL6yFNHUXGgcl/q8vlRKFI4
-P0yHwcEwDCaCXquqS09WN99H55aNTjHfnu70dZXogyWHGk4vlaUkGiUoCAYK5tFU
-34fzpZuInhBL8nRY0pRV4H2t02jQMyiYowZXTqR86BRocbXZ4TY5EwD/hlrH6iDc
-pIlC7cVnWV4J5qXX9fXALbpXseD9PF0/y2tP5dM658jBL9KdW1PqlPGudvB44Z+a
-pE8XCXF9PGrVBNN7aPmizOb42scx/2XghX1DYCikiUf8m+FGjidxGlXmj4B6Dukp
-b7RxdkY7p97svH91uMQuUvDW5d93ZiatHNeYuAl8yI39AgMBAAGjUzBRMB0GA1Ud
-DgQWBBSgsFwzEybKyLF/Bkuz7FA5SwfwPTAfBgNVHSMEGDAWgBSgsFwzEybKyLF/
-Bkuz7FA5SwfwPTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDX
-Wij/gDT+7N/pSSVWImiYoe+/KsAJd0TLs39GJkvW0114RXKINYNU8exNY7rKMVCl
-TKePEevSo5CCartNfLXGIr3uqPlR+V3XF6KmyMSiB6k+GukoUtUg2Bp7ESGlpZXi
-wkHYclk0NIzxWyUrzNdflxu3gPU278qFMbUIlbdWNsHtrLbpHypelPQ+IaEbNoWV
-Q+M8Vg6ifsDmhp7TqFXpIoGa6CIxXuknDOidBpeE9kPjVu0kKrjXQULirNl3eEe6
-H1XUQ7lSdt/l3N1cHTj70x2xIi6fdwPQRqhXILrIuST+C0wpPiqPCv1rfcwh0PvU
-mZVZ/+83y3Zuo9lVqkbB
------END CERTIFICATE-----
diff --git a/modules/private/websites/immae/matrix/client b/modules/private/websites/immae/matrix/client
deleted file mode 100644
index 2769de5..0000000
--- a/modules/private/websites/immae/matrix/client
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "m.homeserver": {
- "base_url": "https://immae.ems.host"
- },
- "m.identity_server": {
- "base_url": "https://vector.im"
- }
-}
diff --git a/modules/private/websites/immae/matrix/server b/modules/private/websites/immae/matrix/server
deleted file mode 100644
index 449155a..0000000
--- a/modules/private/websites/immae/matrix/server
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "m.server": "immae.ems.host:443"
-}
diff --git a/modules/private/websites/immae/production.nix b/modules/private/websites/immae/production.nix
deleted file mode 100644
index 8b4998f..0000000
--- a/modules/private/websites/immae/production.nix
+++ /dev/null
@@ -1,137 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.immae.production;
- varDir = "/var/lib/buildbot/outputs/immae/blog";
- coursDir = "/var/lib/buildbot/outputs/immae/cours";
- rechercheDir = "/var/lib/buildbot/outputs/immae/recherche";
- recettesDir = "/var/lib/buildbot/outputs/immae/recettes";
- historyDir = "/var/lib/buildbot/outputs/immae/history";
- docsDir = "/var/lib/buildbot/outputs/immae/docs/";
- env = config.myEnv.websites.immae;
-in {
- options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "www.immae.eu"; } ];
-
- services.websites.env.production.vhostConfs.immae_production = {
- certName = "immae";
- addToCerts = true;
- certMainHost = "www.immae.eu";
- hosts = [ "www.immae.eu" "immae.eu" ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats www.immae.eu
- Header always set Strict-Transport-Security "max-age=31536000"
-
-
- Header always set Referrer-Policy "strict-origin-when-cross-origin"
- RequestHeader set X-Forwarded-Proto "https"
-
- RewriteRule ^(.*)$ https://mastodon.immae.eu%{REQUEST_URI} [QSA,L]
-
-
- RewriteEngine On
- RewriteCond "%{REQUEST_URI}" "!^/.well-known/(webfinger|host-meta)"
- RewriteCond "%{HTTP_HOST}" "!^www\.immae\.eu$" [NC]
- RewriteRule ^(.+)$ https://www.immae.eu$1 [R=302,L]
-
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
-
- Alias /.well-known/chatonsinfos ${./chatons}
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
-
- Alias /.well-known/matrix ${./matrix}
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
- Header always set Access-Control-Allow-Origin "*"
-
-
- Alias /cours ${coursDir}
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
-
- Alias /docs ${docsDir}
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
-
- Alias /eurl ${./eurl}
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
-
- Alias /recherche ${rechercheDir}
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
-
- Alias /recettes ${recettesDir}
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
-
- Alias /history ${historyDir}
-
- DirectoryIndex index.html
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
-
- services.websites.env.production.vhostConfs.immae_fr = {
- certName = "immae";
- addToCerts = true;
- hosts = [ "www.immae.fr" "immae.fr" ];
- root = null;
- extraConfig = [ ''
- RedirectMatch 301 ^/((?!\.well-known.*$).*)$ https://www.immae.eu/chapeaux/
- '' ];
- };
-
- services.websites.env.production.vhostConfs.immae_bouya = {
- certName = "immae";
- addToCerts = true;
- hosts = [ "bouya.org" "www.bouya.org" ];
- root = rechercheDir;
- extraConfig = [ ''
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/immae/release.nix b/modules/private/websites/immae/release.nix
deleted file mode 100644
index d06af87..0000000
--- a/modules/private/websites/immae/release.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.immae.release;
- varDir = "/var/lib/ftp/release.immae.eu";
- env = config.myEnv.websites.release;
-in {
- options.myServices.websites.immae.release.enable = lib.mkEnableOption "enable Release' website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "release.immae.eu"; } ];
-
- services.websites.env.production.vhostConfs.immae_release = {
- certName = "immae";
- addToCerts = true;
- hosts = [ "release.immae.eu" ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats release.immae.eu
-
- Use Apaxy "${varDir}" "title .duplicity-ignore"
-
- Use LDAPConnect
- Options Indexes
- AllowOverride All
- Require all granted
-
-
-
- Use LDAPConnect
- Options Indexes FollowSymlinks
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/immae/temp.nix b/modules/private/websites/immae/temp.nix
deleted file mode 100644
index 19aef1a..0000000
--- a/modules/private/websites/immae/temp.nix
+++ /dev/null
@@ -1,64 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.immae.temp;
- varDir = "/var/lib/immae_temp";
- env = config.myEnv.websites.immae.temp;
-in {
- options.myServices.websites.immae.temp.enable = lib.mkEnableOption "enable Temp' website";
-
- config = lib.mkIf cfg.enable {
- services.websites.env.production.vhostConfs.immae_temp = {
- certName = "immae";
- addToCerts = true;
- hosts = [ "temp.immae.eu" ];
- root = null;
- extraConfig = [ ''
- ProxyVia On
- ProxyRequests Off
- ProxyPreserveHost On
- ProxyPass / unix:///run/surfer/listen.sock|http://temp.immae.eu/
- ProxyPassReverse / unix:///run/surfer/listen.sock|http://temp.immae.eu/
-
- Options FollowSymLinks MultiViews
- AllowOverride None
- Require all granted
-
- '' ];
- };
-
- secrets.keys."webapps/surfer" = {
- permissions = "0400";
- user = "wwwrun";
- group = "wwwrun";
- text = ''
- CLOUDRON_LDAP_URL=ldaps://${env.ldap.host}
- CLOUDRON_LDAP_USERS_BASE_DN=${env.ldap.base}
- TOKENSTORE_FILE=/var/lib/surfer/tokens.json
- CLOUDRON_LDAP_BIND_DN=${env.ldap.dn}
- CLOUDRON_LDAP_BIND_PASSWORD=${env.ldap.password}
- CLOUDRON_LDAP_USERS_BASE_DN=${env.ldap.base}
- CLOUDRON_LDAP_FILTER="${env.ldap.filter}"
- LISTEN=/run/surfer/listen.sock
- '';
- };
-
- systemd.services.surfer = {
- description = "Surfer";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- script = ''
- exec ${pkgs.webapps.surfer}/bin/surfer-server ${varDir}
- '';
- serviceConfig = {
- EnvironmentFile = config.secrets.fullPaths."webapps/surfer";
- User = "wwwrun";
- Group = "wwwrun";
- StateDirectory = "surfer";
- RuntimeDirectory = "surfer";
- Type = "simple";
- };
- };
- };
-}
-
diff --git a/modules/private/websites/isabelle/aten_app/default.nix b/modules/private/websites/isabelle/aten_app/default.nix
deleted file mode 100644
index f967b9a..0000000
--- a/modules/private/websites/isabelle/aten_app/default.nix
+++ /dev/null
@@ -1,61 +0,0 @@
-{ environment ? "prod"
-, varDir ? "/var/lib/aten_${environment}"
-, composerEnv, fetchgit, runCommand, nodejs-10_x, jq, libsass, python, fetchurl, yarn2nix-moretea, yarn, sources }:
-let
- yarn2nix-moretea' = yarn2nix-moretea.override({
- yarn = yarn.override({ nodejs = nodejs-10_x; });
- nodejs = nodejs-10_x;
- });
- packagesource = sources.websites-isabelle-aten;
- packagejson = runCommand "package.json" { buildInputs = [ jq ]; } ''
- cat ${packagesource}/package.json | jq -r '.version = "v1.0.0"|.name="aten"' > $out
- '';
- yarnModules = yarn2nix-moretea'.mkYarnModules rec {
- name = "aten-yarn";
- pname = name;
- version = "v1.0.0";
- packageJSON = packagejson;
- yarnLock = "${packagesource}/yarn.lock";
- yarnNix = ./yarn-packages.nix;
- pkgConfig = {
- node-sass = {
- buildInputs = [ libsass python ];
- postInstall = let
- nodeHeaders = fetchurl {
- url = "https://nodejs.org/download/release/v${nodejs-10_x.version}/node-v${nodejs-10_x.version}-headers.tar.gz";
- sha256 = "15hkcbs328d3rc1s14rmky8lh8d3rr86l8k0bia0ggxzwl23lj9c";
- };
- in
- ''
- node scripts/build.js --tarball=${nodeHeaders}
- '';
- };
- };
- };
- app = composerEnv.buildPackage (
- import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } //
- rec {
- version = packagesource.version;
- pname = "aten";
- name = "${pname}-${version}";
- src = packagesource;
- noDev = (environment == "prod");
- preInstall = ''
- export SYMFONY_ENV="${environment}"
- export APP_ENV="${environment}"
- '';
- postInstall = ''
- ln -sf ${yarnModules}/node_modules .
- yarn run --offline encore production
- rm -rf var/{log,cache}
- ln -sf ${varDir}/{log,cache} var/
- '';
- buildInputs = [ yarnModules yarn2nix-moretea'.yarn ];
- passthru = {
- inherit varDir;
- inherit environment;
- webRoot = "${app}/public";
- };
- }
- );
-in app
diff --git a/modules/private/websites/isabelle/aten_app/php-packages.nix b/modules/private/websites/isabelle/aten_app/php-packages.nix
deleted file mode 100644
index 3647938..0000000
--- a/modules/private/websites/isabelle/aten_app/php-packages.nix
+++ /dev/null
@@ -1,740 +0,0 @@
-# Generated with composer2nix and adapted to return only the list of
-# packages
-{ composerEnv, fetchurl, fetchgit ? null }:
-{
- packages = {
- "behat/transliterator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c";
- src = fetchurl {
- url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c;
- sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0";
- };
- };
- };
- "doctrine/annotations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-annotations-c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5;
- sha256 = "0b80xpqd3j99xgm0c41kbgy0k6knrfnd29223c93295sb12112g7";
- };
- };
- };
- "doctrine/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-cache-d768d58baee9a4862ca783840eca1b9add7a7f57";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57;
- sha256 = "1kljhw4gqp12iz88h6ymsrlfir2fis7icn6dffyizfc1csyb4s2i";
- };
- };
- };
- "doctrine/collections" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-collections-a01ee38fcd999f34d9bfbcee59dbda5105449cbf";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf;
- sha256 = "0d36zc21ka0pdac9xpkxsgf5zzw9gp0m9lk3r3xs5y70j0lkkkis";
- };
- };
- };
- "doctrine/common" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-common-30e33f60f64deec87df728c02b107f82cdafad9d";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/common/zipball/30e33f60f64deec87df728c02b107f82cdafad9d;
- sha256 = "0s4vv14ibyx62a9aj3wn5cs2bbxd72fajmfmi8qb5l11gx0375na";
- };
- };
- };
- "doctrine/dbal" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-dbal-22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9;
- sha256 = "0kbahs699jd8pxf512dgg7arv49dc7qzi3mx8snxqm4h15n5brnj";
- };
- };
- };
- "doctrine/doctrine-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-bundle-82d2c63cd09acbde2332f55d9aa7b28aefe4983d";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/82d2c63cd09acbde2332f55d9aa7b28aefe4983d;
- sha256 = "0gzrigv360rp50yxpwidbkf8vlagym0w1if010yz5xcfrz37cpn3";
- };
- };
- };
- "doctrine/doctrine-cache-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-cache-bundle-5514c90d9fb595e1095e6d66ebb98ce9ef049927";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927;
- sha256 = "04njrfhw4fc2ifacd9h0wd9i14l7ycv3hanbqrw5ilsai02j6asa";
- };
- };
- };
- "doctrine/doctrine-migrations-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-migrations-bundle-49fa399181db4bf4f9f725126bd1cb65c4398dce";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce;
- sha256 = "1a73xjhjrjlvkh8d253kfc2rbxd2h4hwafhv5078dy7rg6x9blyn";
- };
- };
- };
- "doctrine/event-manager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-event-manager-a520bc093a0170feeb6b14e9d83f3a14452e64b3";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3;
- sha256 = "165cxvw4idqj01l63nya2whpdb3fz6ld54rx198b71bzwfrydl88";
- };
- };
- };
- "doctrine/inflector" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-inflector-5527a48b7313d15261292c149e55e26eae771b0a";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a;
- sha256 = "0ng6vlwjr8h6hqwa32ynykz1mhlfsff5hirjidlk086ab6njppa5";
- };
- };
- };
- "doctrine/instantiator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-instantiator-185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda;
- sha256 = "1mah9a6mb30qad1zryzjain2dxw29d8h4bjkbcs3srpm3p891msy";
- };
- };
- };
- "doctrine/lexer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c;
- sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74";
- };
- };
- };
- "doctrine/migrations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-migrations-215438c0eef3e5f9b7da7d09c6b90756071b43e6";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6;
- sha256 = "0k6sgw65vji9rgib10mq2m634m41a67inspkrcw4qixig2lnb3ld";
- };
- };
- };
- "doctrine/orm" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-orm-434820973cadf2da2d66e7184be370084cc32ca8";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8;
- sha256 = "114fyq8kaf5qzfkp8sdygqflf3z94va1cs5c3scycfpg9cmi4gls";
- };
- };
- };
- "doctrine/persistence" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-persistence-c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/persistence/zipball/c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38;
- sha256 = "0xdm5n38rjas1mlyxc15sg1as5h7y012mdb0j9lr6cvphgnaxxv7";
- };
- };
- };
- "doctrine/reflection" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-reflection-02538d3f95e88eb397a5f86274deb2c6175c2ab6";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6;
- sha256 = "12n9zik4lxb9lx1jf0nbvg9vl9nv958a7z1yjx48scfxd1d1sxjy";
- };
- };
- };
- "gedmo/doctrine-extensions" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "gedmo-doctrine-extensions-87c78ff9fd4b90460386f753d95622f6fbbfcb27";
- src = fetchurl {
- url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/87c78ff9fd4b90460386f753d95622f6fbbfcb27;
- sha256 = "1i33xy9s18rncc1fllwi2qi7hrxj8g762fvgl9np7xndxa7kclyb";
- };
- };
- };
- "giggsey/libphonenumber-for-php" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "giggsey-libphonenumber-for-php-a71f260c2efce10ded8af030a20fa13edfb0e9be";
- src = fetchurl {
- url = https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/a71f260c2efce10ded8af030a20fa13edfb0e9be;
- sha256 = "15id03c1msyhri7j4i63r535g3g56n3x99i8301as63w7m1ybfj5";
- };
- };
- };
- "giggsey/locale" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "giggsey-locale-da6845720b5d104d319d7e84576f54e44dd9e4f5";
- src = fetchurl {
- url = https://api.github.com/repos/giggsey/Locale/zipball/da6845720b5d104d319d7e84576f54e44dd9e4f5;
- sha256 = "0gc8im06h5l794a0drd74s3inps22jr1zr5wnw0b89m06d4nw42j";
- };
- };
- };
- "jdorn/sql-formatter" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc";
- src = fetchurl {
- url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc;
- sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi";
- };
- };
- };
- "ocramius/package-versions" = {
- targetDir = "";
- needsModifyRights = true;
- src = composerEnv.buildZipPackage {
- name = "ocramius-package-versions-4489d5002c49d55576fa0ba786f42dbb009be46f";
- src = fetchurl {
- url = https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f;
- sha256 = "039c404g9597x45xh04bnn8kmcyknkbnr57yb9s7vf29vfrg4881";
- };
- };
- };
- "ocramius/proxy-manager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "ocramius-proxy-manager-14b137b06b0f911944132df9d51e445a35920ab1";
- src = fetchurl {
- url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/14b137b06b0f911944132df9d51e445a35920ab1;
- sha256 = "10y5msgh2jdlw4w075fasv40yq01szjy15m3f0wgc89hlfmqz0sn";
- };
- };
- };
- "opensoft/doctrine-postgres-types" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "opensoft-doctrine-postgres-types-7e69bdfeb2ae61c2f1e90872370cdf0135fb3006";
- src = fetchurl {
- url = https://api.github.com/repos/opensoft/doctrine-postgres-types/zipball/7e69bdfeb2ae61c2f1e90872370cdf0135fb3006;
- sha256 = "1v9rjq82dxnpnb6bir6irkj54324a02qlybayvq2gf2807241bjj";
- };
- };
- };
- "presta/sitemap-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "presta-sitemap-bundle-16a2c0eae7320e3647013e48026a6a6bd14f75df";
- src = fetchurl {
- url = https://api.github.com/repos/prestaconcept/PrestaSitemapBundle/zipball/16a2c0eae7320e3647013e48026a6a6bd14f75df;
- sha256 = "1hqh144awazafa2vpv091h9pyqrppbalcvzf9c1n6h387jwwj5l8";
- };
- };
- };
- "psr/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8;
- sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz";
- };
- };
- };
- "psr/container" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f;
- sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j";
- };
- };
- };
- "psr/log" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-log-6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd;
- sha256 = "1i351p3gd1pgjcjxv7mwwkiw79f1xiqr38irq22156h05zlcx80d";
- };
- };
- };
- "psr/simple-cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b;
- sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw";
- };
- };
- };
- "sensio/framework-extra-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-framework-extra-bundle-1fdf591c4b388e62dbb2579de89c1560b33f865d";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/1fdf591c4b388e62dbb2579de89c1560b33f865d;
- sha256 = "0hhw3lsvgm78rqphgmdrg2inc9997lwx0290x71hsixk08khnlb1";
- };
- };
- };
- "symfony/asset" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-asset-fb06338fd3762f8615b51a58e5e9299ccca03876";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/asset/zipball/fb06338fd3762f8615b51a58e5e9299ccca03876;
- sha256 = "19fbnz2h4z5nxzcy8n3bfbcjwgncabwdlxh70qfkr7bswpsxr6p3";
- };
- };
- };
- "symfony/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-cache-5c4b50d6ba4f1c8955c3454444c1e3cfddaaad41";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/cache/zipball/5c4b50d6ba4f1c8955c3454444c1e3cfddaaad41;
- sha256 = "1wn2rd3n5nj300vsygh60vbjh2k9lh7s9c3ayl614hahrfcfb29s";
- };
- };
- };
- "symfony/config" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-config-005d9a083d03f588677d15391a716b1ac9b887c0";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/config/zipball/005d9a083d03f588677d15391a716b1ac9b887c0;
- sha256 = "1h20qhkzsl5xwzs3rg1yyaq5yn8rg92krfzmpmfgv7d3jp1v03as";
- };
- };
- };
- "symfony/console" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-console-4dff24e5d01e713818805c1862d2e3f901ee7dd0";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/console/zipball/4dff24e5d01e713818805c1862d2e3f901ee7dd0;
- sha256 = "016l3hxcbvyxz3kkkynk12gi8949hl3x09dwsh0x5wqikgnp64c2";
- };
- };
- };
- "symfony/contracts" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-contracts-1aa7ab2429c3d594dd70689604b5cf7421254cdf";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf;
- sha256 = "0jhav49lngmrjg4r5kdpmc7lhmasn2fzkmbvhw62l4i1vnm5r5bm";
- };
- };
- };
- "symfony/debug" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-debug-e0a2b92ee0b5b934f973d90c2f58e18af109d276";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/debug/zipball/e0a2b92ee0b5b934f973d90c2f58e18af109d276;
- sha256 = "0yzyaprsrmbc93gzwr1wdjx05kin7b4hqy5w74zkcxyab09pan7f";
- };
- };
- };
- "symfony/dependency-injection" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-dependency-injection-e4adc57a48d3fa7f394edfffa9e954086d7740e5";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/dependency-injection/zipball/e4adc57a48d3fa7f394edfffa9e954086d7740e5;
- sha256 = "0g8ssf7qm0jf0anvflp033xwdim9z4g73k3kz1vs3smw4pffl6nv";
- };
- };
- };
- "symfony/doctrine-bridge" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-doctrine-bridge-3466c911438e176c20e1943c529131889432d12f";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/doctrine-bridge/zipball/3466c911438e176c20e1943c529131889432d12f;
- sha256 = "0qq644z7l9j9fyydlj68p9f43a9i20rnmxy8pkq5sn4r0yn06bb8";
- };
- };
- };
- "symfony/event-dispatcher" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-event-dispatcher-921f49c3158a276d27c0d770a5a347a3b718b328";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/event-dispatcher/zipball/921f49c3158a276d27c0d770a5a347a3b718b328;
- sha256 = "05i8syqbzhh11cf2i9d64s8b5x41mfsribfa62rvc0mhbqk7ifzf";
- };
- };
- };
- "symfony/filesystem" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-filesystem-2f4c8b999b3b7cadb2a69390b01af70886753710";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/filesystem/zipball/2f4c8b999b3b7cadb2a69390b01af70886753710;
- sha256 = "1gi14q8gf250a3rzmr6arb08ljpzpfg868vm0z21fgmf0zh0dqr6";
- };
- };
- };
- "symfony/finder" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-finder-e53d477d7b5c4982d0e1bfd2298dbee63d01441d";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/finder/zipball/e53d477d7b5c4982d0e1bfd2298dbee63d01441d;
- sha256 = "1mpxwgvfqzng36xbdvda6nk1zidyr9dgswccmr4z15k0i9gi0qsj";
- };
- };
- };
- "symfony/flex" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-flex-955774ecf07b10230bb5b44e150ba078b45f68fa";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/flex/zipball/955774ecf07b10230bb5b44e150ba078b45f68fa;
- sha256 = "069v1s810mq5kqvx68x87lmlz0h9b2kgla1znnibnbh6j6k4qg6d";
- };
- };
- };
- "symfony/form" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-form-5ab767b7732154ca6f45c92e30e081178edf30ad";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/form/zipball/5ab767b7732154ca6f45c92e30e081178edf30ad;
- sha256 = "1g65a7hl1kk6rpa6q52fyzy6vkjafr3233hi2qiggyp0qys20kcc";
- };
- };
- };
- "symfony/framework-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-framework-bundle-eb32d67140510f04fe9cc5fb9ad38fda09591db1";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/framework-bundle/zipball/eb32d67140510f04fe9cc5fb9ad38fda09591db1;
- sha256 = "06dpqppwyngq1frww0q0zjs0gj8na0fi67czlhqf2x2lizgz6wjd";
- };
- };
- };
- "symfony/http-foundation" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-http-foundation-1b31f3017fadd8cb05cf2c8aebdbf3b12a943851";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/http-foundation/zipball/1b31f3017fadd8cb05cf2c8aebdbf3b12a943851;
- sha256 = "0s6mx79gl6sp39bk8213xcdzx4ld5xim38s8lckm7wqnkvx94mfl";
- };
- };
- };
- "symfony/http-kernel" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-http-kernel-b39ceffc0388232c309cbde3a7c3685f2ec0a624";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/http-kernel/zipball/b39ceffc0388232c309cbde3a7c3685f2ec0a624;
- sha256 = "17rb1hl9r8rlqw1cv9qx2ckvz81g2ylppirq035mya1a848y5ym5";
- };
- };
- };
- "symfony/inflector" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-inflector-f9a637c0359f74404d44cf0da0a3ce53bae0787e";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/inflector/zipball/f9a637c0359f74404d44cf0da0a3ce53bae0787e;
- sha256 = "1sp1pk716biyplqpakcpq71ik2h2m1bvsz9cfj9zd63y2723xna3";
- };
- };
- };
- "symfony/intl" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-intl-748a1c54903344385f88fef75da293915b16a207";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/intl/zipball/748a1c54903344385f88fef75da293915b16a207;
- sha256 = "1vwa2n7fglxs8rv1yrbxn6vgizg73asimg794igk27i90xdybfmc";
- };
- };
- };
- "symfony/lts" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-lts-c1affae45b78aee036effa1759237e7fa96d4af2";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/lts/zipball/c1affae45b78aee036effa1759237e7fa96d4af2;
- sha256 = "0vk9pn4xl7ascvllak0gschdd1w2mxma3ng04j3r1n13zccxc33s";
- };
- };
- };
- "symfony/options-resolver" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-options-resolver-a9c38e8a3da2c03b3e71fdffa6efb0bda51390ba";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/options-resolver/zipball/a9c38e8a3da2c03b3e71fdffa6efb0bda51390ba;
- sha256 = "1fjjlp09mwkjcxg98bihqlq4miq24k13691051f5p39lcy03zmb3";
- };
- };
- };
- "symfony/orm-pack" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-orm-pack-1b58f752cd917a08c9c8df020781d9c46a2275b1";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/orm-pack/zipball/1b58f752cd917a08c9c8df020781d9c46a2275b1;
- sha256 = "1sk8jchaw29lmpq76yb24mc1csmifnkvbjdrgjdgqs6x5i39plli";
- };
- };
- };
- "symfony/polyfill-intl-icu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-intl-icu-f22a90256d577c7ef7efad8df1f0201663d57644";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f22a90256d577c7ef7efad8df1f0201663d57644;
- sha256 = "0x7h8l248l1gc07xmvfixq6p80ifdaa29qympfq3jzfb79k69slq";
- };
- };
- };
- "symfony/polyfill-mbstring" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-mbstring-c79c051f5b3a46be09205c73b80b346e4153e494";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494;
- sha256 = "18v2777cky55ah6xi4dh383mp4iddwzmnvx81qd86y1kgfykwhpi";
- };
- };
- };
- "symfony/property-access" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-property-access-b6df4e1849f389468edb36e2e59877d4a8170723";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/property-access/zipball/b6df4e1849f389468edb36e2e59877d4a8170723;
- sha256 = "16pbnv3x56gp5wxakmbphf3d4igkjyr3v693n3cjm62h72z4dxf3";
- };
- };
- };
- "symfony/routing" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-routing-649460207e77da6c545326c7f53618d23ad2c866";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/routing/zipball/649460207e77da6c545326c7f53618d23ad2c866;
- sha256 = "1qjkgghs0kp4lk4711d3gx26vvilrrrjbbz02navzfqy4xjrf0sw";
- };
- };
- };
- "symfony/translation" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-translation-c0e2191e9bed845946ab3d99767513b56ca7dcd6";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/translation/zipball/c0e2191e9bed845946ab3d99767513b56ca7dcd6;
- sha256 = "0gzq7f2izsiam9blha85bzvg7x6zc4f3x3bkwhzma6x6ipjfkla2";
- };
- };
- };
- "symfony/twig-bridge" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-twig-bridge-2e928d6c8244e7f3b32bcfac5814095a83179e60";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/twig-bridge/zipball/2e928d6c8244e7f3b32bcfac5814095a83179e60;
- sha256 = "1f902j8b0lyqjss9r2mf7j63apv5z8ki57vmcdcw5jlqagbmw1y1";
- };
- };
- };
- "symfony/twig-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-twig-bundle-024820cbb4aeffc4843c4170b69c057fb4840fb3";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/twig-bundle/zipball/024820cbb4aeffc4843c4170b69c057fb4840fb3;
- sha256 = "1qqfpxw228lc024whpr4j6aa6k9ly290nxz9c9ds826lllg2l1zh";
- };
- };
- };
- "symfony/validator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-validator-cd35bb14a0e81bd99835e36cac4db1e72ad1939b";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/validator/zipball/cd35bb14a0e81bd99835e36cac4db1e72ad1939b;
- sha256 = "1809yz483mv5mmrw14v3b371dmjab7i455gxkrqm0z8n0wjdn6i3";
- };
- };
- };
- "symfony/var-exporter" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-var-exporter-a39222e357362424b61dcde50e2f7b5a7d3306db";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/var-exporter/zipball/a39222e357362424b61dcde50e2f7b5a7d3306db;
- sha256 = "1ys2sc3ivgfxq7kj8cydxqh5179d3niqxsy10lgg18c5a6bsj41j";
- };
- };
- };
- "symfony/webpack-encore-pack" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-webpack-encore-pack-8d7f51379d7ae17aea7cf501d910a11896895ac4";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/webpack-encore-pack/zipball/8d7f51379d7ae17aea7cf501d910a11896895ac4;
- sha256 = "0k6xavcyihx45dsrm1r2r1lbn7vryy463akz66w4gycx5dcqrw0j";
- };
- };
- };
- "symfony/yaml" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-yaml-c41175c801e3edfda90f32e292619d10c27103d7";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/yaml/zipball/c41175c801e3edfda90f32e292619d10c27103d7;
- sha256 = "0bh9365mmvzhdk1m0b1xarlg0swx9pv916m7xifcmdrxn67w552p";
- };
- };
- };
- "twig/twig" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "twig-twig-a11dd39f5b6589e14f0ff3b36675d06047c589b1";
- src = fetchurl {
- url = https://api.github.com/repos/twigphp/Twig/zipball/a11dd39f5b6589e14f0ff3b36675d06047c589b1;
- sha256 = "0rnwam9379gj5m4ik0fh6c81dbr7kwj2b3x1gnmpf6awa5fm261n";
- };
- };
- };
- "zendframework/zend-code" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-code-c21db169075c6ec4b342149f446e7b7b724f95eb";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb;
- sha256 = "031mfsahjkl63348020wq05273kvszx0dv2766zmzncnd6fcggw1";
- };
- };
- };
- "zendframework/zend-eventmanager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd;
- sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n";
- };
- };
- };
- };
- devPackages = {
- "nikic/php-parser" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "nikic-php-parser-8aae5b59b83bb4d0dbf07b0a835f2680a658f610";
- src = fetchurl {
- url = https://api.github.com/repos/nikic/PHP-Parser/zipball/8aae5b59b83bb4d0dbf07b0a835f2680a658f610;
- sha256 = "103ix4bsvrwyc4wxh9cqd38xffn25kq3phnpgk8b3z7dqvvr2pss";
- };
- };
- };
- "symfony/dotenv" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-dotenv-97f135ab40f969cbeae27d482ff63acbc33dbe2a";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/dotenv/zipball/97f135ab40f969cbeae27d482ff63acbc33dbe2a;
- sha256 = "1jwpxb4w0mi5p89k51l1g84hnnj9s8kjl9jsx3xj39hhc3dy44pc";
- };
- };
- };
- "symfony/maker-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-maker-bundle-24b19cccad0c658eca516b35b08668d123fabf92";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/maker-bundle/zipball/24b19cccad0c658eca516b35b08668d123fabf92;
- sha256 = "1wm17jl3gk0m5ma7nz40y7ryxgm0qncrxcrqdqg5x6afwla85grp";
- };
- };
- };
- "symfony/polyfill-php72" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php72-9050816e2ca34a8e916c3a0ae8b9c2fccf68b631";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631;
- sha256 = "1smd08fw64mf89s9ma099ayfjlz26wrix9hfr6kh5w4d0rzrhmlw";
- };
- };
- };
- "symfony/profiler-pack" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-profiler-pack-99c4370632c2a59bb0444852f92140074ef02209";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209;
- sha256 = "12xisnrqq6q5l0v8bric0p23bsaxh50x43fq7wn2adnsz24nv9pi";
- };
- };
- };
- "symfony/stopwatch" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-stopwatch-ec076716412274e51f8a7ea675d9515e5c311123";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/stopwatch/zipball/ec076716412274e51f8a7ea675d9515e5c311123;
- sha256 = "0fzh2bh7lm8f222hk5ihfkpi697babfrz1r0dghlws17hfbgzgax";
- };
- };
- };
- "symfony/var-dumper" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-var-dumper-db61258540350725f4beb6b84006e32398acd120";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/var-dumper/zipball/db61258540350725f4beb6b84006e32398acd120;
- sha256 = "0pw3hf4mcc1q9miswrjbgr32x0a2dfjvpi16pjzw173xmf79i4iz";
- };
- };
- };
- "symfony/web-profiler-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-web-profiler-bundle-198cb0a6b85346bbab5e1bc74a0eb175b9fa2d08";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/web-profiler-bundle/zipball/198cb0a6b85346bbab5e1bc74a0eb175b9fa2d08;
- sha256 = "0r4r3zf22860mdx8b2l72ghz8liyi3l39cc1934b2lkh2kghlsi6";
- };
- };
- };
- };
-}
diff --git a/modules/private/websites/isabelle/aten_app/yarn-packages.nix b/modules/private/websites/isabelle/aten_app/yarn-packages.nix
deleted file mode 100644
index c16d9dc..0000000
--- a/modules/private/websites/isabelle/aten_app/yarn-packages.nix
+++ /dev/null
@@ -1,7871 +0,0 @@
-{fetchurl, linkFarm}: rec {
- offline_cache = linkFarm "offline" packages;
- packages = [
-
- {
- name = "_symfony_webpack_encore___webpack_encore_0.19.0.tgz";
- path = fetchurl {
- name = "_symfony_webpack_encore___webpack_encore_0.19.0.tgz";
- url = "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.19.0.tgz";
- sha1 = "f0725dbbede5ff9d9fdbd7a07f84accafc83ca14";
- };
- }
-
- {
- name = "_types_node___node_10.5.3.tgz";
- path = fetchurl {
- name = "_types_node___node_10.5.3.tgz";
- url = "https://registry.yarnpkg.com/@types/node/-/node-10.5.3.tgz";
- sha1 = "5bcfaf088ad17894232012877669634c06b20cc5";
- };
- }
-
- {
- name = "_types_tapable___tapable_0.2.5.tgz";
- path = fetchurl {
- name = "_types_tapable___tapable_0.2.5.tgz";
- url = "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz";
- sha1 = "2443fc12da514c81346b1a665675559cee21fa75";
- };
- }
-
- {
- name = "_types_uglify_js___uglify_js_3.0.3.tgz";
- path = fetchurl {
- name = "_types_uglify_js___uglify_js_3.0.3.tgz";
- url = "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.3.tgz";
- sha1 = "801a5ca1dc642861f47c46d14b700ed2d610840b";
- };
- }
-
- {
- name = "_types_webpack___webpack_3.8.14.tgz";
- path = fetchurl {
- name = "_types_webpack___webpack_3.8.14.tgz";
- url = "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.14.tgz";
- sha1 = "e2bfdf7f604b3f7dc776eaa17446d7f7538f3de7";
- };
- }
-
- {
- name = "abbrev___abbrev_1.1.1.tgz";
- path = fetchurl {
- name = "abbrev___abbrev_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz";
- sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8";
- };
- }
-
- {
- name = "accepts___accepts_1.3.5.tgz";
- path = fetchurl {
- name = "accepts___accepts_1.3.5.tgz";
- url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz";
- sha1 = "eb777df6011723a3b14e8a72c0805c8e86746bd2";
- };
- }
-
- {
- name = "acorn_dynamic_import___acorn_dynamic_import_2.0.2.tgz";
- path = fetchurl {
- name = "acorn_dynamic_import___acorn_dynamic_import_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz";
- sha1 = "c752bd210bef679501b6c6cb7fc84f8f47158cc4";
- };
- }
-
- {
- name = "acorn___acorn_4.0.13.tgz";
- path = fetchurl {
- name = "acorn___acorn_4.0.13.tgz";
- url = "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz";
- sha1 = "105495ae5361d697bd195c825192e1ad7f253787";
- };
- }
-
- {
- name = "acorn___acorn_5.7.1.tgz";
- path = fetchurl {
- name = "acorn___acorn_5.7.1.tgz";
- url = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz";
- sha1 = "f095829297706a7c9776958c0afc8930a9b9d9d8";
- };
- }
-
- {
- name = "adjust_sourcemap_loader___adjust_sourcemap_loader_1.2.0.tgz";
- path = fetchurl {
- name = "adjust_sourcemap_loader___adjust_sourcemap_loader_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz";
- sha1 = "e33fde95e50db9f2a802e3647e311d2fc5000c69";
- };
- }
-
- {
- name = "ajv_keywords___ajv_keywords_3.2.0.tgz";
- path = fetchurl {
- name = "ajv_keywords___ajv_keywords_3.2.0.tgz";
- url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz";
- sha1 = "e86b819c602cf8821ad637413698f1dec021847a";
- };
- }
-
- {
- name = "ajv___ajv_4.11.8.tgz";
- path = fetchurl {
- name = "ajv___ajv_4.11.8.tgz";
- url = "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz";
- sha1 = "82ffb02b29e662ae53bdc20af15947706739c536";
- };
- }
-
- {
- name = "ajv___ajv_5.5.2.tgz";
- path = fetchurl {
- name = "ajv___ajv_5.5.2.tgz";
- url = "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz";
- sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965";
- };
- }
-
- {
- name = "ajv___ajv_6.5.2.tgz";
- path = fetchurl {
- name = "ajv___ajv_6.5.2.tgz";
- url = "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz";
- sha1 = "678495f9b82f7cca6be248dd92f59bff5e1f4360";
- };
- }
-
- {
- name = "align_text___align_text_0.1.4.tgz";
- path = fetchurl {
- name = "align_text___align_text_0.1.4.tgz";
- url = "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz";
- sha1 = "0cd90a561093f35d0a99256c22b7069433fad117";
- };
- }
-
- {
- name = "alphanum_sort___alphanum_sort_1.0.2.tgz";
- path = fetchurl {
- name = "alphanum_sort___alphanum_sort_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz";
- sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3";
- };
- }
-
- {
- name = "amdefine___amdefine_1.0.1.tgz";
- path = fetchurl {
- name = "amdefine___amdefine_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz";
- sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5";
- };
- }
-
- {
- name = "ansi_html___ansi_html_0.0.7.tgz";
- path = fetchurl {
- name = "ansi_html___ansi_html_0.0.7.tgz";
- url = "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz";
- sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e";
- };
- }
-
- {
- name = "ansi_regex___ansi_regex_2.1.1.tgz";
- path = fetchurl {
- name = "ansi_regex___ansi_regex_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz";
- sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
- };
- }
-
- {
- name = "ansi_regex___ansi_regex_3.0.0.tgz";
- path = fetchurl {
- name = "ansi_regex___ansi_regex_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz";
- sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
- };
- }
-
- {
- name = "ansi_styles___ansi_styles_2.2.1.tgz";
- path = fetchurl {
- name = "ansi_styles___ansi_styles_2.2.1.tgz";
- url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz";
- sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
- };
- }
-
- {
- name = "ansi_styles___ansi_styles_3.2.1.tgz";
- path = fetchurl {
- name = "ansi_styles___ansi_styles_3.2.1.tgz";
- url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz";
- sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d";
- };
- }
-
- {
- name = "anymatch___anymatch_2.0.0.tgz";
- path = fetchurl {
- name = "anymatch___anymatch_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz";
- sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb";
- };
- }
-
- {
- name = "aproba___aproba_1.2.0.tgz";
- path = fetchurl {
- name = "aproba___aproba_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz";
- sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a";
- };
- }
-
- {
- name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz";
- path = fetchurl {
- name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz";
- url = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
- sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21";
- };
- }
-
- {
- name = "argparse___argparse_1.0.10.tgz";
- path = fetchurl {
- name = "argparse___argparse_1.0.10.tgz";
- url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz";
- sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911";
- };
- }
-
- {
- name = "arr_diff___arr_diff_2.0.0.tgz";
- path = fetchurl {
- name = "arr_diff___arr_diff_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz";
- sha1 = "8f3b827f955a8bd669697e4a4256ac3ceae356cf";
- };
- }
-
- {
- name = "arr_diff___arr_diff_4.0.0.tgz";
- path = fetchurl {
- name = "arr_diff___arr_diff_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz";
- sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
- };
- }
-
- {
- name = "arr_flatten___arr_flatten_1.1.0.tgz";
- path = fetchurl {
- name = "arr_flatten___arr_flatten_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz";
- sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1";
- };
- }
-
- {
- name = "arr_union___arr_union_3.1.0.tgz";
- path = fetchurl {
- name = "arr_union___arr_union_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz";
- sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
- };
- }
-
- {
- name = "array_find_index___array_find_index_1.0.2.tgz";
- path = fetchurl {
- name = "array_find_index___array_find_index_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz";
- sha1 = "df010aa1287e164bbda6f9723b0a96a1ec4187a1";
- };
- }
-
- {
- name = "array_flatten___array_flatten_1.1.1.tgz";
- path = fetchurl {
- name = "array_flatten___array_flatten_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz";
- sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2";
- };
- }
-
- {
- name = "array_flatten___array_flatten_2.1.1.tgz";
- path = fetchurl {
- name = "array_flatten___array_flatten_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz";
- sha1 = "426bb9da84090c1838d812c8150af20a8331e296";
- };
- }
-
- {
- name = "array_includes___array_includes_3.0.3.tgz";
- path = fetchurl {
- name = "array_includes___array_includes_3.0.3.tgz";
- url = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz";
- sha1 = "184b48f62d92d7452bb31b323165c7f8bd02266d";
- };
- }
-
- {
- name = "array_union___array_union_1.0.2.tgz";
- path = fetchurl {
- name = "array_union___array_union_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz";
- sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39";
- };
- }
-
- {
- name = "array_uniq___array_uniq_1.0.3.tgz";
- path = fetchurl {
- name = "array_uniq___array_uniq_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz";
- sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6";
- };
- }
-
- {
- name = "array_unique___array_unique_0.2.1.tgz";
- path = fetchurl {
- name = "array_unique___array_unique_0.2.1.tgz";
- url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz";
- sha1 = "a1d97ccafcbc2625cc70fadceb36a50c58b01a53";
- };
- }
-
- {
- name = "array_unique___array_unique_0.3.2.tgz";
- path = fetchurl {
- name = "array_unique___array_unique_0.3.2.tgz";
- url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz";
- sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
- };
- }
-
- {
- name = "asn1.js___asn1.js_4.10.1.tgz";
- path = fetchurl {
- name = "asn1.js___asn1.js_4.10.1.tgz";
- url = "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz";
- sha1 = "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0";
- };
- }
-
- {
- name = "asn1___asn1_0.2.3.tgz";
- path = fetchurl {
- name = "asn1___asn1_0.2.3.tgz";
- url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz";
- sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
- };
- }
-
- {
- name = "assert_plus___assert_plus_1.0.0.tgz";
- path = fetchurl {
- name = "assert_plus___assert_plus_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz";
- sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
- };
- }
-
- {
- name = "assert_plus___assert_plus_0.2.0.tgz";
- path = fetchurl {
- name = "assert_plus___assert_plus_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz";
- sha1 = "d74e1b87e7affc0db8aadb7021f3fe48101ab234";
- };
- }
-
- {
- name = "assert___assert_1.4.1.tgz";
- path = fetchurl {
- name = "assert___assert_1.4.1.tgz";
- url = "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz";
- sha1 = "99912d591836b5a6f5b345c0f07eefc08fc65d91";
- };
- }
-
- {
- name = "assign_symbols___assign_symbols_1.0.0.tgz";
- path = fetchurl {
- name = "assign_symbols___assign_symbols_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz";
- sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
- };
- }
-
- {
- name = "async_each___async_each_1.0.1.tgz";
- path = fetchurl {
- name = "async_each___async_each_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz";
- sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d";
- };
- }
-
- {
- name = "async_foreach___async_foreach_0.1.3.tgz";
- path = fetchurl {
- name = "async_foreach___async_foreach_0.1.3.tgz";
- url = "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz";
- sha1 = "36121f845c0578172de419a97dbeb1d16ec34542";
- };
- }
-
- {
- name = "async___async_1.5.2.tgz";
- path = fetchurl {
- name = "async___async_1.5.2.tgz";
- url = "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz";
- sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a";
- };
- }
-
- {
- name = "async___async_2.6.1.tgz";
- path = fetchurl {
- name = "async___async_2.6.1.tgz";
- url = "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz";
- sha1 = "b245a23ca71930044ec53fa46aa00a3e87c6a610";
- };
- }
-
- {
- name = "asynckit___asynckit_0.4.0.tgz";
- path = fetchurl {
- name = "asynckit___asynckit_0.4.0.tgz";
- url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz";
- sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
- };
- }
-
- {
- name = "atob___atob_2.1.1.tgz";
- path = fetchurl {
- name = "atob___atob_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz";
- sha1 = "ae2d5a729477f289d60dd7f96a6314a22dd6c22a";
- };
- }
-
- {
- name = "autoprefixer___autoprefixer_6.7.7.tgz";
- path = fetchurl {
- name = "autoprefixer___autoprefixer_6.7.7.tgz";
- url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz";
- sha1 = "1dbd1c835658e35ce3f9984099db00585c782014";
- };
- }
-
- {
- name = "aws_sign2___aws_sign2_0.6.0.tgz";
- path = fetchurl {
- name = "aws_sign2___aws_sign2_0.6.0.tgz";
- url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz";
- sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f";
- };
- }
-
- {
- name = "aws_sign2___aws_sign2_0.7.0.tgz";
- path = fetchurl {
- name = "aws_sign2___aws_sign2_0.7.0.tgz";
- url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz";
- sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
- };
- }
-
- {
- name = "aws4___aws4_1.7.0.tgz";
- path = fetchurl {
- name = "aws4___aws4_1.7.0.tgz";
- url = "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz";
- sha1 = "d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289";
- };
- }
-
- {
- name = "babel_code_frame___babel_code_frame_6.26.0.tgz";
- path = fetchurl {
- name = "babel_code_frame___babel_code_frame_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz";
- sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b";
- };
- }
-
- {
- name = "babel_core___babel_core_6.26.3.tgz";
- path = fetchurl {
- name = "babel_core___babel_core_6.26.3.tgz";
- url = "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz";
- sha1 = "b2e2f09e342d0f0c88e2f02e067794125e75c207";
- };
- }
-
- {
- name = "babel_generator___babel_generator_6.26.1.tgz";
- path = fetchurl {
- name = "babel_generator___babel_generator_6.26.1.tgz";
- url = "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz";
- sha1 = "1844408d3b8f0d35a404ea7ac180f087a601bd90";
- };
- }
-
- {
- name = "babel_helper_builder_binary_assignment_operator_visitor___babel_helper_builder_binary_assignment_operator_visitor_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_builder_binary_assignment_operator_visitor___babel_helper_builder_binary_assignment_operator_visitor_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz";
- sha1 = "cce4517ada356f4220bcae8a02c2b346f9a56664";
- };
- }
-
- {
- name = "babel_helper_call_delegate___babel_helper_call_delegate_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_call_delegate___babel_helper_call_delegate_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz";
- sha1 = "ece6aacddc76e41c3461f88bfc575bd0daa2df8d";
- };
- }
-
- {
- name = "babel_helper_define_map___babel_helper_define_map_6.26.0.tgz";
- path = fetchurl {
- name = "babel_helper_define_map___babel_helper_define_map_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz";
- sha1 = "a5f56dab41a25f97ecb498c7ebaca9819f95be5f";
- };
- }
-
- {
- name = "babel_helper_explode_assignable_expression___babel_helper_explode_assignable_expression_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_explode_assignable_expression___babel_helper_explode_assignable_expression_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz";
- sha1 = "f25b82cf7dc10433c55f70592d5746400ac22caa";
- };
- }
-
- {
- name = "babel_helper_function_name___babel_helper_function_name_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_function_name___babel_helper_function_name_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz";
- sha1 = "d3475b8c03ed98242a25b48351ab18399d3580a9";
- };
- }
-
- {
- name = "babel_helper_get_function_arity___babel_helper_get_function_arity_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_get_function_arity___babel_helper_get_function_arity_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz";
- sha1 = "8f7782aa93407c41d3aa50908f89b031b1b6853d";
- };
- }
-
- {
- name = "babel_helper_hoist_variables___babel_helper_hoist_variables_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_hoist_variables___babel_helper_hoist_variables_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz";
- sha1 = "1ecb27689c9d25513eadbc9914a73f5408be7a76";
- };
- }
-
- {
- name = "babel_helper_optimise_call_expression___babel_helper_optimise_call_expression_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_optimise_call_expression___babel_helper_optimise_call_expression_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz";
- sha1 = "f7a13427ba9f73f8f4fa993c54a97882d1244257";
- };
- }
-
- {
- name = "babel_helper_regex___babel_helper_regex_6.26.0.tgz";
- path = fetchurl {
- name = "babel_helper_regex___babel_helper_regex_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz";
- sha1 = "325c59f902f82f24b74faceed0363954f6495e72";
- };
- }
-
- {
- name = "babel_helper_remap_async_to_generator___babel_helper_remap_async_to_generator_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_remap_async_to_generator___babel_helper_remap_async_to_generator_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz";
- sha1 = "5ec581827ad723fecdd381f1c928390676e4551b";
- };
- }
-
- {
- name = "babel_helper_replace_supers___babel_helper_replace_supers_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helper_replace_supers___babel_helper_replace_supers_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz";
- sha1 = "bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a";
- };
- }
-
- {
- name = "babel_helpers___babel_helpers_6.24.1.tgz";
- path = fetchurl {
- name = "babel_helpers___babel_helpers_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz";
- sha1 = "3471de9caec388e5c850e597e58a26ddf37602b2";
- };
- }
-
- {
- name = "babel_loader___babel_loader_7.1.5.tgz";
- path = fetchurl {
- name = "babel_loader___babel_loader_7.1.5.tgz";
- url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz";
- sha1 = "e3ee0cd7394aa557e013b02d3e492bfd07aa6d68";
- };
- }
-
- {
- name = "babel_messages___babel_messages_6.23.0.tgz";
- path = fetchurl {
- name = "babel_messages___babel_messages_6.23.0.tgz";
- url = "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz";
- sha1 = "f3cdf4703858035b2a2951c6ec5edf6c62f2630e";
- };
- }
-
- {
- name = "babel_plugin_check_es2015_constants___babel_plugin_check_es2015_constants_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_check_es2015_constants___babel_plugin_check_es2015_constants_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz";
- sha1 = "35157b101426fd2ffd3da3f75c7d1e91835bbf8a";
- };
- }
-
- {
- name = "babel_plugin_syntax_async_functions___babel_plugin_syntax_async_functions_6.13.0.tgz";
- path = fetchurl {
- name = "babel_plugin_syntax_async_functions___babel_plugin_syntax_async_functions_6.13.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz";
- sha1 = "cad9cad1191b5ad634bf30ae0872391e0647be95";
- };
- }
-
- {
- name = "babel_plugin_syntax_exponentiation_operator___babel_plugin_syntax_exponentiation_operator_6.13.0.tgz";
- path = fetchurl {
- name = "babel_plugin_syntax_exponentiation_operator___babel_plugin_syntax_exponentiation_operator_6.13.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz";
- sha1 = "9ee7e8337290da95288201a6a57f4170317830de";
- };
- }
-
- {
- name = "babel_plugin_syntax_trailing_function_commas___babel_plugin_syntax_trailing_function_commas_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_syntax_trailing_function_commas___babel_plugin_syntax_trailing_function_commas_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz";
- sha1 = "ba0360937f8d06e40180a43fe0d5616fff532cf3";
- };
- }
-
- {
- name = "babel_plugin_transform_async_to_generator___babel_plugin_transform_async_to_generator_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_async_to_generator___babel_plugin_transform_async_to_generator_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz";
- sha1 = "6536e378aff6cb1d5517ac0e40eb3e9fc8d08761";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_arrow_functions___babel_plugin_transform_es2015_arrow_functions_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_arrow_functions___babel_plugin_transform_es2015_arrow_functions_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz";
- sha1 = "452692cb711d5f79dc7f85e440ce41b9f244d221";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_block_scoped_functions___babel_plugin_transform_es2015_block_scoped_functions_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_block_scoped_functions___babel_plugin_transform_es2015_block_scoped_functions_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz";
- sha1 = "bbc51b49f964d70cb8d8e0b94e820246ce3a6141";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_block_scoping___babel_plugin_transform_es2015_block_scoping_6.26.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_block_scoping___babel_plugin_transform_es2015_block_scoping_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz";
- sha1 = "d70f5299c1308d05c12f463813b0a09e73b1895f";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_classes___babel_plugin_transform_es2015_classes_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_classes___babel_plugin_transform_es2015_classes_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz";
- sha1 = "5a4c58a50c9c9461e564b4b2a3bfabc97a2584db";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_computed_properties___babel_plugin_transform_es2015_computed_properties_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_computed_properties___babel_plugin_transform_es2015_computed_properties_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz";
- sha1 = "6fe2a8d16895d5634f4cd999b6d3480a308159b3";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_destructuring___babel_plugin_transform_es2015_destructuring_6.23.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_destructuring___babel_plugin_transform_es2015_destructuring_6.23.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz";
- sha1 = "997bb1f1ab967f682d2b0876fe358d60e765c56d";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_duplicate_keys___babel_plugin_transform_es2015_duplicate_keys_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_duplicate_keys___babel_plugin_transform_es2015_duplicate_keys_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz";
- sha1 = "73eb3d310ca969e3ef9ec91c53741a6f1576423e";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_for_of___babel_plugin_transform_es2015_for_of_6.23.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_for_of___babel_plugin_transform_es2015_for_of_6.23.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz";
- sha1 = "f47c95b2b613df1d3ecc2fdb7573623c75248691";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_function_name___babel_plugin_transform_es2015_function_name_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_function_name___babel_plugin_transform_es2015_function_name_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz";
- sha1 = "834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_literals___babel_plugin_transform_es2015_literals_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_literals___babel_plugin_transform_es2015_literals_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz";
- sha1 = "4f54a02d6cd66cf915280019a31d31925377ca2e";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_modules_amd___babel_plugin_transform_es2015_modules_amd_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_modules_amd___babel_plugin_transform_es2015_modules_amd_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz";
- sha1 = "3b3e54017239842d6d19c3011c4bd2f00a00d154";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_modules_commonjs___babel_plugin_transform_es2015_modules_commonjs_6.26.2.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_modules_commonjs___babel_plugin_transform_es2015_modules_commonjs_6.26.2.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz";
- sha1 = "58a793863a9e7ca870bdc5a881117ffac27db6f3";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_modules_systemjs___babel_plugin_transform_es2015_modules_systemjs_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_modules_systemjs___babel_plugin_transform_es2015_modules_systemjs_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz";
- sha1 = "ff89a142b9119a906195f5f106ecf305d9407d23";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_modules_umd___babel_plugin_transform_es2015_modules_umd_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_modules_umd___babel_plugin_transform_es2015_modules_umd_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz";
- sha1 = "ac997e6285cd18ed6176adb607d602344ad38468";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_object_super___babel_plugin_transform_es2015_object_super_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_object_super___babel_plugin_transform_es2015_object_super_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz";
- sha1 = "24cef69ae21cb83a7f8603dad021f572eb278f8d";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_parameters___babel_plugin_transform_es2015_parameters_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_parameters___babel_plugin_transform_es2015_parameters_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz";
- sha1 = "57ac351ab49caf14a97cd13b09f66fdf0a625f2b";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_shorthand_properties___babel_plugin_transform_es2015_shorthand_properties_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_shorthand_properties___babel_plugin_transform_es2015_shorthand_properties_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz";
- sha1 = "24f875d6721c87661bbd99a4622e51f14de38aa0";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_spread___babel_plugin_transform_es2015_spread_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_spread___babel_plugin_transform_es2015_spread_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz";
- sha1 = "d6d68a99f89aedc4536c81a542e8dd9f1746f8d1";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_sticky_regex___babel_plugin_transform_es2015_sticky_regex_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_sticky_regex___babel_plugin_transform_es2015_sticky_regex_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz";
- sha1 = "00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_template_literals___babel_plugin_transform_es2015_template_literals_6.22.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_template_literals___babel_plugin_transform_es2015_template_literals_6.22.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz";
- sha1 = "a84b3450f7e9f8f1f6839d6d687da84bb1236d8d";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_typeof_symbol___babel_plugin_transform_es2015_typeof_symbol_6.23.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_typeof_symbol___babel_plugin_transform_es2015_typeof_symbol_6.23.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz";
- sha1 = "dec09f1cddff94b52ac73d505c84df59dcceb372";
- };
- }
-
- {
- name = "babel_plugin_transform_es2015_unicode_regex___babel_plugin_transform_es2015_unicode_regex_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_es2015_unicode_regex___babel_plugin_transform_es2015_unicode_regex_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz";
- sha1 = "d38b12f42ea7323f729387f18a7c5ae1faeb35e9";
- };
- }
-
- {
- name = "babel_plugin_transform_exponentiation_operator___babel_plugin_transform_exponentiation_operator_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_exponentiation_operator___babel_plugin_transform_exponentiation_operator_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz";
- sha1 = "2ab0c9c7f3098fa48907772bb813fe41e8de3a0e";
- };
- }
-
- {
- name = "babel_plugin_transform_regenerator___babel_plugin_transform_regenerator_6.26.0.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_regenerator___babel_plugin_transform_regenerator_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz";
- sha1 = "e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f";
- };
- }
-
- {
- name = "babel_plugin_transform_strict_mode___babel_plugin_transform_strict_mode_6.24.1.tgz";
- path = fetchurl {
- name = "babel_plugin_transform_strict_mode___babel_plugin_transform_strict_mode_6.24.1.tgz";
- url = "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz";
- sha1 = "d5faf7aa578a65bbe591cf5edae04a0c67020758";
- };
- }
-
- {
- name = "babel_preset_env___babel_preset_env_1.7.0.tgz";
- path = fetchurl {
- name = "babel_preset_env___babel_preset_env_1.7.0.tgz";
- url = "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz";
- sha1 = "dea79fa4ebeb883cd35dab07e260c1c9c04df77a";
- };
- }
-
- {
- name = "babel_register___babel_register_6.26.0.tgz";
- path = fetchurl {
- name = "babel_register___babel_register_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz";
- sha1 = "6ed021173e2fcb486d7acb45c6009a856f647071";
- };
- }
-
- {
- name = "babel_runtime___babel_runtime_6.26.0.tgz";
- path = fetchurl {
- name = "babel_runtime___babel_runtime_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz";
- sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
- };
- }
-
- {
- name = "babel_template___babel_template_6.26.0.tgz";
- path = fetchurl {
- name = "babel_template___babel_template_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz";
- sha1 = "de03e2d16396b069f46dd9fff8521fb1a0e35e02";
- };
- }
-
- {
- name = "babel_traverse___babel_traverse_6.26.0.tgz";
- path = fetchurl {
- name = "babel_traverse___babel_traverse_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz";
- sha1 = "46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee";
- };
- }
-
- {
- name = "babel_types___babel_types_6.26.0.tgz";
- path = fetchurl {
- name = "babel_types___babel_types_6.26.0.tgz";
- url = "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz";
- sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497";
- };
- }
-
- {
- name = "babylon___babylon_6.18.0.tgz";
- path = fetchurl {
- name = "babylon___babylon_6.18.0.tgz";
- url = "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz";
- sha1 = "af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3";
- };
- }
-
- {
- name = "balanced_match___balanced_match_0.4.2.tgz";
- path = fetchurl {
- name = "balanced_match___balanced_match_0.4.2.tgz";
- url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz";
- sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
- };
- }
-
- {
- name = "balanced_match___balanced_match_1.0.0.tgz";
- path = fetchurl {
- name = "balanced_match___balanced_match_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz";
- sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
- };
- }
-
- {
- name = "base64_js___base64_js_1.3.0.tgz";
- path = fetchurl {
- name = "base64_js___base64_js_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz";
- sha1 = "cab1e6118f051095e58b5281aea8c1cd22bfc0e3";
- };
- }
-
- {
- name = "base___base_0.11.2.tgz";
- path = fetchurl {
- name = "base___base_0.11.2.tgz";
- url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz";
- sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f";
- };
- }
-
- {
- name = "batch___batch_0.6.1.tgz";
- path = fetchurl {
- name = "batch___batch_0.6.1.tgz";
- url = "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz";
- sha1 = "dc34314f4e679318093fc760272525f94bf25c16";
- };
- }
-
- {
- name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz";
- path = fetchurl {
- name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
- sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
- };
- }
-
- {
- name = "big.js___big.js_3.2.0.tgz";
- path = fetchurl {
- name = "big.js___big.js_3.2.0.tgz";
- url = "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz";
- sha1 = "a5fc298b81b9e0dca2e458824784b65c52ba588e";
- };
- }
-
- {
- name = "binary_extensions___binary_extensions_1.11.0.tgz";
- path = fetchurl {
- name = "binary_extensions___binary_extensions_1.11.0.tgz";
- url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz";
- sha1 = "46aa1751fb6a2f93ee5e689bb1087d4b14c6c205";
- };
- }
-
- {
- name = "block_stream___block_stream_0.0.9.tgz";
- path = fetchurl {
- name = "block_stream___block_stream_0.0.9.tgz";
- url = "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz";
- sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a";
- };
- }
-
- {
- name = "bn.js___bn.js_4.11.8.tgz";
- path = fetchurl {
- name = "bn.js___bn.js_4.11.8.tgz";
- url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz";
- sha1 = "2cde09eb5ee341f484746bb0309b3253b1b1442f";
- };
- }
-
- {
- name = "body_parser___body_parser_1.18.2.tgz";
- path = fetchurl {
- name = "body_parser___body_parser_1.18.2.tgz";
- url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz";
- sha1 = "87678a19d84b47d859b83199bd59bce222b10454";
- };
- }
-
- {
- name = "bonjour___bonjour_3.5.0.tgz";
- path = fetchurl {
- name = "bonjour___bonjour_3.5.0.tgz";
- url = "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz";
- sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5";
- };
- }
-
- {
- name = "boolbase___boolbase_1.0.0.tgz";
- path = fetchurl {
- name = "boolbase___boolbase_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz";
- sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
- };
- }
-
- {
- name = "boom___boom_2.10.1.tgz";
- path = fetchurl {
- name = "boom___boom_2.10.1.tgz";
- url = "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz";
- sha1 = "39c8918ceff5799f83f9492a848f625add0c766f";
- };
- }
-
- {
- name = "bootstrap___bootstrap_4.1.3.tgz";
- path = fetchurl {
- name = "bootstrap___bootstrap_4.1.3.tgz";
- url = "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.3.tgz";
- sha1 = "0eb371af2c8448e8c210411d0cb824a6409a12be";
- };
- }
-
- {
- name = "brace_expansion___brace_expansion_1.1.11.tgz";
- path = fetchurl {
- name = "brace_expansion___brace_expansion_1.1.11.tgz";
- url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz";
- sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd";
- };
- }
-
- {
- name = "braces___braces_1.8.5.tgz";
- path = fetchurl {
- name = "braces___braces_1.8.5.tgz";
- url = "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz";
- sha1 = "ba77962e12dff969d6b76711e914b737857bf6a7";
- };
- }
-
- {
- name = "braces___braces_2.3.2.tgz";
- path = fetchurl {
- name = "braces___braces_2.3.2.tgz";
- url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz";
- sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729";
- };
- }
-
- {
- name = "brorand___brorand_1.1.0.tgz";
- path = fetchurl {
- name = "brorand___brorand_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz";
- sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f";
- };
- }
-
- {
- name = "browserify_aes___browserify_aes_1.2.0.tgz";
- path = fetchurl {
- name = "browserify_aes___browserify_aes_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz";
- sha1 = "326734642f403dabc3003209853bb70ad428ef48";
- };
- }
-
- {
- name = "browserify_cipher___browserify_cipher_1.0.1.tgz";
- path = fetchurl {
- name = "browserify_cipher___browserify_cipher_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz";
- sha1 = "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0";
- };
- }
-
- {
- name = "browserify_des___browserify_des_1.0.2.tgz";
- path = fetchurl {
- name = "browserify_des___browserify_des_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz";
- sha1 = "3af4f1f59839403572f1c66204375f7a7f703e9c";
- };
- }
-
- {
- name = "browserify_rsa___browserify_rsa_4.0.1.tgz";
- path = fetchurl {
- name = "browserify_rsa___browserify_rsa_4.0.1.tgz";
- url = "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz";
- sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524";
- };
- }
-
- {
- name = "browserify_sign___browserify_sign_4.0.4.tgz";
- path = fetchurl {
- name = "browserify_sign___browserify_sign_4.0.4.tgz";
- url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz";
- sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298";
- };
- }
-
- {
- name = "browserify_zlib___browserify_zlib_0.2.0.tgz";
- path = fetchurl {
- name = "browserify_zlib___browserify_zlib_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz";
- sha1 = "2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f";
- };
- }
-
- {
- name = "browserslist___browserslist_1.7.7.tgz";
- path = fetchurl {
- name = "browserslist___browserslist_1.7.7.tgz";
- url = "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz";
- sha1 = "0bd76704258be829b2398bb50e4b62d1a166b0b9";
- };
- }
-
- {
- name = "browserslist___browserslist_3.2.8.tgz";
- path = fetchurl {
- name = "browserslist___browserslist_3.2.8.tgz";
- url = "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz";
- sha1 = "b0005361d6471f0f5952797a76fc985f1f978fc6";
- };
- }
-
- {
- name = "buffer_indexof___buffer_indexof_1.1.1.tgz";
- path = fetchurl {
- name = "buffer_indexof___buffer_indexof_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz";
- sha1 = "52fabcc6a606d1a00302802648ef68f639da268c";
- };
- }
-
- {
- name = "buffer_xor___buffer_xor_1.0.3.tgz";
- path = fetchurl {
- name = "buffer_xor___buffer_xor_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz";
- sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9";
- };
- }
-
- {
- name = "buffer___buffer_4.9.1.tgz";
- path = fetchurl {
- name = "buffer___buffer_4.9.1.tgz";
- url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz";
- sha1 = "6d1bb601b07a4efced97094132093027c95bc298";
- };
- }
-
- {
- name = "builtin_modules___builtin_modules_1.1.1.tgz";
- path = fetchurl {
- name = "builtin_modules___builtin_modules_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz";
- sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f";
- };
- }
-
- {
- name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz";
- path = fetchurl {
- name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
- sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
- };
- }
-
- {
- name = "bytes___bytes_3.0.0.tgz";
- path = fetchurl {
- name = "bytes___bytes_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz";
- sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048";
- };
- }
-
- {
- name = "cache_base___cache_base_1.0.1.tgz";
- path = fetchurl {
- name = "cache_base___cache_base_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz";
- sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2";
- };
- }
-
- {
- name = "camelcase_keys___camelcase_keys_2.1.0.tgz";
- path = fetchurl {
- name = "camelcase_keys___camelcase_keys_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz";
- sha1 = "308beeaffdf28119051efa1d932213c91b8f92e7";
- };
- }
-
- {
- name = "camelcase___camelcase_1.2.1.tgz";
- path = fetchurl {
- name = "camelcase___camelcase_1.2.1.tgz";
- url = "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz";
- sha1 = "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39";
- };
- }
-
- {
- name = "camelcase___camelcase_2.1.1.tgz";
- path = fetchurl {
- name = "camelcase___camelcase_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz";
- sha1 = "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f";
- };
- }
-
- {
- name = "camelcase___camelcase_3.0.0.tgz";
- path = fetchurl {
- name = "camelcase___camelcase_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz";
- sha1 = "32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a";
- };
- }
-
- {
- name = "camelcase___camelcase_4.1.0.tgz";
- path = fetchurl {
- name = "camelcase___camelcase_4.1.0.tgz";
- url = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz";
- sha1 = "d545635be1e33c542649c69173e5de6acfae34dd";
- };
- }
-
- {
- name = "caniuse_api___caniuse_api_1.6.1.tgz";
- path = fetchurl {
- name = "caniuse_api___caniuse_api_1.6.1.tgz";
- url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz";
- sha1 = "b534e7c734c4f81ec5fbe8aca2ad24354b962c6c";
- };
- }
-
- {
- name = "caniuse_db___caniuse_db_1.0.30000871.tgz";
- path = fetchurl {
- name = "caniuse_db___caniuse_db_1.0.30000871.tgz";
- url = "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000871.tgz";
- sha1 = "f1995c1fe31892649a7605957a80c92518423d4d";
- };
- }
-
- {
- name = "caniuse_lite___caniuse_lite_1.0.30000865.tgz";
- path = fetchurl {
- name = "caniuse_lite___caniuse_lite_1.0.30000865.tgz";
- url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz";
- sha1 = "70026616e8afe6e1442f8bb4e1092987d81a2f25";
- };
- }
-
- {
- name = "caseless___caseless_0.12.0.tgz";
- path = fetchurl {
- name = "caseless___caseless_0.12.0.tgz";
- url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz";
- sha1 = "1b681c21ff84033c826543090689420d187151dc";
- };
- }
-
- {
- name = "center_align___center_align_0.1.3.tgz";
- path = fetchurl {
- name = "center_align___center_align_0.1.3.tgz";
- url = "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz";
- sha1 = "aa0d32629b6ee972200411cbd4461c907bc2b7ad";
- };
- }
-
- {
- name = "chalk___chalk_1.1.3.tgz";
- path = fetchurl {
- name = "chalk___chalk_1.1.3.tgz";
- url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz";
- sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
- };
- }
-
- {
- name = "chalk___chalk_2.4.1.tgz";
- path = fetchurl {
- name = "chalk___chalk_2.4.1.tgz";
- url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz";
- sha1 = "18c49ab16a037b6eb0152cc83e3471338215b66e";
- };
- }
-
- {
- name = "chokidar___chokidar_2.0.4.tgz";
- path = fetchurl {
- name = "chokidar___chokidar_2.0.4.tgz";
- url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz";
- sha1 = "356ff4e2b0e8e43e322d18a372460bbcf3accd26";
- };
- }
-
- {
- name = "chownr___chownr_1.0.1.tgz";
- path = fetchurl {
- name = "chownr___chownr_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz";
- sha1 = "e2a75042a9551908bebd25b8523d5f9769d79181";
- };
- }
-
- {
- name = "cipher_base___cipher_base_1.0.4.tgz";
- path = fetchurl {
- name = "cipher_base___cipher_base_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz";
- sha1 = "8760e4ecc272f4c363532f926d874aae2c1397de";
- };
- }
-
- {
- name = "clap___clap_1.2.3.tgz";
- path = fetchurl {
- name = "clap___clap_1.2.3.tgz";
- url = "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz";
- sha1 = "4f36745b32008492557f46412d66d50cb99bce51";
- };
- }
-
- {
- name = "class_utils___class_utils_0.3.6.tgz";
- path = fetchurl {
- name = "class_utils___class_utils_0.3.6.tgz";
- url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz";
- sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463";
- };
- }
-
- {
- name = "clean_webpack_plugin___clean_webpack_plugin_0.1.19.tgz";
- path = fetchurl {
- name = "clean_webpack_plugin___clean_webpack_plugin_0.1.19.tgz";
- url = "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz";
- sha1 = "ceda8bb96b00fe168e9b080272960d20fdcadd6d";
- };
- }
-
- {
- name = "cliui___cliui_2.1.0.tgz";
- path = fetchurl {
- name = "cliui___cliui_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz";
- sha1 = "4b475760ff80264c762c3a1719032e91c7fea0d1";
- };
- }
-
- {
- name = "cliui___cliui_3.2.0.tgz";
- path = fetchurl {
- name = "cliui___cliui_3.2.0.tgz";
- url = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz";
- sha1 = "120601537a916d29940f934da3b48d585a39213d";
- };
- }
-
- {
- name = "clone_deep___clone_deep_2.0.2.tgz";
- path = fetchurl {
- name = "clone_deep___clone_deep_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz";
- sha1 = "00db3a1e173656730d1188c3d6aced6d7ea97713";
- };
- }
-
- {
- name = "clone___clone_1.0.4.tgz";
- path = fetchurl {
- name = "clone___clone_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz";
- sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
- };
- }
-
- {
- name = "co___co_4.6.0.tgz";
- path = fetchurl {
- name = "co___co_4.6.0.tgz";
- url = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz";
- sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
- };
- }
-
- {
- name = "coa___coa_1.0.4.tgz";
- path = fetchurl {
- name = "coa___coa_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz";
- sha1 = "a9ef153660d6a86a8bdec0289a5c684d217432fd";
- };
- }
-
- {
- name = "code_point_at___code_point_at_1.1.0.tgz";
- path = fetchurl {
- name = "code_point_at___code_point_at_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz";
- sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
- };
- }
-
- {
- name = "collection_visit___collection_visit_1.0.0.tgz";
- path = fetchurl {
- name = "collection_visit___collection_visit_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz";
- sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
- };
- }
-
- {
- name = "color_convert___color_convert_1.9.2.tgz";
- path = fetchurl {
- name = "color_convert___color_convert_1.9.2.tgz";
- url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz";
- sha1 = "49881b8fba67df12a96bdf3f56c0aab9e7913147";
- };
- }
-
- {
- name = "color_name___color_name_1.1.1.tgz";
- path = fetchurl {
- name = "color_name___color_name_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz";
- sha1 = "4b1415304cf50028ea81643643bd82ea05803689";
- };
- }
-
- {
- name = "color_name___color_name_1.1.3.tgz";
- path = fetchurl {
- name = "color_name___color_name_1.1.3.tgz";
- url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz";
- sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
- };
- }
-
- {
- name = "color_string___color_string_0.3.0.tgz";
- path = fetchurl {
- name = "color_string___color_string_0.3.0.tgz";
- url = "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz";
- sha1 = "27d46fb67025c5c2fa25993bfbf579e47841b991";
- };
- }
-
- {
- name = "color___color_0.11.4.tgz";
- path = fetchurl {
- name = "color___color_0.11.4.tgz";
- url = "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz";
- sha1 = "6d7b5c74fb65e841cd48792ad1ed5e07b904d764";
- };
- }
-
- {
- name = "colormin___colormin_1.1.2.tgz";
- path = fetchurl {
- name = "colormin___colormin_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz";
- sha1 = "ea2f7420a72b96881a38aae59ec124a6f7298133";
- };
- }
-
- {
- name = "colors___colors_1.1.2.tgz";
- path = fetchurl {
- name = "colors___colors_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz";
- sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63";
- };
- }
-
- {
- name = "combined_stream___combined_stream_1.0.6.tgz";
- path = fetchurl {
- name = "combined_stream___combined_stream_1.0.6.tgz";
- url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz";
- sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818";
- };
- }
-
- {
- name = "commondir___commondir_1.0.1.tgz";
- path = fetchurl {
- name = "commondir___commondir_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz";
- sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b";
- };
- }
-
- {
- name = "component_emitter___component_emitter_1.2.1.tgz";
- path = fetchurl {
- name = "component_emitter___component_emitter_1.2.1.tgz";
- url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz";
- sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6";
- };
- }
-
- {
- name = "compressible___compressible_2.0.14.tgz";
- path = fetchurl {
- name = "compressible___compressible_2.0.14.tgz";
- url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz";
- sha1 = "326c5f507fbb055f54116782b969a81b67a29da7";
- };
- }
-
- {
- name = "compression___compression_1.7.3.tgz";
- path = fetchurl {
- name = "compression___compression_1.7.3.tgz";
- url = "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz";
- sha1 = "27e0e176aaf260f7f2c2813c3e440adb9f1993db";
- };
- }
-
- {
- name = "concat_map___concat_map_0.0.1.tgz";
- path = fetchurl {
- name = "concat_map___concat_map_0.0.1.tgz";
- url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz";
- sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
- };
- }
-
- {
- name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz";
- path = fetchurl {
- name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz";
- url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz";
- sha1 = "b06873934bc5e344fef611a196a6faae0aee015a";
- };
- }
-
- {
- name = "console_browserify___console_browserify_1.1.0.tgz";
- path = fetchurl {
- name = "console_browserify___console_browserify_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz";
- sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
- };
- }
-
- {
- name = "console_control_strings___console_control_strings_1.1.0.tgz";
- path = fetchurl {
- name = "console_control_strings___console_control_strings_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz";
- sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
- };
- }
-
- {
- name = "constants_browserify___constants_browserify_1.0.0.tgz";
- path = fetchurl {
- name = "constants_browserify___constants_browserify_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz";
- sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
- };
- }
-
- {
- name = "content_disposition___content_disposition_0.5.2.tgz";
- path = fetchurl {
- name = "content_disposition___content_disposition_0.5.2.tgz";
- url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz";
- sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4";
- };
- }
-
- {
- name = "content_type___content_type_1.0.4.tgz";
- path = fetchurl {
- name = "content_type___content_type_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz";
- sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b";
- };
- }
-
- {
- name = "convert_source_map___convert_source_map_0.3.5.tgz";
- path = fetchurl {
- name = "convert_source_map___convert_source_map_0.3.5.tgz";
- url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz";
- sha1 = "f1d802950af7dd2631a1febe0596550c86ab3190";
- };
- }
-
- {
- name = "convert_source_map___convert_source_map_1.5.1.tgz";
- path = fetchurl {
- name = "convert_source_map___convert_source_map_1.5.1.tgz";
- url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz";
- sha1 = "b8278097b9bc229365de5c62cf5fcaed8b5599e5";
- };
- }
-
- {
- name = "cookie_signature___cookie_signature_1.0.6.tgz";
- path = fetchurl {
- name = "cookie_signature___cookie_signature_1.0.6.tgz";
- url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz";
- sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c";
- };
- }
-
- {
- name = "cookie___cookie_0.3.1.tgz";
- path = fetchurl {
- name = "cookie___cookie_0.3.1.tgz";
- url = "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz";
- sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb";
- };
- }
-
- {
- name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
- path = fetchurl {
- name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
- sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
- };
- }
-
- {
- name = "core_js___core_js_2.5.7.tgz";
- path = fetchurl {
- name = "core_js___core_js_2.5.7.tgz";
- url = "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz";
- sha1 = "f972608ff0cead68b841a16a932d0b183791814e";
- };
- }
-
- {
- name = "core_util_is___core_util_is_1.0.2.tgz";
- path = fetchurl {
- name = "core_util_is___core_util_is_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz";
- sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
- };
- }
-
- {
- name = "create_ecdh___create_ecdh_4.0.3.tgz";
- path = fetchurl {
- name = "create_ecdh___create_ecdh_4.0.3.tgz";
- url = "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz";
- sha1 = "c9111b6f33045c4697f144787f9254cdc77c45ff";
- };
- }
-
- {
- name = "create_hash___create_hash_1.2.0.tgz";
- path = fetchurl {
- name = "create_hash___create_hash_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz";
- sha1 = "889078af11a63756bcfb59bd221996be3a9ef196";
- };
- }
-
- {
- name = "create_hmac___create_hmac_1.1.7.tgz";
- path = fetchurl {
- name = "create_hmac___create_hmac_1.1.7.tgz";
- url = "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz";
- sha1 = "69170c78b3ab957147b2b8b04572e47ead2243ff";
- };
- }
-
- {
- name = "cross_spawn___cross_spawn_3.0.1.tgz";
- path = fetchurl {
- name = "cross_spawn___cross_spawn_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz";
- sha1 = "1256037ecb9f0c5f79e3d6ef135e30770184b982";
- };
- }
-
- {
- name = "cross_spawn___cross_spawn_5.1.0.tgz";
- path = fetchurl {
- name = "cross_spawn___cross_spawn_5.1.0.tgz";
- url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz";
- sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449";
- };
- }
-
- {
- name = "cryptiles___cryptiles_2.0.5.tgz";
- path = fetchurl {
- name = "cryptiles___cryptiles_2.0.5.tgz";
- url = "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz";
- sha1 = "3bdfecdc608147c1c67202fa291e7dca59eaa3b8";
- };
- }
-
- {
- name = "crypto_browserify___crypto_browserify_3.12.0.tgz";
- path = fetchurl {
- name = "crypto_browserify___crypto_browserify_3.12.0.tgz";
- url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz";
- sha1 = "396cf9f3137f03e4b8e532c58f698254e00f80ec";
- };
- }
-
- {
- name = "css_color_names___css_color_names_0.0.4.tgz";
- path = fetchurl {
- name = "css_color_names___css_color_names_0.0.4.tgz";
- url = "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz";
- sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0";
- };
- }
-
- {
- name = "css_loader___css_loader_0.26.4.tgz";
- path = fetchurl {
- name = "css_loader___css_loader_0.26.4.tgz";
- url = "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz";
- sha1 = "b61e9e30db94303e6ffc892f10ecd09ad025a1fd";
- };
- }
-
- {
- name = "css_select___css_select_1.2.0.tgz";
- path = fetchurl {
- name = "css_select___css_select_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz";
- sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858";
- };
- }
-
- {
- name = "css_selector_tokenizer___css_selector_tokenizer_0.7.0.tgz";
- path = fetchurl {
- name = "css_selector_tokenizer___css_selector_tokenizer_0.7.0.tgz";
- url = "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz";
- sha1 = "e6988474ae8c953477bf5e7efecfceccd9cf4c86";
- };
- }
-
- {
- name = "css_what___css_what_2.1.0.tgz";
- path = fetchurl {
- name = "css_what___css_what_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz";
- sha1 = "9467d032c38cfaefb9f2d79501253062f87fa1bd";
- };
- }
-
- {
- name = "css___css_2.2.3.tgz";
- path = fetchurl {
- name = "css___css_2.2.3.tgz";
- url = "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz";
- sha1 = "f861f4ba61e79bedc962aa548e5780fd95cbc6be";
- };
- }
-
- {
- name = "cssesc___cssesc_0.1.0.tgz";
- path = fetchurl {
- name = "cssesc___cssesc_0.1.0.tgz";
- url = "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz";
- sha1 = "c814903e45623371a0477b40109aaafbeeaddbb4";
- };
- }
-
- {
- name = "cssnano___cssnano_3.10.0.tgz";
- path = fetchurl {
- name = "cssnano___cssnano_3.10.0.tgz";
- url = "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz";
- sha1 = "4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38";
- };
- }
-
- {
- name = "csso___csso_2.3.2.tgz";
- path = fetchurl {
- name = "csso___csso_2.3.2.tgz";
- url = "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz";
- sha1 = "ddd52c587033f49e94b71fc55569f252e8ff5f85";
- };
- }
-
- {
- name = "currently_unhandled___currently_unhandled_0.4.1.tgz";
- path = fetchurl {
- name = "currently_unhandled___currently_unhandled_0.4.1.tgz";
- url = "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz";
- sha1 = "988df33feab191ef799a61369dd76c17adf957ea";
- };
- }
-
- {
- name = "d___d_1.0.0.tgz";
- path = fetchurl {
- name = "d___d_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz";
- sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f";
- };
- }
-
- {
- name = "dashdash___dashdash_1.14.1.tgz";
- path = fetchurl {
- name = "dashdash___dashdash_1.14.1.tgz";
- url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz";
- sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
- };
- }
-
- {
- name = "date_now___date_now_0.1.4.tgz";
- path = fetchurl {
- name = "date_now___date_now_0.1.4.tgz";
- url = "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz";
- sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
- };
- }
-
- {
- name = "debug___debug_2.6.9.tgz";
- path = fetchurl {
- name = "debug___debug_2.6.9.tgz";
- url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz";
- sha1 = "5d128515df134ff327e90a4c93f4e077a536341f";
- };
- }
-
- {
- name = "debug___debug_3.1.0.tgz";
- path = fetchurl {
- name = "debug___debug_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz";
- sha1 = "5bb5a0672628b64149566ba16819e61518c67261";
- };
- }
-
- {
- name = "decamelize___decamelize_1.2.0.tgz";
- path = fetchurl {
- name = "decamelize___decamelize_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz";
- sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
- };
- }
-
- {
- name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
- path = fetchurl {
- name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
- sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
- };
- }
-
- {
- name = "deep_equal___deep_equal_1.0.1.tgz";
- path = fetchurl {
- name = "deep_equal___deep_equal_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz";
- sha1 = "f5d260292b660e084eff4cdbc9f08ad3247448b5";
- };
- }
-
- {
- name = "deep_extend___deep_extend_0.6.0.tgz";
- path = fetchurl {
- name = "deep_extend___deep_extend_0.6.0.tgz";
- url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz";
- sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac";
- };
- }
-
- {
- name = "define_properties___define_properties_1.1.2.tgz";
- path = fetchurl {
- name = "define_properties___define_properties_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz";
- sha1 = "83a73f2fea569898fb737193c8f873caf6d45c94";
- };
- }
-
- {
- name = "define_property___define_property_0.2.5.tgz";
- path = fetchurl {
- name = "define_property___define_property_0.2.5.tgz";
- url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz";
- sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
- };
- }
-
- {
- name = "define_property___define_property_1.0.0.tgz";
- path = fetchurl {
- name = "define_property___define_property_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz";
- sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
- };
- }
-
- {
- name = "define_property___define_property_2.0.2.tgz";
- path = fetchurl {
- name = "define_property___define_property_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz";
- sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d";
- };
- }
-
- {
- name = "defined___defined_1.0.0.tgz";
- path = fetchurl {
- name = "defined___defined_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz";
- sha1 = "c98d9bcef75674188e110969151199e39b1fa693";
- };
- }
-
- {
- name = "del___del_3.0.0.tgz";
- path = fetchurl {
- name = "del___del_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz";
- sha1 = "53ecf699ffcbcb39637691ab13baf160819766e5";
- };
- }
-
- {
- name = "delayed_stream___delayed_stream_1.0.0.tgz";
- path = fetchurl {
- name = "delayed_stream___delayed_stream_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz";
- sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
- };
- }
-
- {
- name = "delegates___delegates_1.0.0.tgz";
- path = fetchurl {
- name = "delegates___delegates_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz";
- sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
- };
- }
-
- {
- name = "depd___depd_1.1.1.tgz";
- path = fetchurl {
- name = "depd___depd_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz";
- sha1 = "5783b4e1c459f06fa5ca27f991f3d06e7a310359";
- };
- }
-
- {
- name = "depd___depd_1.1.2.tgz";
- path = fetchurl {
- name = "depd___depd_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz";
- sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9";
- };
- }
-
- {
- name = "des.js___des.js_1.0.0.tgz";
- path = fetchurl {
- name = "des.js___des.js_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz";
- sha1 = "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc";
- };
- }
-
- {
- name = "destroy___destroy_1.0.4.tgz";
- path = fetchurl {
- name = "destroy___destroy_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz";
- sha1 = "978857442c44749e4206613e37946205826abd80";
- };
- }
-
- {
- name = "detect_indent___detect_indent_4.0.0.tgz";
- path = fetchurl {
- name = "detect_indent___detect_indent_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz";
- sha1 = "f76d064352cdf43a1cb6ce619c4ee3a9475de208";
- };
- }
-
- {
- name = "detect_libc___detect_libc_1.0.3.tgz";
- path = fetchurl {
- name = "detect_libc___detect_libc_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz";
- sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
- };
- }
-
- {
- name = "detect_node___detect_node_2.0.3.tgz";
- path = fetchurl {
- name = "detect_node___detect_node_2.0.3.tgz";
- url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz";
- sha1 = "a2033c09cc8e158d37748fbde7507832bd6ce127";
- };
- }
-
- {
- name = "diffie_hellman___diffie_hellman_5.0.3.tgz";
- path = fetchurl {
- name = "diffie_hellman___diffie_hellman_5.0.3.tgz";
- url = "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz";
- sha1 = "40e8ee98f55a2149607146921c63e1ae5f3d2875";
- };
- }
-
- {
- name = "dns_equal___dns_equal_1.0.0.tgz";
- path = fetchurl {
- name = "dns_equal___dns_equal_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz";
- sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d";
- };
- }
-
- {
- name = "dns_packet___dns_packet_1.3.1.tgz";
- path = fetchurl {
- name = "dns_packet___dns_packet_1.3.1.tgz";
- url = "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz";
- sha1 = "12aa426981075be500b910eedcd0b47dd7deda5a";
- };
- }
-
- {
- name = "dns_txt___dns_txt_2.0.2.tgz";
- path = fetchurl {
- name = "dns_txt___dns_txt_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz";
- sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6";
- };
- }
-
- {
- name = "dom_converter___dom_converter_0.1.4.tgz";
- path = fetchurl {
- name = "dom_converter___dom_converter_0.1.4.tgz";
- url = "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz";
- sha1 = "a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b";
- };
- }
-
- {
- name = "dom_serializer___dom_serializer_0.1.0.tgz";
- path = fetchurl {
- name = "dom_serializer___dom_serializer_0.1.0.tgz";
- url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz";
- sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
- };
- }
-
- {
- name = "domain_browser___domain_browser_1.2.0.tgz";
- path = fetchurl {
- name = "domain_browser___domain_browser_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz";
- sha1 = "3d31f50191a6749dd1375a7f522e823d42e54eda";
- };
- }
-
- {
- name = "domelementtype___domelementtype_1.3.0.tgz";
- path = fetchurl {
- name = "domelementtype___domelementtype_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz";
- sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
- };
- }
-
- {
- name = "domelementtype___domelementtype_1.1.3.tgz";
- path = fetchurl {
- name = "domelementtype___domelementtype_1.1.3.tgz";
- url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz";
- sha1 = "bd28773e2642881aec51544924299c5cd822185b";
- };
- }
-
- {
- name = "domhandler___domhandler_2.1.0.tgz";
- path = fetchurl {
- name = "domhandler___domhandler_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz";
- sha1 = "d2646f5e57f6c3bab11cf6cb05d3c0acf7412594";
- };
- }
-
- {
- name = "domutils___domutils_1.1.6.tgz";
- path = fetchurl {
- name = "domutils___domutils_1.1.6.tgz";
- url = "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz";
- sha1 = "bddc3de099b9a2efacc51c623f28f416ecc57485";
- };
- }
-
- {
- name = "domutils___domutils_1.5.1.tgz";
- path = fetchurl {
- name = "domutils___domutils_1.5.1.tgz";
- url = "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz";
- sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
- };
- }
-
- {
- name = "ecc_jsbn___ecc_jsbn_0.1.1.tgz";
- path = fetchurl {
- name = "ecc_jsbn___ecc_jsbn_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz";
- sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505";
- };
- }
-
- {
- name = "ee_first___ee_first_1.1.1.tgz";
- path = fetchurl {
- name = "ee_first___ee_first_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz";
- sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
- };
- }
-
- {
- name = "electron_to_chromium___electron_to_chromium_1.3.52.tgz";
- path = fetchurl {
- name = "electron_to_chromium___electron_to_chromium_1.3.52.tgz";
- url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz";
- sha1 = "d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0";
- };
- }
-
- {
- name = "elliptic___elliptic_6.4.0.tgz";
- path = fetchurl {
- name = "elliptic___elliptic_6.4.0.tgz";
- url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz";
- sha1 = "cac9af8762c85836187003c8dfe193e5e2eae5df";
- };
- }
-
- {
- name = "emojis_list___emojis_list_2.1.0.tgz";
- path = fetchurl {
- name = "emojis_list___emojis_list_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz";
- sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389";
- };
- }
-
- {
- name = "encodeurl___encodeurl_1.0.2.tgz";
- path = fetchurl {
- name = "encodeurl___encodeurl_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz";
- sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
- };
- }
-
- {
- name = "enhanced_resolve___enhanced_resolve_3.4.1.tgz";
- path = fetchurl {
- name = "enhanced_resolve___enhanced_resolve_3.4.1.tgz";
- url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz";
- sha1 = "0421e339fd71419b3da13d129b3979040230476e";
- };
- }
-
- {
- name = "entities___entities_1.1.1.tgz";
- path = fetchurl {
- name = "entities___entities_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz";
- sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
- };
- }
-
- {
- name = "errno___errno_0.1.7.tgz";
- path = fetchurl {
- name = "errno___errno_0.1.7.tgz";
- url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz";
- sha1 = "4684d71779ad39af177e3f007996f7c67c852618";
- };
- }
-
- {
- name = "error_ex___error_ex_1.3.2.tgz";
- path = fetchurl {
- name = "error_ex___error_ex_1.3.2.tgz";
- url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz";
- sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf";
- };
- }
-
- {
- name = "error_stack_parser___error_stack_parser_2.0.2.tgz";
- path = fetchurl {
- name = "error_stack_parser___error_stack_parser_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz";
- sha1 = "4ae8dbaa2bf90a8b450707b9149dcabca135520d";
- };
- }
-
- {
- name = "es_abstract___es_abstract_1.12.0.tgz";
- path = fetchurl {
- name = "es_abstract___es_abstract_1.12.0.tgz";
- url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz";
- sha1 = "9dbbdd27c6856f0001421ca18782d786bf8a6165";
- };
- }
-
- {
- name = "es_to_primitive___es_to_primitive_1.1.1.tgz";
- path = fetchurl {
- name = "es_to_primitive___es_to_primitive_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz";
- sha1 = "45355248a88979034b6792e19bb81f2b7975dd0d";
- };
- }
-
- {
- name = "es5_ext___es5_ext_0.10.45.tgz";
- path = fetchurl {
- name = "es5_ext___es5_ext_0.10.45.tgz";
- url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz";
- sha1 = "0bfdf7b473da5919d5adf3bd25ceb754fccc3653";
- };
- }
-
- {
- name = "es6_iterator___es6_iterator_2.0.3.tgz";
- path = fetchurl {
- name = "es6_iterator___es6_iterator_2.0.3.tgz";
- url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz";
- sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7";
- };
- }
-
- {
- name = "es6_map___es6_map_0.1.5.tgz";
- path = fetchurl {
- name = "es6_map___es6_map_0.1.5.tgz";
- url = "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz";
- sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0";
- };
- }
-
- {
- name = "es6_set___es6_set_0.1.5.tgz";
- path = fetchurl {
- name = "es6_set___es6_set_0.1.5.tgz";
- url = "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz";
- sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1";
- };
- }
-
- {
- name = "es6_symbol___es6_symbol_3.1.1.tgz";
- path = fetchurl {
- name = "es6_symbol___es6_symbol_3.1.1.tgz";
- url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz";
- sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77";
- };
- }
-
- {
- name = "es6_weak_map___es6_weak_map_2.0.2.tgz";
- path = fetchurl {
- name = "es6_weak_map___es6_weak_map_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz";
- sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f";
- };
- }
-
- {
- name = "escape_html___escape_html_1.0.3.tgz";
- path = fetchurl {
- name = "escape_html___escape_html_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz";
- sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
- };
- }
-
- {
- name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
- path = fetchurl {
- name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
- url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
- sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
- };
- }
-
- {
- name = "escope___escope_3.6.0.tgz";
- path = fetchurl {
- name = "escope___escope_3.6.0.tgz";
- url = "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz";
- sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3";
- };
- }
-
- {
- name = "esprima___esprima_2.7.3.tgz";
- path = fetchurl {
- name = "esprima___esprima_2.7.3.tgz";
- url = "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz";
- sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
- };
- }
-
- {
- name = "esrecurse___esrecurse_4.2.1.tgz";
- path = fetchurl {
- name = "esrecurse___esrecurse_4.2.1.tgz";
- url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz";
- sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf";
- };
- }
-
- {
- name = "estraverse___estraverse_4.2.0.tgz";
- path = fetchurl {
- name = "estraverse___estraverse_4.2.0.tgz";
- url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz";
- sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13";
- };
- }
-
- {
- name = "esutils___esutils_2.0.2.tgz";
- path = fetchurl {
- name = "esutils___esutils_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz";
- sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
- };
- }
-
- {
- name = "etag___etag_1.8.1.tgz";
- path = fetchurl {
- name = "etag___etag_1.8.1.tgz";
- url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz";
- sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887";
- };
- }
-
- {
- name = "event_emitter___event_emitter_0.3.5.tgz";
- path = fetchurl {
- name = "event_emitter___event_emitter_0.3.5.tgz";
- url = "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz";
- sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39";
- };
- }
-
- {
- name = "eventemitter3___eventemitter3_3.1.0.tgz";
- path = fetchurl {
- name = "eventemitter3___eventemitter3_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz";
- sha1 = "090b4d6cdbd645ed10bf750d4b5407942d7ba163";
- };
- }
-
- {
- name = "events___events_1.1.1.tgz";
- path = fetchurl {
- name = "events___events_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz";
- sha1 = "9ebdb7635ad099c70dcc4c2a1f5004288e8bd924";
- };
- }
-
- {
- name = "eventsource___eventsource_0.1.6.tgz";
- path = fetchurl {
- name = "eventsource___eventsource_0.1.6.tgz";
- url = "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz";
- sha1 = "0acede849ed7dd1ccc32c811bb11b944d4f29232";
- };
- }
-
- {
- name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz";
- path = fetchurl {
- name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz";
- sha1 = "7fcbdb198dc71959432efe13842684e0525acb02";
- };
- }
-
- {
- name = "execa___execa_0.7.0.tgz";
- path = fetchurl {
- name = "execa___execa_0.7.0.tgz";
- url = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz";
- sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777";
- };
- }
-
- {
- name = "expand_brackets___expand_brackets_0.1.5.tgz";
- path = fetchurl {
- name = "expand_brackets___expand_brackets_0.1.5.tgz";
- url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz";
- sha1 = "df07284e342a807cd733ac5af72411e581d1177b";
- };
- }
-
- {
- name = "expand_brackets___expand_brackets_2.1.4.tgz";
- path = fetchurl {
- name = "expand_brackets___expand_brackets_2.1.4.tgz";
- url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz";
- sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
- };
- }
-
- {
- name = "expand_range___expand_range_1.8.2.tgz";
- path = fetchurl {
- name = "expand_range___expand_range_1.8.2.tgz";
- url = "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz";
- sha1 = "a299effd335fe2721ebae8e257ec79644fc85337";
- };
- }
-
- {
- name = "express___express_4.16.3.tgz";
- path = fetchurl {
- name = "express___express_4.16.3.tgz";
- url = "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz";
- sha1 = "6af8a502350db3246ecc4becf6b5a34d22f7ed53";
- };
- }
-
- {
- name = "extend_shallow___extend_shallow_2.0.1.tgz";
- path = fetchurl {
- name = "extend_shallow___extend_shallow_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz";
- sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
- };
- }
-
- {
- name = "extend_shallow___extend_shallow_3.0.2.tgz";
- path = fetchurl {
- name = "extend_shallow___extend_shallow_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz";
- sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
- };
- }
-
- {
- name = "extend___extend_3.0.2.tgz";
- path = fetchurl {
- name = "extend___extend_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz";
- sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa";
- };
- }
-
- {
- name = "extglob___extglob_0.3.2.tgz";
- path = fetchurl {
- name = "extglob___extglob_0.3.2.tgz";
- url = "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz";
- sha1 = "2e18ff3d2f49ab2765cec9023f011daa8d8349a1";
- };
- }
-
- {
- name = "extglob___extglob_2.0.4.tgz";
- path = fetchurl {
- name = "extglob___extglob_2.0.4.tgz";
- url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz";
- sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543";
- };
- }
-
- {
- name = "extract_text_webpack_plugin___extract_text_webpack_plugin_3.0.2.tgz";
- path = fetchurl {
- name = "extract_text_webpack_plugin___extract_text_webpack_plugin_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz";
- sha1 = "5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7";
- };
- }
-
- {
- name = "extsprintf___extsprintf_1.3.0.tgz";
- path = fetchurl {
- name = "extsprintf___extsprintf_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz";
- sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
- };
- }
-
- {
- name = "extsprintf___extsprintf_1.4.0.tgz";
- path = fetchurl {
- name = "extsprintf___extsprintf_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz";
- sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f";
- };
- }
-
- {
- name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz";
- path = fetchurl {
- name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
- sha1 = "c053477817c86b51daa853c81e059b733d023614";
- };
- }
-
- {
- name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz";
- path = fetchurl {
- name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";
- sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49";
- };
- }
-
- {
- name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz";
- path = fetchurl {
- name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
- sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
- };
- }
-
- {
- name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
- path = fetchurl {
- name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
- url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
- sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
- };
- }
-
- {
- name = "fastparse___fastparse_1.1.1.tgz";
- path = fetchurl {
- name = "fastparse___fastparse_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz";
- sha1 = "d1e2643b38a94d7583b479060e6c4affc94071f8";
- };
- }
-
- {
- name = "faye_websocket___faye_websocket_0.10.0.tgz";
- path = fetchurl {
- name = "faye_websocket___faye_websocket_0.10.0.tgz";
- url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz";
- sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4";
- };
- }
-
- {
- name = "faye_websocket___faye_websocket_0.11.1.tgz";
- path = fetchurl {
- name = "faye_websocket___faye_websocket_0.11.1.tgz";
- url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz";
- sha1 = "f0efe18c4f56e4f40afc7e06c719fd5ee6188f38";
- };
- }
-
- {
- name = "file_loader___file_loader_0.10.1.tgz";
- path = fetchurl {
- name = "file_loader___file_loader_0.10.1.tgz";
- url = "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz";
- sha1 = "815034119891fc6441fb5a64c11bc93c22ddd842";
- };
- }
-
- {
- name = "filename_regex___filename_regex_2.0.1.tgz";
- path = fetchurl {
- name = "filename_regex___filename_regex_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz";
- sha1 = "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26";
- };
- }
-
- {
- name = "fill_range___fill_range_2.2.4.tgz";
- path = fetchurl {
- name = "fill_range___fill_range_2.2.4.tgz";
- url = "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz";
- sha1 = "eb1e773abb056dcd8df2bfdf6af59b8b3a936565";
- };
- }
-
- {
- name = "fill_range___fill_range_4.0.0.tgz";
- path = fetchurl {
- name = "fill_range___fill_range_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz";
- sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
- };
- }
-
- {
- name = "finalhandler___finalhandler_1.1.1.tgz";
- path = fetchurl {
- name = "finalhandler___finalhandler_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz";
- sha1 = "eebf4ed840079c83f4249038c9d703008301b105";
- };
- }
-
- {
- name = "find_cache_dir___find_cache_dir_1.0.0.tgz";
- path = fetchurl {
- name = "find_cache_dir___find_cache_dir_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz";
- sha1 = "9288e3e9e3cc3748717d39eade17cf71fc30ee6f";
- };
- }
-
- {
- name = "find_up___find_up_1.1.2.tgz";
- path = fetchurl {
- name = "find_up___find_up_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz";
- sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f";
- };
- }
-
- {
- name = "find_up___find_up_2.1.0.tgz";
- path = fetchurl {
- name = "find_up___find_up_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz";
- sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
- };
- }
-
- {
- name = "flatten___flatten_1.0.2.tgz";
- path = fetchurl {
- name = "flatten___flatten_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz";
- sha1 = "dae46a9d78fbe25292258cc1e780a41d95c03782";
- };
- }
-
- {
- name = "follow_redirects___follow_redirects_1.5.1.tgz";
- path = fetchurl {
- name = "follow_redirects___follow_redirects_1.5.1.tgz";
- url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz";
- sha1 = "67a8f14f5a1f67f962c2c46469c79eaec0a90291";
- };
- }
-
- {
- name = "for_in___for_in_0.1.8.tgz";
- path = fetchurl {
- name = "for_in___for_in_0.1.8.tgz";
- url = "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz";
- sha1 = "d8773908e31256109952b1fdb9b3fa867d2775e1";
- };
- }
-
- {
- name = "for_in___for_in_1.0.2.tgz";
- path = fetchurl {
- name = "for_in___for_in_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz";
- sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
- };
- }
-
- {
- name = "for_own___for_own_0.1.5.tgz";
- path = fetchurl {
- name = "for_own___for_own_0.1.5.tgz";
- url = "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz";
- sha1 = "5265c681a4f294dabbf17c9509b6763aa84510ce";
- };
- }
-
- {
- name = "for_own___for_own_1.0.0.tgz";
- path = fetchurl {
- name = "for_own___for_own_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz";
- sha1 = "c63332f415cedc4b04dbfe70cf836494c53cb44b";
- };
- }
-
- {
- name = "foreach___foreach_2.0.5.tgz";
- path = fetchurl {
- name = "foreach___foreach_2.0.5.tgz";
- url = "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz";
- sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99";
- };
- }
-
- {
- name = "forever_agent___forever_agent_0.6.1.tgz";
- path = fetchurl {
- name = "forever_agent___forever_agent_0.6.1.tgz";
- url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz";
- sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
- };
- }
-
- {
- name = "form_data___form_data_2.1.4.tgz";
- path = fetchurl {
- name = "form_data___form_data_2.1.4.tgz";
- url = "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz";
- sha1 = "33c183acf193276ecaa98143a69e94bfee1750d1";
- };
- }
-
- {
- name = "form_data___form_data_2.3.2.tgz";
- path = fetchurl {
- name = "form_data___form_data_2.3.2.tgz";
- url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz";
- sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099";
- };
- }
-
- {
- name = "forwarded___forwarded_0.1.2.tgz";
- path = fetchurl {
- name = "forwarded___forwarded_0.1.2.tgz";
- url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz";
- sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84";
- };
- }
-
- {
- name = "fragment_cache___fragment_cache_0.2.1.tgz";
- path = fetchurl {
- name = "fragment_cache___fragment_cache_0.2.1.tgz";
- url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz";
- sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
- };
- }
-
- {
- name = "fresh___fresh_0.5.2.tgz";
- path = fetchurl {
- name = "fresh___fresh_0.5.2.tgz";
- url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz";
- sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7";
- };
- }
-
- {
- name = "friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.0.tgz";
- path = fetchurl {
- name = "friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.0.tgz";
- url = "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz";
- sha1 = "efc86cbb816224565861a1be7a9d84d0aafea136";
- };
- }
-
- {
- name = "fs_extra___fs_extra_2.1.2.tgz";
- path = fetchurl {
- name = "fs_extra___fs_extra_2.1.2.tgz";
- url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz";
- sha1 = "046c70163cef9aad46b0e4a7fa467fb22d71de35";
- };
- }
-
- {
- name = "fs_minipass___fs_minipass_1.2.5.tgz";
- path = fetchurl {
- name = "fs_minipass___fs_minipass_1.2.5.tgz";
- url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz";
- sha1 = "06c277218454ec288df77ada54a03b8702aacb9d";
- };
- }
-
- {
- name = "fs.realpath___fs.realpath_1.0.0.tgz";
- path = fetchurl {
- name = "fs.realpath___fs.realpath_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz";
- sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
- };
- }
-
- {
- name = "fsevents___fsevents_1.2.4.tgz";
- path = fetchurl {
- name = "fsevents___fsevents_1.2.4.tgz";
- url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz";
- sha1 = "f41dcb1af2582af3692da36fc55cbd8e1041c426";
- };
- }
-
- {
- name = "fstream___fstream_1.0.11.tgz";
- path = fetchurl {
- name = "fstream___fstream_1.0.11.tgz";
- url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz";
- sha1 = "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171";
- };
- }
-
- {
- name = "function_bind___function_bind_1.1.1.tgz";
- path = fetchurl {
- name = "function_bind___function_bind_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz";
- sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d";
- };
- }
-
- {
- name = "gauge___gauge_2.7.4.tgz";
- path = fetchurl {
- name = "gauge___gauge_2.7.4.tgz";
- url = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz";
- sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
- };
- }
-
- {
- name = "gaze___gaze_1.1.3.tgz";
- path = fetchurl {
- name = "gaze___gaze_1.1.3.tgz";
- url = "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz";
- sha1 = "c441733e13b927ac8c0ff0b4c3b033f28812924a";
- };
- }
-
- {
- name = "get_caller_file___get_caller_file_1.0.3.tgz";
- path = fetchurl {
- name = "get_caller_file___get_caller_file_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz";
- sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a";
- };
- }
-
- {
- name = "get_stdin___get_stdin_4.0.1.tgz";
- path = fetchurl {
- name = "get_stdin___get_stdin_4.0.1.tgz";
- url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz";
- sha1 = "b968c6b0a04384324902e8bf1a5df32579a450fe";
- };
- }
-
- {
- name = "get_stream___get_stream_3.0.0.tgz";
- path = fetchurl {
- name = "get_stream___get_stream_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz";
- sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14";
- };
- }
-
- {
- name = "get_value___get_value_2.0.6.tgz";
- path = fetchurl {
- name = "get_value___get_value_2.0.6.tgz";
- url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz";
- sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
- };
- }
-
- {
- name = "getpass___getpass_0.1.7.tgz";
- path = fetchurl {
- name = "getpass___getpass_0.1.7.tgz";
- url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz";
- sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
- };
- }
-
- {
- name = "glob_base___glob_base_0.3.0.tgz";
- path = fetchurl {
- name = "glob_base___glob_base_0.3.0.tgz";
- url = "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz";
- sha1 = "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4";
- };
- }
-
- {
- name = "glob_parent___glob_parent_2.0.0.tgz";
- path = fetchurl {
- name = "glob_parent___glob_parent_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz";
- sha1 = "81383d72db054fcccf5336daa902f182f6edbb28";
- };
- }
-
- {
- name = "glob_parent___glob_parent_3.1.0.tgz";
- path = fetchurl {
- name = "glob_parent___glob_parent_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz";
- sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae";
- };
- }
-
- {
- name = "glob___glob_6.0.4.tgz";
- path = fetchurl {
- name = "glob___glob_6.0.4.tgz";
- url = "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz";
- sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22";
- };
- }
-
- {
- name = "glob___glob_7.1.2.tgz";
- path = fetchurl {
- name = "glob___glob_7.1.2.tgz";
- url = "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz";
- sha1 = "c19c9df9a028702d678612384a6552404c636d15";
- };
- }
-
- {
- name = "globals___globals_9.18.0.tgz";
- path = fetchurl {
- name = "globals___globals_9.18.0.tgz";
- url = "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz";
- sha1 = "aa3896b3e69b487f17e31ed2143d69a8e30c2d8a";
- };
- }
-
- {
- name = "globby___globby_6.1.0.tgz";
- path = fetchurl {
- name = "globby___globby_6.1.0.tgz";
- url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz";
- sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c";
- };
- }
-
- {
- name = "globule___globule_1.2.1.tgz";
- path = fetchurl {
- name = "globule___globule_1.2.1.tgz";
- url = "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz";
- sha1 = "5dffb1b191f22d20797a9369b49eab4e9839696d";
- };
- }
-
- {
- name = "graceful_fs___graceful_fs_4.1.11.tgz";
- path = fetchurl {
- name = "graceful_fs___graceful_fs_4.1.11.tgz";
- url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz";
- sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
- };
- }
-
- {
- name = "handle_thing___handle_thing_1.2.5.tgz";
- path = fetchurl {
- name = "handle_thing___handle_thing_1.2.5.tgz";
- url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz";
- sha1 = "fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4";
- };
- }
-
- {
- name = "har_schema___har_schema_1.0.5.tgz";
- path = fetchurl {
- name = "har_schema___har_schema_1.0.5.tgz";
- url = "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz";
- sha1 = "d263135f43307c02c602afc8fe95970c0151369e";
- };
- }
-
- {
- name = "har_schema___har_schema_2.0.0.tgz";
- path = fetchurl {
- name = "har_schema___har_schema_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz";
- sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
- };
- }
-
- {
- name = "har_validator___har_validator_4.2.1.tgz";
- path = fetchurl {
- name = "har_validator___har_validator_4.2.1.tgz";
- url = "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz";
- sha1 = "33481d0f1bbff600dd203d75812a6a5fba002e2a";
- };
- }
-
- {
- name = "har_validator___har_validator_5.0.3.tgz";
- path = fetchurl {
- name = "har_validator___har_validator_5.0.3.tgz";
- url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz";
- sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd";
- };
- }
-
- {
- name = "has_ansi___has_ansi_2.0.0.tgz";
- path = fetchurl {
- name = "has_ansi___has_ansi_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz";
- sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
- };
- }
-
- {
- name = "has_flag___has_flag_1.0.0.tgz";
- path = fetchurl {
- name = "has_flag___has_flag_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz";
- sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa";
- };
- }
-
- {
- name = "has_flag___has_flag_2.0.0.tgz";
- path = fetchurl {
- name = "has_flag___has_flag_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz";
- sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51";
- };
- }
-
- {
- name = "has_flag___has_flag_3.0.0.tgz";
- path = fetchurl {
- name = "has_flag___has_flag_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz";
- sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
- };
- }
-
- {
- name = "has_unicode___has_unicode_2.0.1.tgz";
- path = fetchurl {
- name = "has_unicode___has_unicode_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz";
- sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
- };
- }
-
- {
- name = "has_value___has_value_0.3.1.tgz";
- path = fetchurl {
- name = "has_value___has_value_0.3.1.tgz";
- url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz";
- sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
- };
- }
-
- {
- name = "has_value___has_value_1.0.0.tgz";
- path = fetchurl {
- name = "has_value___has_value_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz";
- sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
- };
- }
-
- {
- name = "has_values___has_values_0.1.4.tgz";
- path = fetchurl {
- name = "has_values___has_values_0.1.4.tgz";
- url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz";
- sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
- };
- }
-
- {
- name = "has_values___has_values_1.0.0.tgz";
- path = fetchurl {
- name = "has_values___has_values_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz";
- sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
- };
- }
-
- {
- name = "has___has_1.0.3.tgz";
- path = fetchurl {
- name = "has___has_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz";
- sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796";
- };
- }
-
- {
- name = "hash_base___hash_base_3.0.4.tgz";
- path = fetchurl {
- name = "hash_base___hash_base_3.0.4.tgz";
- url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz";
- sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918";
- };
- }
-
- {
- name = "hash.js___hash.js_1.1.5.tgz";
- path = fetchurl {
- name = "hash.js___hash.js_1.1.5.tgz";
- url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz";
- sha1 = "e38ab4b85dfb1e0c40fe9265c0e9b54854c23812";
- };
- }
-
- {
- name = "hawk___hawk_3.1.3.tgz";
- path = fetchurl {
- name = "hawk___hawk_3.1.3.tgz";
- url = "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz";
- sha1 = "078444bd7c1640b0fe540d2c9b73d59678e8e1c4";
- };
- }
-
- {
- name = "hmac_drbg___hmac_drbg_1.0.1.tgz";
- path = fetchurl {
- name = "hmac_drbg___hmac_drbg_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz";
- sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1";
- };
- }
-
- {
- name = "hoek___hoek_2.16.3.tgz";
- path = fetchurl {
- name = "hoek___hoek_2.16.3.tgz";
- url = "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz";
- sha1 = "20bb7403d3cea398e91dc4710a8ff1b8274a25ed";
- };
- }
-
- {
- name = "home_or_tmp___home_or_tmp_2.0.0.tgz";
- path = fetchurl {
- name = "home_or_tmp___home_or_tmp_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz";
- sha1 = "e36c3f2d2cae7d746a857e38d18d5f32a7882db8";
- };
- }
-
- {
- name = "hosted_git_info___hosted_git_info_2.7.1.tgz";
- path = fetchurl {
- name = "hosted_git_info___hosted_git_info_2.7.1.tgz";
- url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz";
- sha1 = "97f236977bd6e125408930ff6de3eec6281ec047";
- };
- }
-
- {
- name = "hpack.js___hpack.js_2.1.6.tgz";
- path = fetchurl {
- name = "hpack.js___hpack.js_2.1.6.tgz";
- url = "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz";
- sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2";
- };
- }
-
- {
- name = "html_comment_regex___html_comment_regex_1.1.1.tgz";
- path = fetchurl {
- name = "html_comment_regex___html_comment_regex_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz";
- sha1 = "668b93776eaae55ebde8f3ad464b307a4963625e";
- };
- }
-
- {
- name = "html_entities___html_entities_1.2.1.tgz";
- path = fetchurl {
- name = "html_entities___html_entities_1.2.1.tgz";
- url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz";
- sha1 = "0df29351f0721163515dfb9e5543e5f6eed5162f";
- };
- }
-
- {
- name = "htmlparser2___htmlparser2_3.3.0.tgz";
- path = fetchurl {
- name = "htmlparser2___htmlparser2_3.3.0.tgz";
- url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz";
- sha1 = "cc70d05a59f6542e43f0e685c982e14c924a9efe";
- };
- }
-
- {
- name = "http_deceiver___http_deceiver_1.2.7.tgz";
- path = fetchurl {
- name = "http_deceiver___http_deceiver_1.2.7.tgz";
- url = "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz";
- sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87";
- };
- }
-
- {
- name = "http_errors___http_errors_1.6.2.tgz";
- path = fetchurl {
- name = "http_errors___http_errors_1.6.2.tgz";
- url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz";
- sha1 = "0a002cc85707192a7e7946ceedc11155f60ec736";
- };
- }
-
- {
- name = "http_errors___http_errors_1.6.3.tgz";
- path = fetchurl {
- name = "http_errors___http_errors_1.6.3.tgz";
- url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz";
- sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d";
- };
- }
-
- {
- name = "http_parser_js___http_parser_js_0.4.13.tgz";
- path = fetchurl {
- name = "http_parser_js___http_parser_js_0.4.13.tgz";
- url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz";
- sha1 = "3bd6d6fde6e3172c9334c3b33b6c193d80fe1137";
- };
- }
-
- {
- name = "http_proxy_middleware___http_proxy_middleware_0.17.4.tgz";
- path = fetchurl {
- name = "http_proxy_middleware___http_proxy_middleware_0.17.4.tgz";
- url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz";
- sha1 = "642e8848851d66f09d4f124912846dbaeb41b833";
- };
- }
-
- {
- name = "http_proxy___http_proxy_1.17.0.tgz";
- path = fetchurl {
- name = "http_proxy___http_proxy_1.17.0.tgz";
- url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz";
- sha1 = "7ad38494658f84605e2f6db4436df410f4e5be9a";
- };
- }
-
- {
- name = "http_signature___http_signature_1.1.1.tgz";
- path = fetchurl {
- name = "http_signature___http_signature_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz";
- sha1 = "df72e267066cd0ac67fb76adf8e134a8fbcf91bf";
- };
- }
-
- {
- name = "http_signature___http_signature_1.2.0.tgz";
- path = fetchurl {
- name = "http_signature___http_signature_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz";
- sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
- };
- }
-
- {
- name = "https_browserify___https_browserify_1.0.0.tgz";
- path = fetchurl {
- name = "https_browserify___https_browserify_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz";
- sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73";
- };
- }
-
- {
- name = "iconv_lite___iconv_lite_0.4.19.tgz";
- path = fetchurl {
- name = "iconv_lite___iconv_lite_0.4.19.tgz";
- url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz";
- sha1 = "f7468f60135f5e5dad3399c0a81be9a1603a082b";
- };
- }
-
- {
- name = "iconv_lite___iconv_lite_0.4.23.tgz";
- path = fetchurl {
- name = "iconv_lite___iconv_lite_0.4.23.tgz";
- url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz";
- sha1 = "297871f63be507adcfbfca715d0cd0eed84e9a63";
- };
- }
-
- {
- name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz";
- path = fetchurl {
- name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz";
- sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded";
- };
- }
-
- {
- name = "ieee754___ieee754_1.1.12.tgz";
- path = fetchurl {
- name = "ieee754___ieee754_1.1.12.tgz";
- url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz";
- sha1 = "50bf24e5b9c8bb98af4964c941cdb0918da7b60b";
- };
- }
-
- {
- name = "ignore_walk___ignore_walk_3.0.1.tgz";
- path = fetchurl {
- name = "ignore_walk___ignore_walk_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz";
- sha1 = "a83e62e7d272ac0e3b551aaa82831a19b69f82f8";
- };
- }
-
- {
- name = "import_local___import_local_1.0.0.tgz";
- path = fetchurl {
- name = "import_local___import_local_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz";
- sha1 = "5e4ffdc03f4fe6c009c6729beb29631c2f8227bc";
- };
- }
-
- {
- name = "in_publish___in_publish_2.0.0.tgz";
- path = fetchurl {
- name = "in_publish___in_publish_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz";
- sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51";
- };
- }
-
- {
- name = "indent_string___indent_string_2.1.0.tgz";
- path = fetchurl {
- name = "indent_string___indent_string_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz";
- sha1 = "8e2d48348742121b4a8218b7a137e9a52049dc80";
- };
- }
-
- {
- name = "indexes_of___indexes_of_1.0.1.tgz";
- path = fetchurl {
- name = "indexes_of___indexes_of_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz";
- sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
- };
- }
-
- {
- name = "indexof___indexof_0.0.1.tgz";
- path = fetchurl {
- name = "indexof___indexof_0.0.1.tgz";
- url = "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz";
- sha1 = "82dc336d232b9062179d05ab3293a66059fd435d";
- };
- }
-
- {
- name = "inflight___inflight_1.0.6.tgz";
- path = fetchurl {
- name = "inflight___inflight_1.0.6.tgz";
- url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz";
- sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
- };
- }
-
- {
- name = "inherits___inherits_2.0.3.tgz";
- path = fetchurl {
- name = "inherits___inherits_2.0.3.tgz";
- url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz";
- sha1 = "633c2c83e3da42a502f52466022480f4208261de";
- };
- }
-
- {
- name = "inherits___inherits_2.0.1.tgz";
- path = fetchurl {
- name = "inherits___inherits_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz";
- sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
- };
- }
-
- {
- name = "ini___ini_1.3.5.tgz";
- path = fetchurl {
- name = "ini___ini_1.3.5.tgz";
- url = "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz";
- sha1 = "eee25f56db1c9ec6085e0c22778083f596abf927";
- };
- }
-
- {
- name = "internal_ip___internal_ip_1.2.0.tgz";
- path = fetchurl {
- name = "internal_ip___internal_ip_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz";
- sha1 = "ae9fbf93b984878785d50a8de1b356956058cf5c";
- };
- }
-
- {
- name = "interpret___interpret_1.1.0.tgz";
- path = fetchurl {
- name = "interpret___interpret_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz";
- sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614";
- };
- }
-
- {
- name = "invariant___invariant_2.2.4.tgz";
- path = fetchurl {
- name = "invariant___invariant_2.2.4.tgz";
- url = "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz";
- sha1 = "610f3c92c9359ce1db616e538008d23ff35158e6";
- };
- }
-
- {
- name = "invert_kv___invert_kv_1.0.0.tgz";
- path = fetchurl {
- name = "invert_kv___invert_kv_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz";
- sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6";
- };
- }
-
- {
- name = "ip___ip_1.1.5.tgz";
- path = fetchurl {
- name = "ip___ip_1.1.5.tgz";
- url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz";
- sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a";
- };
- }
-
- {
- name = "ipaddr.js___ipaddr.js_1.8.0.tgz";
- path = fetchurl {
- name = "ipaddr.js___ipaddr.js_1.8.0.tgz";
- url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz";
- sha1 = "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e";
- };
- }
-
- {
- name = "is_absolute_url___is_absolute_url_2.1.0.tgz";
- path = fetchurl {
- name = "is_absolute_url___is_absolute_url_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz";
- sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6";
- };
- }
-
- {
- name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
- path = fetchurl {
- name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
- url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
- sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
- };
- }
-
- {
- name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
- path = fetchurl {
- name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
- sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656";
- };
- }
-
- {
- name = "is_arrayish___is_arrayish_0.2.1.tgz";
- path = fetchurl {
- name = "is_arrayish___is_arrayish_0.2.1.tgz";
- url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz";
- sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
- };
- }
-
- {
- name = "is_binary_path___is_binary_path_1.0.1.tgz";
- path = fetchurl {
- name = "is_binary_path___is_binary_path_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz";
- sha1 = "75f16642b480f187a711c814161fd3a4a7655898";
- };
- }
-
- {
- name = "is_buffer___is_buffer_1.1.6.tgz";
- path = fetchurl {
- name = "is_buffer___is_buffer_1.1.6.tgz";
- url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz";
- sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be";
- };
- }
-
- {
- name = "is_builtin_module___is_builtin_module_1.0.0.tgz";
- path = fetchurl {
- name = "is_builtin_module___is_builtin_module_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz";
- sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe";
- };
- }
-
- {
- name = "is_callable___is_callable_1.1.4.tgz";
- path = fetchurl {
- name = "is_callable___is_callable_1.1.4.tgz";
- url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz";
- sha1 = "1e1adf219e1eeb684d691f9d6a05ff0d30a24d75";
- };
- }
-
- {
- name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
- path = fetchurl {
- name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
- url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
- sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
- };
- }
-
- {
- name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
- path = fetchurl {
- name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
- sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7";
- };
- }
-
- {
- name = "is_date_object___is_date_object_1.0.1.tgz";
- path = fetchurl {
- name = "is_date_object___is_date_object_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz";
- sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16";
- };
- }
-
- {
- name = "is_descriptor___is_descriptor_0.1.6.tgz";
- path = fetchurl {
- name = "is_descriptor___is_descriptor_0.1.6.tgz";
- url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz";
- sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca";
- };
- }
-
- {
- name = "is_descriptor___is_descriptor_1.0.2.tgz";
- path = fetchurl {
- name = "is_descriptor___is_descriptor_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz";
- sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec";
- };
- }
-
- {
- name = "is_dotfile___is_dotfile_1.0.3.tgz";
- path = fetchurl {
- name = "is_dotfile___is_dotfile_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz";
- sha1 = "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1";
- };
- }
-
- {
- name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz";
- path = fetchurl {
- name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz";
- url = "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz";
- sha1 = "2238098fc221de0bcfa5d9eac4c45d638aa1c534";
- };
- }
-
- {
- name = "is_extendable___is_extendable_0.1.1.tgz";
- path = fetchurl {
- name = "is_extendable___is_extendable_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz";
- sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
- };
- }
-
- {
- name = "is_extendable___is_extendable_1.0.1.tgz";
- path = fetchurl {
- name = "is_extendable___is_extendable_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz";
- sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4";
- };
- }
-
- {
- name = "is_extglob___is_extglob_1.0.0.tgz";
- path = fetchurl {
- name = "is_extglob___is_extglob_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz";
- sha1 = "ac468177c4943405a092fc8f29760c6ffc6206c0";
- };
- }
-
- {
- name = "is_extglob___is_extglob_2.1.1.tgz";
- path = fetchurl {
- name = "is_extglob___is_extglob_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz";
- sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
- };
- }
-
- {
- name = "is_finite___is_finite_1.0.2.tgz";
- path = fetchurl {
- name = "is_finite___is_finite_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz";
- sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa";
- };
- }
-
- {
- name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
- path = fetchurl {
- name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
- sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
- };
- }
-
- {
- name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
- path = fetchurl {
- name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
- sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
- };
- }
-
- {
- name = "is_glob___is_glob_2.0.1.tgz";
- path = fetchurl {
- name = "is_glob___is_glob_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz";
- sha1 = "d096f926a3ded5600f3fdfd91198cb0888c2d863";
- };
- }
-
- {
- name = "is_glob___is_glob_3.1.0.tgz";
- path = fetchurl {
- name = "is_glob___is_glob_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz";
- sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a";
- };
- }
-
- {
- name = "is_glob___is_glob_4.0.0.tgz";
- path = fetchurl {
- name = "is_glob___is_glob_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz";
- sha1 = "9521c76845cc2610a85203ddf080a958c2ffabc0";
- };
- }
-
- {
- name = "is_number___is_number_2.1.0.tgz";
- path = fetchurl {
- name = "is_number___is_number_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz";
- sha1 = "01fcbbb393463a548f2f466cce16dece49db908f";
- };
- }
-
- {
- name = "is_number___is_number_3.0.0.tgz";
- path = fetchurl {
- name = "is_number___is_number_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz";
- sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
- };
- }
-
- {
- name = "is_number___is_number_4.0.0.tgz";
- path = fetchurl {
- name = "is_number___is_number_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz";
- sha1 = "0026e37f5454d73e356dfe6564699867c6a7f0ff";
- };
- }
-
- {
- name = "is_path_cwd___is_path_cwd_1.0.0.tgz";
- path = fetchurl {
- name = "is_path_cwd___is_path_cwd_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz";
- sha1 = "d225ec23132e89edd38fda767472e62e65f1106d";
- };
- }
-
- {
- name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz";
- path = fetchurl {
- name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz";
- sha1 = "5ac48b345ef675339bd6c7a48a912110b241cf52";
- };
- }
-
- {
- name = "is_path_inside___is_path_inside_1.0.1.tgz";
- path = fetchurl {
- name = "is_path_inside___is_path_inside_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz";
- sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036";
- };
- }
-
- {
- name = "is_plain_obj___is_plain_obj_1.1.0.tgz";
- path = fetchurl {
- name = "is_plain_obj___is_plain_obj_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
- sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
- };
- }
-
- {
- name = "is_plain_object___is_plain_object_2.0.4.tgz";
- path = fetchurl {
- name = "is_plain_object___is_plain_object_2.0.4.tgz";
- url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz";
- sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677";
- };
- }
-
- {
- name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz";
- path = fetchurl {
- name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz";
- sha1 = "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4";
- };
- }
-
- {
- name = "is_primitive___is_primitive_2.0.0.tgz";
- path = fetchurl {
- name = "is_primitive___is_primitive_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz";
- sha1 = "207bab91638499c07b2adf240a41a87210034575";
- };
- }
-
- {
- name = "is_regex___is_regex_1.0.4.tgz";
- path = fetchurl {
- name = "is_regex___is_regex_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz";
- sha1 = "5517489b547091b0930e095654ced25ee97e9491";
- };
- }
-
- {
- name = "is_stream___is_stream_1.1.0.tgz";
- path = fetchurl {
- name = "is_stream___is_stream_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz";
- sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
- };
- }
-
- {
- name = "is_svg___is_svg_2.1.0.tgz";
- path = fetchurl {
- name = "is_svg___is_svg_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz";
- sha1 = "cf61090da0d9efbcab8722deba6f032208dbb0e9";
- };
- }
-
- {
- name = "is_symbol___is_symbol_1.0.1.tgz";
- path = fetchurl {
- name = "is_symbol___is_symbol_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz";
- sha1 = "3cc59f00025194b6ab2e38dbae6689256b660572";
- };
- }
-
- {
- name = "is_typedarray___is_typedarray_1.0.0.tgz";
- path = fetchurl {
- name = "is_typedarray___is_typedarray_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz";
- sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
- };
- }
-
- {
- name = "is_utf8___is_utf8_0.2.1.tgz";
- path = fetchurl {
- name = "is_utf8___is_utf8_0.2.1.tgz";
- url = "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz";
- sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72";
- };
- }
-
- {
- name = "is_windows___is_windows_1.0.2.tgz";
- path = fetchurl {
- name = "is_windows___is_windows_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz";
- sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d";
- };
- }
-
- {
- name = "is_wsl___is_wsl_1.1.0.tgz";
- path = fetchurl {
- name = "is_wsl___is_wsl_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz";
- sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d";
- };
- }
-
- {
- name = "isarray___isarray_0.0.1.tgz";
- path = fetchurl {
- name = "isarray___isarray_0.0.1.tgz";
- url = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz";
- sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
- };
- }
-
- {
- name = "isarray___isarray_1.0.0.tgz";
- path = fetchurl {
- name = "isarray___isarray_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz";
- sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
- };
- }
-
- {
- name = "isexe___isexe_2.0.0.tgz";
- path = fetchurl {
- name = "isexe___isexe_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz";
- sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
- };
- }
-
- {
- name = "isobject___isobject_2.1.0.tgz";
- path = fetchurl {
- name = "isobject___isobject_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz";
- sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
- };
- }
-
- {
- name = "isobject___isobject_3.0.1.tgz";
- path = fetchurl {
- name = "isobject___isobject_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz";
- sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
- };
- }
-
- {
- name = "isstream___isstream_0.1.2.tgz";
- path = fetchurl {
- name = "isstream___isstream_0.1.2.tgz";
- url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz";
- sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
- };
- }
-
- {
- name = "jquery___jquery_3.3.1.tgz";
- path = fetchurl {
- name = "jquery___jquery_3.3.1.tgz";
- url = "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz";
- sha1 = "958ce29e81c9790f31be7792df5d4d95fc57fbca";
- };
- }
-
- {
- name = "js_base64___js_base64_2.4.8.tgz";
- path = fetchurl {
- name = "js_base64___js_base64_2.4.8.tgz";
- url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz";
- sha1 = "57a9b130888f956834aa40c5b165ba59c758f033";
- };
- }
-
- {
- name = "js_tokens___js_tokens_4.0.0.tgz";
- path = fetchurl {
- name = "js_tokens___js_tokens_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz";
- sha1 = "19203fb59991df98e3a287050d4647cdeaf32499";
- };
- }
-
- {
- name = "js_tokens___js_tokens_3.0.2.tgz";
- path = fetchurl {
- name = "js_tokens___js_tokens_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz";
- sha1 = "9866df395102130e38f7f996bceb65443209c25b";
- };
- }
-
- {
- name = "js_yaml___js_yaml_3.7.0.tgz";
- path = fetchurl {
- name = "js_yaml___js_yaml_3.7.0.tgz";
- url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz";
- sha1 = "5c967ddd837a9bfdca5f2de84253abe8a1c03b80";
- };
- }
-
- {
- name = "jsbn___jsbn_0.1.1.tgz";
- path = fetchurl {
- name = "jsbn___jsbn_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz";
- sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
- };
- }
-
- {
- name = "jsesc___jsesc_1.3.0.tgz";
- path = fetchurl {
- name = "jsesc___jsesc_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz";
- sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b";
- };
- }
-
- {
- name = "jsesc___jsesc_0.5.0.tgz";
- path = fetchurl {
- name = "jsesc___jsesc_0.5.0.tgz";
- url = "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz";
- sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
- };
- }
-
- {
- name = "json_loader___json_loader_0.5.7.tgz";
- path = fetchurl {
- name = "json_loader___json_loader_0.5.7.tgz";
- url = "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz";
- sha1 = "dca14a70235ff82f0ac9a3abeb60d337a365185d";
- };
- }
-
- {
- name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz";
- path = fetchurl {
- name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz";
- url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
- sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
- };
- }
-
- {
- name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
- path = fetchurl {
- name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
- url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
- sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660";
- };
- }
-
- {
- name = "json_schema___json_schema_0.2.3.tgz";
- path = fetchurl {
- name = "json_schema___json_schema_0.2.3.tgz";
- url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz";
- sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
- };
- }
-
- {
- name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz";
- path = fetchurl {
- name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz";
- sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af";
- };
- }
-
- {
- name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz";
- path = fetchurl {
- name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz";
- url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
- sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
- };
- }
-
- {
- name = "json3___json3_3.3.2.tgz";
- path = fetchurl {
- name = "json3___json3_3.3.2.tgz";
- url = "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz";
- sha1 = "3c0434743df93e2f5c42aee7b19bcb483575f4e1";
- };
- }
-
- {
- name = "json5___json5_0.5.1.tgz";
- path = fetchurl {
- name = "json5___json5_0.5.1.tgz";
- url = "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz";
- sha1 = "1eade7acc012034ad84e2396767ead9fa5495821";
- };
- }
-
- {
- name = "jsonfile___jsonfile_2.4.0.tgz";
- path = fetchurl {
- name = "jsonfile___jsonfile_2.4.0.tgz";
- url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz";
- sha1 = "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8";
- };
- }
-
- {
- name = "jsonify___jsonify_0.0.0.tgz";
- path = fetchurl {
- name = "jsonify___jsonify_0.0.0.tgz";
- url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz";
- sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
- };
- }
-
- {
- name = "jsprim___jsprim_1.4.1.tgz";
- path = fetchurl {
- name = "jsprim___jsprim_1.4.1.tgz";
- url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz";
- sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
- };
- }
-
- {
- name = "killable___killable_1.0.0.tgz";
- path = fetchurl {
- name = "killable___killable_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz";
- sha1 = "da8b84bd47de5395878f95d64d02f2449fe05e6b";
- };
- }
-
- {
- name = "kind_of___kind_of_3.2.2.tgz";
- path = fetchurl {
- name = "kind_of___kind_of_3.2.2.tgz";
- url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz";
- sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
- };
- }
-
- {
- name = "kind_of___kind_of_4.0.0.tgz";
- path = fetchurl {
- name = "kind_of___kind_of_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz";
- sha1 = "20813df3d712928b207378691a45066fae72dd57";
- };
- }
-
- {
- name = "kind_of___kind_of_5.1.0.tgz";
- path = fetchurl {
- name = "kind_of___kind_of_5.1.0.tgz";
- url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz";
- sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d";
- };
- }
-
- {
- name = "kind_of___kind_of_6.0.2.tgz";
- path = fetchurl {
- name = "kind_of___kind_of_6.0.2.tgz";
- url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz";
- sha1 = "01146b36a6218e64e58f3a8d66de5d7fc6f6d051";
- };
- }
-
- {
- name = "lazy_cache___lazy_cache_1.0.4.tgz";
- path = fetchurl {
- name = "lazy_cache___lazy_cache_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz";
- sha1 = "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e";
- };
- }
-
- {
- name = "lcid___lcid_1.0.0.tgz";
- path = fetchurl {
- name = "lcid___lcid_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz";
- sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835";
- };
- }
-
- {
- name = "load_json_file___load_json_file_1.1.0.tgz";
- path = fetchurl {
- name = "load_json_file___load_json_file_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz";
- sha1 = "956905708d58b4bab4c2261b04f59f31c99374c0";
- };
- }
-
- {
- name = "load_json_file___load_json_file_2.0.0.tgz";
- path = fetchurl {
- name = "load_json_file___load_json_file_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz";
- sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8";
- };
- }
-
- {
- name = "loader_runner___loader_runner_2.3.0.tgz";
- path = fetchurl {
- name = "loader_runner___loader_runner_2.3.0.tgz";
- url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz";
- sha1 = "f482aea82d543e07921700d5a46ef26fdac6b8a2";
- };
- }
-
- {
- name = "loader_utils___loader_utils_1.1.0.tgz";
- path = fetchurl {
- name = "loader_utils___loader_utils_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz";
- sha1 = "c98aef488bcceda2ffb5e2de646d6a754429f5cd";
- };
- }
-
- {
- name = "locate_path___locate_path_2.0.0.tgz";
- path = fetchurl {
- name = "locate_path___locate_path_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz";
- sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
- };
- }
-
- {
- name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz";
- path = fetchurl {
- name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz";
- url = "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz";
- sha1 = "8c38a099500f215ad09e59f1722fd0c52bfe0a4e";
- };
- }
-
- {
- name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz";
- path = fetchurl {
- name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz";
- sha1 = "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36";
- };
- }
-
- {
- name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz";
- path = fetchurl {
- name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz";
- sha1 = "e531c27644cf8b57a99e17ed95b35c748789392e";
- };
- }
-
- {
- name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz";
- path = fetchurl {
- name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz";
- url = "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz";
- sha1 = "838a5bae2fdaca63ac22dee8e19fa4e6d6970b11";
- };
- }
-
- {
- name = "lodash._getnative___lodash._getnative_3.9.1.tgz";
- path = fetchurl {
- name = "lodash._getnative___lodash._getnative_3.9.1.tgz";
- url = "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz";
- sha1 = "570bc7dede46d61cdcde687d65d3eecbaa3aaff5";
- };
- }
-
- {
- name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz";
- path = fetchurl {
- name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz";
- url = "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz";
- sha1 = "5203ad7ba425fae842460e696db9cf3e6aac057c";
- };
- }
-
- {
- name = "lodash.assign___lodash.assign_3.2.0.tgz";
- path = fetchurl {
- name = "lodash.assign___lodash.assign_3.2.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz";
- sha1 = "3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa";
- };
- }
-
- {
- name = "lodash.assign___lodash.assign_4.2.0.tgz";
- path = fetchurl {
- name = "lodash.assign___lodash.assign_4.2.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz";
- sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7";
- };
- }
-
- {
- name = "lodash.camelcase___lodash.camelcase_4.3.0.tgz";
- path = fetchurl {
- name = "lodash.camelcase___lodash.camelcase_4.3.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz";
- sha1 = "b28aa6288a2b9fc651035c7711f65ab6190331a6";
- };
- }
-
- {
- name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz";
- path = fetchurl {
- name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz";
- sha1 = "e23f3f9c4f8fbdde872529c1071857a086e5ccef";
- };
- }
-
- {
- name = "lodash.debounce___lodash.debounce_4.0.8.tgz";
- path = fetchurl {
- name = "lodash.debounce___lodash.debounce_4.0.8.tgz";
- url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz";
- sha1 = "82d79bff30a67c4005ffd5e2515300ad9ca4d7af";
- };
- }
-
- {
- name = "lodash.defaults___lodash.defaults_3.1.2.tgz";
- path = fetchurl {
- name = "lodash.defaults___lodash.defaults_3.1.2.tgz";
- url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz";
- sha1 = "c7308b18dbf8bc9372d701a73493c61192bd2e2c";
- };
- }
-
- {
- name = "lodash.defaults___lodash.defaults_4.2.0.tgz";
- path = fetchurl {
- name = "lodash.defaults___lodash.defaults_4.2.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz";
- sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c";
- };
- }
-
- {
- name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz";
- path = fetchurl {
- name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz";
- sha1 = "2f573d85c6a24289ff00663b491c1d338ff3458a";
- };
- }
-
- {
- name = "lodash.isarray___lodash.isarray_3.0.4.tgz";
- path = fetchurl {
- name = "lodash.isarray___lodash.isarray_3.0.4.tgz";
- url = "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz";
- sha1 = "79e4eb88c36a8122af86f844aa9bcd851b5fbb55";
- };
- }
-
- {
- name = "lodash.keys___lodash.keys_3.1.2.tgz";
- path = fetchurl {
- name = "lodash.keys___lodash.keys_3.1.2.tgz";
- url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz";
- sha1 = "4dbc0472b156be50a0b286855d1bd0b0c656098a";
- };
- }
-
- {
- name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
- path = fetchurl {
- name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
- url = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
- sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
- };
- }
-
- {
- name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz";
- path = fetchurl {
- name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz";
- url = "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz";
- sha1 = "639057e726c3afbdb3e7d42741caa8d6e4335927";
- };
- }
-
- {
- name = "lodash.restparam___lodash.restparam_3.6.1.tgz";
- path = fetchurl {
- name = "lodash.restparam___lodash.restparam_3.6.1.tgz";
- url = "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz";
- sha1 = "936a4e309ef330a7645ed4145986c85ae5b20805";
- };
- }
-
- {
- name = "lodash.tail___lodash.tail_4.1.1.tgz";
- path = fetchurl {
- name = "lodash.tail___lodash.tail_4.1.1.tgz";
- url = "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz";
- sha1 = "d2333a36d9e7717c8ad2f7cacafec7c32b444664";
- };
- }
-
- {
- name = "lodash.uniq___lodash.uniq_4.5.0.tgz";
- path = fetchurl {
- name = "lodash.uniq___lodash.uniq_4.5.0.tgz";
- url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
- sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
- };
- }
-
- {
- name = "lodash___lodash_4.17.10.tgz";
- path = fetchurl {
- name = "lodash___lodash_4.17.10.tgz";
- url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz";
- sha1 = "1b7793cf7259ea38fb3661d4d38b3260af8ae4e7";
- };
- }
-
- {
- name = "loglevel___loglevel_1.6.1.tgz";
- path = fetchurl {
- name = "loglevel___loglevel_1.6.1.tgz";
- url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz";
- sha1 = "e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa";
- };
- }
-
- {
- name = "longest___longest_1.0.1.tgz";
- path = fetchurl {
- name = "longest___longest_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz";
- sha1 = "30a0b2da38f73770e8294a0d22e6625ed77d0097";
- };
- }
-
- {
- name = "loose_envify___loose_envify_1.4.0.tgz";
- path = fetchurl {
- name = "loose_envify___loose_envify_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz";
- sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf";
- };
- }
-
- {
- name = "loud_rejection___loud_rejection_1.6.0.tgz";
- path = fetchurl {
- name = "loud_rejection___loud_rejection_1.6.0.tgz";
- url = "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz";
- sha1 = "5b46f80147edee578870f086d04821cf998e551f";
- };
- }
-
- {
- name = "lru_cache___lru_cache_4.1.3.tgz";
- path = fetchurl {
- name = "lru_cache___lru_cache_4.1.3.tgz";
- url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz";
- sha1 = "a1175cf3496dfc8436c156c334b4955992bce69c";
- };
- }
-
- {
- name = "make_dir___make_dir_1.3.0.tgz";
- path = fetchurl {
- name = "make_dir___make_dir_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz";
- sha1 = "79c1033b80515bd6d24ec9933e860ca75ee27f0c";
- };
- }
-
- {
- name = "map_cache___map_cache_0.2.2.tgz";
- path = fetchurl {
- name = "map_cache___map_cache_0.2.2.tgz";
- url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz";
- sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
- };
- }
-
- {
- name = "map_obj___map_obj_1.0.1.tgz";
- path = fetchurl {
- name = "map_obj___map_obj_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz";
- sha1 = "d933ceb9205d82bdcf4886f6742bdc2b4dea146d";
- };
- }
-
- {
- name = "map_visit___map_visit_1.0.0.tgz";
- path = fetchurl {
- name = "map_visit___map_visit_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz";
- sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
- };
- }
-
- {
- name = "math_expression_evaluator___math_expression_evaluator_1.2.17.tgz";
- path = fetchurl {
- name = "math_expression_evaluator___math_expression_evaluator_1.2.17.tgz";
- url = "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz";
- sha1 = "de819fdbcd84dccd8fae59c6aeb79615b9d266ac";
- };
- }
-
- {
- name = "math_random___math_random_1.0.1.tgz";
- path = fetchurl {
- name = "math_random___math_random_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz";
- sha1 = "8b3aac588b8a66e4975e3cdea67f7bb329601fac";
- };
- }
-
- {
- name = "md5.js___md5.js_1.3.4.tgz";
- path = fetchurl {
- name = "md5.js___md5.js_1.3.4.tgz";
- url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz";
- sha1 = "e9bdbde94a20a5ac18b04340fc5764d5b09d901d";
- };
- }
-
- {
- name = "media_typer___media_typer_0.3.0.tgz";
- path = fetchurl {
- name = "media_typer___media_typer_0.3.0.tgz";
- url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz";
- sha1 = "8710d7af0aa626f8fffa1ce00168545263255748";
- };
- }
-
- {
- name = "mem___mem_1.1.0.tgz";
- path = fetchurl {
- name = "mem___mem_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz";
- sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76";
- };
- }
-
- {
- name = "memory_fs___memory_fs_0.4.1.tgz";
- path = fetchurl {
- name = "memory_fs___memory_fs_0.4.1.tgz";
- url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz";
- sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552";
- };
- }
-
- {
- name = "meow___meow_3.7.0.tgz";
- path = fetchurl {
- name = "meow___meow_3.7.0.tgz";
- url = "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz";
- sha1 = "72cb668b425228290abbfa856892587308a801fb";
- };
- }
-
- {
- name = "merge_descriptors___merge_descriptors_1.0.1.tgz";
- path = fetchurl {
- name = "merge_descriptors___merge_descriptors_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz";
- sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61";
- };
- }
-
- {
- name = "methods___methods_1.1.2.tgz";
- path = fetchurl {
- name = "methods___methods_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz";
- sha1 = "5529a4d67654134edcc5266656835b0f851afcee";
- };
- }
-
- {
- name = "micromatch___micromatch_2.3.11.tgz";
- path = fetchurl {
- name = "micromatch___micromatch_2.3.11.tgz";
- url = "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz";
- sha1 = "86677c97d1720b363431d04d0d15293bd38c1565";
- };
- }
-
- {
- name = "micromatch___micromatch_3.1.10.tgz";
- path = fetchurl {
- name = "micromatch___micromatch_3.1.10.tgz";
- url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz";
- sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23";
- };
- }
-
- {
- name = "miller_rabin___miller_rabin_4.0.1.tgz";
- path = fetchurl {
- name = "miller_rabin___miller_rabin_4.0.1.tgz";
- url = "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz";
- sha1 = "f080351c865b0dc562a8462966daa53543c78a4d";
- };
- }
-
- {
- name = "mime_db___mime_db_1.35.0.tgz";
- path = fetchurl {
- name = "mime_db___mime_db_1.35.0.tgz";
- url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz";
- sha1 = "0569d657466491283709663ad379a99b90d9ab47";
- };
- }
-
- {
- name = "mime_types___mime_types_2.1.19.tgz";
- path = fetchurl {
- name = "mime_types___mime_types_2.1.19.tgz";
- url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz";
- sha1 = "71e464537a7ef81c15f2db9d97e913fc0ff606f0";
- };
- }
-
- {
- name = "mime___mime_1.4.1.tgz";
- path = fetchurl {
- name = "mime___mime_1.4.1.tgz";
- url = "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz";
- sha1 = "121f9ebc49e3766f311a76e1fa1c8003c4b03aa6";
- };
- }
-
- {
- name = "mime___mime_1.6.0.tgz";
- path = fetchurl {
- name = "mime___mime_1.6.0.tgz";
- url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz";
- sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1";
- };
- }
-
- {
- name = "mimic_fn___mimic_fn_1.2.0.tgz";
- path = fetchurl {
- name = "mimic_fn___mimic_fn_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz";
- sha1 = "820c86a39334640e99516928bd03fca88057d022";
- };
- }
-
- {
- name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz";
- path = fetchurl {
- name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
- sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7";
- };
- }
-
- {
- name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz";
- path = fetchurl {
- name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz";
- sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a";
- };
- }
-
- {
- name = "minimatch___minimatch_3.0.4.tgz";
- path = fetchurl {
- name = "minimatch___minimatch_3.0.4.tgz";
- url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz";
- sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
- };
- }
-
- {
- name = "minimist___minimist_0.0.8.tgz";
- path = fetchurl {
- name = "minimist___minimist_0.0.8.tgz";
- url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz";
- sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
- };
- }
-
- {
- name = "minimist___minimist_1.2.0.tgz";
- path = fetchurl {
- name = "minimist___minimist_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz";
- sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
- };
- }
-
- {
- name = "minipass___minipass_2.3.3.tgz";
- path = fetchurl {
- name = "minipass___minipass_2.3.3.tgz";
- url = "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz";
- sha1 = "a7dcc8b7b833f5d368759cce544dccb55f50f233";
- };
- }
-
- {
- name = "minizlib___minizlib_1.1.0.tgz";
- path = fetchurl {
- name = "minizlib___minizlib_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz";
- sha1 = "11e13658ce46bc3a70a267aac58359d1e0c29ceb";
- };
- }
-
- {
- name = "mixin_deep___mixin_deep_1.3.1.tgz";
- path = fetchurl {
- name = "mixin_deep___mixin_deep_1.3.1.tgz";
- url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz";
- sha1 = "a49e7268dce1a0d9698e45326c5626df3543d0fe";
- };
- }
-
- {
- name = "mixin_object___mixin_object_2.0.1.tgz";
- path = fetchurl {
- name = "mixin_object___mixin_object_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz";
- sha1 = "4fb949441dab182540f1fe035ba60e1947a5e57e";
- };
- }
-
- {
- name = "mkdirp___mkdirp_0.5.1.tgz";
- path = fetchurl {
- name = "mkdirp___mkdirp_0.5.1.tgz";
- url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz";
- sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
- };
- }
-
- {
- name = "ms___ms_2.0.0.tgz";
- path = fetchurl {
- name = "ms___ms_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz";
- sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
- };
- }
-
- {
- name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz";
- path = fetchurl {
- name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz";
- sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901";
- };
- }
-
- {
- name = "multicast_dns___multicast_dns_6.2.3.tgz";
- path = fetchurl {
- name = "multicast_dns___multicast_dns_6.2.3.tgz";
- url = "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz";
- sha1 = "a0ec7bd9055c4282f790c3c82f4e28db3b31b229";
- };
- }
-
- {
- name = "nan___nan_2.10.0.tgz";
- path = fetchurl {
- name = "nan___nan_2.10.0.tgz";
- url = "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz";
- sha1 = "96d0cd610ebd58d4b4de9cc0c6828cda99c7548f";
- };
- }
-
- {
- name = "nanomatch___nanomatch_1.2.13.tgz";
- path = fetchurl {
- name = "nanomatch___nanomatch_1.2.13.tgz";
- url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz";
- sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119";
- };
- }
-
- {
- name = "needle___needle_2.2.1.tgz";
- path = fetchurl {
- name = "needle___needle_2.2.1.tgz";
- url = "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz";
- sha1 = "b5e325bd3aae8c2678902fa296f729455d1d3a7d";
- };
- }
-
- {
- name = "negotiator___negotiator_0.6.1.tgz";
- path = fetchurl {
- name = "negotiator___negotiator_0.6.1.tgz";
- url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz";
- sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9";
- };
- }
-
- {
- name = "neo_async___neo_async_2.5.1.tgz";
- path = fetchurl {
- name = "neo_async___neo_async_2.5.1.tgz";
- url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz";
- sha1 = "acb909e327b1e87ec9ef15f41b8a269512ad41ee";
- };
- }
-
- {
- name = "next_tick___next_tick_1.0.0.tgz";
- path = fetchurl {
- name = "next_tick___next_tick_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz";
- sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c";
- };
- }
-
- {
- name = "node_forge___node_forge_0.7.5.tgz";
- path = fetchurl {
- name = "node_forge___node_forge_0.7.5.tgz";
- url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz";
- sha1 = "6c152c345ce11c52f465c2abd957e8639cd674df";
- };
- }
-
- {
- name = "node_gyp___node_gyp_3.7.0.tgz";
- path = fetchurl {
- name = "node_gyp___node_gyp_3.7.0.tgz";
- url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz";
- sha1 = "789478e8f6c45e277aa014f3e28f958f286f9203";
- };
- }
-
- {
- name = "node_libs_browser___node_libs_browser_2.1.0.tgz";
- path = fetchurl {
- name = "node_libs_browser___node_libs_browser_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz";
- sha1 = "5f94263d404f6e44767d726901fff05478d600df";
- };
- }
-
- {
- name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz";
- path = fetchurl {
- name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz";
- url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz";
- sha1 = "3070040716afdc778747b61b6887bf78880b80fc";
- };
- }
-
- {
- name = "node_sass___node_sass_4.9.2.tgz";
- path = fetchurl {
- name = "node_sass___node_sass_4.9.2.tgz";
- url = "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.2.tgz";
- sha1 = "5e63fe6bd0f2ae3ac9d6c14ede8620e2b8bdb437";
- };
- }
-
- {
- name = "nopt___nopt_3.0.6.tgz";
- path = fetchurl {
- name = "nopt___nopt_3.0.6.tgz";
- url = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz";
- sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
- };
- }
-
- {
- name = "nopt___nopt_4.0.1.tgz";
- path = fetchurl {
- name = "nopt___nopt_4.0.1.tgz";
- url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz";
- sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d";
- };
- }
-
- {
- name = "normalize_package_data___normalize_package_data_2.4.0.tgz";
- path = fetchurl {
- name = "normalize_package_data___normalize_package_data_2.4.0.tgz";
- url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz";
- sha1 = "12f95a307d58352075a04907b84ac8be98ac012f";
- };
- }
-
- {
- name = "normalize_path___normalize_path_2.1.1.tgz";
- path = fetchurl {
- name = "normalize_path___normalize_path_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz";
- sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9";
- };
- }
-
- {
- name = "normalize_range___normalize_range_0.1.2.tgz";
- path = fetchurl {
- name = "normalize_range___normalize_range_0.1.2.tgz";
- url = "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz";
- sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942";
- };
- }
-
- {
- name = "normalize_url___normalize_url_1.9.1.tgz";
- path = fetchurl {
- name = "normalize_url___normalize_url_1.9.1.tgz";
- url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz";
- sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c";
- };
- }
-
- {
- name = "npm_bundled___npm_bundled_1.0.3.tgz";
- path = fetchurl {
- name = "npm_bundled___npm_bundled_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz";
- sha1 = "7e71703d973af3370a9591bafe3a63aca0be2308";
- };
- }
-
- {
- name = "npm_packlist___npm_packlist_1.1.11.tgz";
- path = fetchurl {
- name = "npm_packlist___npm_packlist_1.1.11.tgz";
- url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz";
- sha1 = "84e8c683cbe7867d34b1d357d893ce29e28a02de";
- };
- }
-
- {
- name = "npm_run_path___npm_run_path_2.0.2.tgz";
- path = fetchurl {
- name = "npm_run_path___npm_run_path_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz";
- sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
- };
- }
-
- {
- name = "npmlog___npmlog_4.1.2.tgz";
- path = fetchurl {
- name = "npmlog___npmlog_4.1.2.tgz";
- url = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz";
- sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b";
- };
- }
-
- {
- name = "nth_check___nth_check_1.0.1.tgz";
- path = fetchurl {
- name = "nth_check___nth_check_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz";
- sha1 = "9929acdf628fc2c41098deab82ac580cf149aae4";
- };
- }
-
- {
- name = "num2fraction___num2fraction_1.2.2.tgz";
- path = fetchurl {
- name = "num2fraction___num2fraction_1.2.2.tgz";
- url = "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz";
- sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede";
- };
- }
-
- {
- name = "number_is_nan___number_is_nan_1.0.1.tgz";
- path = fetchurl {
- name = "number_is_nan___number_is_nan_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz";
- sha1 = "097b602b53422a522c1afb8790318336941a011d";
- };
- }
-
- {
- name = "oauth_sign___oauth_sign_0.8.2.tgz";
- path = fetchurl {
- name = "oauth_sign___oauth_sign_0.8.2.tgz";
- url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz";
- sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43";
- };
- }
-
- {
- name = "object_assign___object_assign_4.1.1.tgz";
- path = fetchurl {
- name = "object_assign___object_assign_4.1.1.tgz";
- url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz";
- sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
- };
- }
-
- {
- name = "object_copy___object_copy_0.1.0.tgz";
- path = fetchurl {
- name = "object_copy___object_copy_0.1.0.tgz";
- url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz";
- sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
- };
- }
-
- {
- name = "object_keys___object_keys_1.0.12.tgz";
- path = fetchurl {
- name = "object_keys___object_keys_1.0.12.tgz";
- url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz";
- sha1 = "09c53855377575310cca62f55bb334abff7b3ed2";
- };
- }
-
- {
- name = "object_path___object_path_0.9.2.tgz";
- path = fetchurl {
- name = "object_path___object_path_0.9.2.tgz";
- url = "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz";
- sha1 = "0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5";
- };
- }
-
- {
- name = "object_visit___object_visit_1.0.1.tgz";
- path = fetchurl {
- name = "object_visit___object_visit_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz";
- sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
- };
- }
-
- {
- name = "object.omit___object.omit_2.0.1.tgz";
- path = fetchurl {
- name = "object.omit___object.omit_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz";
- sha1 = "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa";
- };
- }
-
- {
- name = "object.pick___object.pick_1.3.0.tgz";
- path = fetchurl {
- name = "object.pick___object.pick_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz";
- sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
- };
- }
-
- {
- name = "obuf___obuf_1.1.2.tgz";
- path = fetchurl {
- name = "obuf___obuf_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz";
- sha1 = "09bea3343d41859ebd446292d11c9d4db619084e";
- };
- }
-
- {
- name = "on_finished___on_finished_2.3.0.tgz";
- path = fetchurl {
- name = "on_finished___on_finished_2.3.0.tgz";
- url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz";
- sha1 = "20f1336481b083cd75337992a16971aa2d906947";
- };
- }
-
- {
- name = "on_headers___on_headers_1.0.1.tgz";
- path = fetchurl {
- name = "on_headers___on_headers_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz";
- sha1 = "928f5d0f470d49342651ea6794b0857c100693f7";
- };
- }
-
- {
- name = "once___once_1.4.0.tgz";
- path = fetchurl {
- name = "once___once_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz";
- sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
- };
- }
-
- {
- name = "open_iconic___open_iconic_1.1.1.tgz";
- path = fetchurl {
- name = "open_iconic___open_iconic_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/open-iconic/-/open-iconic-1.1.1.tgz";
- sha1 = "9dcfc8c7cd3c61cdb4a236b1a347894c97adc0c6";
- };
- }
-
- {
- name = "opn___opn_5.3.0.tgz";
- path = fetchurl {
- name = "opn___opn_5.3.0.tgz";
- url = "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz";
- sha1 = "64871565c863875f052cfdf53d3e3cb5adb53b1c";
- };
- }
-
- {
- name = "original___original_1.0.1.tgz";
- path = fetchurl {
- name = "original___original_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz";
- sha1 = "b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190";
- };
- }
-
- {
- name = "os_browserify___os_browserify_0.3.0.tgz";
- path = fetchurl {
- name = "os_browserify___os_browserify_0.3.0.tgz";
- url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz";
- sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27";
- };
- }
-
- {
- name = "os_homedir___os_homedir_1.0.2.tgz";
- path = fetchurl {
- name = "os_homedir___os_homedir_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz";
- sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
- };
- }
-
- {
- name = "os_locale___os_locale_1.4.0.tgz";
- path = fetchurl {
- name = "os_locale___os_locale_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz";
- sha1 = "20f9f17ae29ed345e8bde583b13d2009803c14d9";
- };
- }
-
- {
- name = "os_locale___os_locale_2.1.0.tgz";
- path = fetchurl {
- name = "os_locale___os_locale_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz";
- sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2";
- };
- }
-
- {
- name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
- path = fetchurl {
- name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
- sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
- };
- }
-
- {
- name = "osenv___osenv_0.1.5.tgz";
- path = fetchurl {
- name = "osenv___osenv_0.1.5.tgz";
- url = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz";
- sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410";
- };
- }
-
- {
- name = "p_finally___p_finally_1.0.0.tgz";
- path = fetchurl {
- name = "p_finally___p_finally_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz";
- sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
- };
- }
-
- {
- name = "p_limit___p_limit_1.3.0.tgz";
- path = fetchurl {
- name = "p_limit___p_limit_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz";
- sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8";
- };
- }
-
- {
- name = "p_locate___p_locate_2.0.0.tgz";
- path = fetchurl {
- name = "p_locate___p_locate_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz";
- sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
- };
- }
-
- {
- name = "p_map___p_map_1.2.0.tgz";
- path = fetchurl {
- name = "p_map___p_map_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz";
- sha1 = "e4e94f311eabbc8633a1e79908165fca26241b6b";
- };
- }
-
- {
- name = "p_try___p_try_1.0.0.tgz";
- path = fetchurl {
- name = "p_try___p_try_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz";
- sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
- };
- }
-
- {
- name = "pako___pako_1.0.6.tgz";
- path = fetchurl {
- name = "pako___pako_1.0.6.tgz";
- url = "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz";
- sha1 = "0101211baa70c4bca4a0f63f2206e97b7dfaf258";
- };
- }
-
- {
- name = "parse_asn1___parse_asn1_5.1.1.tgz";
- path = fetchurl {
- name = "parse_asn1___parse_asn1_5.1.1.tgz";
- url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz";
- sha1 = "f6bf293818332bd0dab54efb16087724745e6ca8";
- };
- }
-
- {
- name = "parse_glob___parse_glob_3.0.4.tgz";
- path = fetchurl {
- name = "parse_glob___parse_glob_3.0.4.tgz";
- url = "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz";
- sha1 = "b2c376cfb11f35513badd173ef0bb6e3a388391c";
- };
- }
-
- {
- name = "parse_json___parse_json_2.2.0.tgz";
- path = fetchurl {
- name = "parse_json___parse_json_2.2.0.tgz";
- url = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz";
- sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
- };
- }
-
- {
- name = "parseurl___parseurl_1.3.2.tgz";
- path = fetchurl {
- name = "parseurl___parseurl_1.3.2.tgz";
- url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz";
- sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3";
- };
- }
-
- {
- name = "pascalcase___pascalcase_0.1.1.tgz";
- path = fetchurl {
- name = "pascalcase___pascalcase_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz";
- sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
- };
- }
-
- {
- name = "path_browserify___path_browserify_0.0.0.tgz";
- path = fetchurl {
- name = "path_browserify___path_browserify_0.0.0.tgz";
- url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz";
- sha1 = "a0b870729aae214005b7d5032ec2cbbb0fb4451a";
- };
- }
-
- {
- name = "path_dirname___path_dirname_1.0.2.tgz";
- path = fetchurl {
- name = "path_dirname___path_dirname_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz";
- sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0";
- };
- }
-
- {
- name = "path_exists___path_exists_2.1.0.tgz";
- path = fetchurl {
- name = "path_exists___path_exists_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz";
- sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b";
- };
- }
-
- {
- name = "path_exists___path_exists_3.0.0.tgz";
- path = fetchurl {
- name = "path_exists___path_exists_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz";
- sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
- };
- }
-
- {
- name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
- path = fetchurl {
- name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
- sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
- };
- }
-
- {
- name = "path_is_inside___path_is_inside_1.0.2.tgz";
- path = fetchurl {
- name = "path_is_inside___path_is_inside_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz";
- sha1 = "365417dede44430d1c11af61027facf074bdfc53";
- };
- }
-
- {
- name = "path_key___path_key_2.0.1.tgz";
- path = fetchurl {
- name = "path_key___path_key_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz";
- sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
- };
- }
-
- {
- name = "path_to_regexp___path_to_regexp_0.1.7.tgz";
- path = fetchurl {
- name = "path_to_regexp___path_to_regexp_0.1.7.tgz";
- url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz";
- sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c";
- };
- }
-
- {
- name = "path_type___path_type_1.1.0.tgz";
- path = fetchurl {
- name = "path_type___path_type_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz";
- sha1 = "59c44f7ee491da704da415da5a4070ba4f8fe441";
- };
- }
-
- {
- name = "path_type___path_type_2.0.0.tgz";
- path = fetchurl {
- name = "path_type___path_type_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz";
- sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73";
- };
- }
-
- {
- name = "pbkdf2___pbkdf2_3.0.16.tgz";
- path = fetchurl {
- name = "pbkdf2___pbkdf2_3.0.16.tgz";
- url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz";
- sha1 = "7404208ec6b01b62d85bf83853a8064f8d9c2a5c";
- };
- }
-
- {
- name = "performance_now___performance_now_0.2.0.tgz";
- path = fetchurl {
- name = "performance_now___performance_now_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz";
- sha1 = "33ef30c5c77d4ea21c5a53869d91b56d8f2555e5";
- };
- }
-
- {
- name = "performance_now___performance_now_2.1.0.tgz";
- path = fetchurl {
- name = "performance_now___performance_now_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz";
- sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
- };
- }
-
- {
- name = "pify___pify_2.3.0.tgz";
- path = fetchurl {
- name = "pify___pify_2.3.0.tgz";
- url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz";
- sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
- };
- }
-
- {
- name = "pify___pify_3.0.0.tgz";
- path = fetchurl {
- name = "pify___pify_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz";
- sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176";
- };
- }
-
- {
- name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
- path = fetchurl {
- name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
- sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
- };
- }
-
- {
- name = "pinkie___pinkie_2.0.4.tgz";
- path = fetchurl {
- name = "pinkie___pinkie_2.0.4.tgz";
- url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz";
- sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
- };
- }
-
- {
- name = "pkg_dir___pkg_dir_2.0.0.tgz";
- path = fetchurl {
- name = "pkg_dir___pkg_dir_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz";
- sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b";
- };
- }
-
- {
- name = "pkg_up___pkg_up_1.0.0.tgz";
- path = fetchurl {
- name = "pkg_up___pkg_up_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz";
- sha1 = "3e08fb461525c4421624a33b9f7e6d0af5b05a26";
- };
- }
-
- {
- name = "popper.js___popper.js_1.14.4.tgz";
- path = fetchurl {
- name = "popper.js___popper.js_1.14.4.tgz";
- url = "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz";
- sha1 = "8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6";
- };
- }
-
- {
- name = "portfinder___portfinder_1.0.13.tgz";
- path = fetchurl {
- name = "portfinder___portfinder_1.0.13.tgz";
- url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz";
- sha1 = "bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9";
- };
- }
-
- {
- name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
- path = fetchurl {
- name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
- sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
- };
- }
-
- {
- name = "postcss_calc___postcss_calc_5.3.1.tgz";
- path = fetchurl {
- name = "postcss_calc___postcss_calc_5.3.1.tgz";
- url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz";
- sha1 = "77bae7ca928ad85716e2fda42f261bf7c1d65b5e";
- };
- }
-
- {
- name = "postcss_colormin___postcss_colormin_2.2.2.tgz";
- path = fetchurl {
- name = "postcss_colormin___postcss_colormin_2.2.2.tgz";
- url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz";
- sha1 = "6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b";
- };
- }
-
- {
- name = "postcss_convert_values___postcss_convert_values_2.6.1.tgz";
- path = fetchurl {
- name = "postcss_convert_values___postcss_convert_values_2.6.1.tgz";
- url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz";
- sha1 = "bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d";
- };
- }
-
- {
- name = "postcss_discard_comments___postcss_discard_comments_2.0.4.tgz";
- path = fetchurl {
- name = "postcss_discard_comments___postcss_discard_comments_2.0.4.tgz";
- url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz";
- sha1 = "befe89fafd5b3dace5ccce51b76b81514be00e3d";
- };
- }
-
- {
- name = "postcss_discard_duplicates___postcss_discard_duplicates_2.1.0.tgz";
- path = fetchurl {
- name = "postcss_discard_duplicates___postcss_discard_duplicates_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz";
- sha1 = "b9abf27b88ac188158a5eb12abcae20263b91932";
- };
- }
-
- {
- name = "postcss_discard_empty___postcss_discard_empty_2.1.0.tgz";
- path = fetchurl {
- name = "postcss_discard_empty___postcss_discard_empty_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz";
- sha1 = "d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5";
- };
- }
-
- {
- name = "postcss_discard_overridden___postcss_discard_overridden_0.1.1.tgz";
- path = fetchurl {
- name = "postcss_discard_overridden___postcss_discard_overridden_0.1.1.tgz";
- url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz";
- sha1 = "8b1eaf554f686fb288cd874c55667b0aa3668d58";
- };
- }
-
- {
- name = "postcss_discard_unused___postcss_discard_unused_2.2.3.tgz";
- path = fetchurl {
- name = "postcss_discard_unused___postcss_discard_unused_2.2.3.tgz";
- url = "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz";
- sha1 = "bce30b2cc591ffc634322b5fb3464b6d934f4433";
- };
- }
-
- {
- name = "postcss_filter_plugins___postcss_filter_plugins_2.0.3.tgz";
- path = fetchurl {
- name = "postcss_filter_plugins___postcss_filter_plugins_2.0.3.tgz";
- url = "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz";
- sha1 = "82245fdf82337041645e477114d8e593aa18b8ec";
- };
- }
-
- {
- name = "postcss_merge_idents___postcss_merge_idents_2.1.7.tgz";
- path = fetchurl {
- name = "postcss_merge_idents___postcss_merge_idents_2.1.7.tgz";
- url = "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz";
- sha1 = "4c5530313c08e1d5b3bbf3d2bbc747e278eea270";
- };
- }
-
- {
- name = "postcss_merge_longhand___postcss_merge_longhand_2.0.2.tgz";
- path = fetchurl {
- name = "postcss_merge_longhand___postcss_merge_longhand_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz";
- sha1 = "23d90cd127b0a77994915332739034a1a4f3d658";
- };
- }
-
- {
- name = "postcss_merge_rules___postcss_merge_rules_2.1.2.tgz";
- path = fetchurl {
- name = "postcss_merge_rules___postcss_merge_rules_2.1.2.tgz";
- url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz";
- sha1 = "d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721";
- };
- }
-
- {
- name = "postcss_message_helpers___postcss_message_helpers_2.0.0.tgz";
- path = fetchurl {
- name = "postcss_message_helpers___postcss_message_helpers_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz";
- sha1 = "a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e";
- };
- }
-
- {
- name = "postcss_minify_font_values___postcss_minify_font_values_1.0.5.tgz";
- path = fetchurl {
- name = "postcss_minify_font_values___postcss_minify_font_values_1.0.5.tgz";
- url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz";
- sha1 = "4b58edb56641eba7c8474ab3526cafd7bbdecb69";
- };
- }
-
- {
- name = "postcss_minify_gradients___postcss_minify_gradients_1.0.5.tgz";
- path = fetchurl {
- name = "postcss_minify_gradients___postcss_minify_gradients_1.0.5.tgz";
- url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz";
- sha1 = "5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1";
- };
- }
-
- {
- name = "postcss_minify_params___postcss_minify_params_1.2.2.tgz";
- path = fetchurl {
- name = "postcss_minify_params___postcss_minify_params_1.2.2.tgz";
- url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz";
- sha1 = "ad2ce071373b943b3d930a3fa59a358c28d6f1f3";
- };
- }
-
- {
- name = "postcss_minify_selectors___postcss_minify_selectors_2.1.1.tgz";
- path = fetchurl {
- name = "postcss_minify_selectors___postcss_minify_selectors_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz";
- sha1 = "b2c6a98c0072cf91b932d1a496508114311735bf";
- };
- }
-
- {
- name = "postcss_modules_extract_imports___postcss_modules_extract_imports_1.1.0.tgz";
- path = fetchurl {
- name = "postcss_modules_extract_imports___postcss_modules_extract_imports_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz";
- sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb";
- };
- }
-
- {
- name = "postcss_modules_local_by_default___postcss_modules_local_by_default_1.2.0.tgz";
- path = fetchurl {
- name = "postcss_modules_local_by_default___postcss_modules_local_by_default_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz";
- sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069";
- };
- }
-
- {
- name = "postcss_modules_scope___postcss_modules_scope_1.1.0.tgz";
- path = fetchurl {
- name = "postcss_modules_scope___postcss_modules_scope_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz";
- sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90";
- };
- }
-
- {
- name = "postcss_modules_values___postcss_modules_values_1.3.0.tgz";
- path = fetchurl {
- name = "postcss_modules_values___postcss_modules_values_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz";
- sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20";
- };
- }
-
- {
- name = "postcss_normalize_charset___postcss_normalize_charset_1.1.1.tgz";
- path = fetchurl {
- name = "postcss_normalize_charset___postcss_normalize_charset_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz";
- sha1 = "ef9ee71212d7fe759c78ed162f61ed62b5cb93f1";
- };
- }
-
- {
- name = "postcss_normalize_url___postcss_normalize_url_3.0.8.tgz";
- path = fetchurl {
- name = "postcss_normalize_url___postcss_normalize_url_3.0.8.tgz";
- url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz";
- sha1 = "108f74b3f2fcdaf891a2ffa3ea4592279fc78222";
- };
- }
-
- {
- name = "postcss_ordered_values___postcss_ordered_values_2.2.3.tgz";
- path = fetchurl {
- name = "postcss_ordered_values___postcss_ordered_values_2.2.3.tgz";
- url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz";
- sha1 = "eec6c2a67b6c412a8db2042e77fe8da43f95c11d";
- };
- }
-
- {
- name = "postcss_reduce_idents___postcss_reduce_idents_2.4.0.tgz";
- path = fetchurl {
- name = "postcss_reduce_idents___postcss_reduce_idents_2.4.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz";
- sha1 = "c2c6d20cc958284f6abfbe63f7609bf409059ad3";
- };
- }
-
- {
- name = "postcss_reduce_initial___postcss_reduce_initial_1.0.1.tgz";
- path = fetchurl {
- name = "postcss_reduce_initial___postcss_reduce_initial_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz";
- sha1 = "68f80695f045d08263a879ad240df8dd64f644ea";
- };
- }
-
- {
- name = "postcss_reduce_transforms___postcss_reduce_transforms_1.0.4.tgz";
- path = fetchurl {
- name = "postcss_reduce_transforms___postcss_reduce_transforms_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz";
- sha1 = "ff76f4d8212437b31c298a42d2e1444025771ae1";
- };
- }
-
- {
- name = "postcss_selector_parser___postcss_selector_parser_2.2.3.tgz";
- path = fetchurl {
- name = "postcss_selector_parser___postcss_selector_parser_2.2.3.tgz";
- url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz";
- sha1 = "f9437788606c3c9acee16ffe8d8b16297f27bb90";
- };
- }
-
- {
- name = "postcss_svgo___postcss_svgo_2.1.6.tgz";
- path = fetchurl {
- name = "postcss_svgo___postcss_svgo_2.1.6.tgz";
- url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz";
- sha1 = "b6df18aa613b666e133f08adb5219c2684ac108d";
- };
- }
-
- {
- name = "postcss_unique_selectors___postcss_unique_selectors_2.0.2.tgz";
- path = fetchurl {
- name = "postcss_unique_selectors___postcss_unique_selectors_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz";
- sha1 = "981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d";
- };
- }
-
- {
- name = "postcss_value_parser___postcss_value_parser_3.3.0.tgz";
- path = fetchurl {
- name = "postcss_value_parser___postcss_value_parser_3.3.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz";
- sha1 = "87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15";
- };
- }
-
- {
- name = "postcss_zindex___postcss_zindex_2.2.0.tgz";
- path = fetchurl {
- name = "postcss_zindex___postcss_zindex_2.2.0.tgz";
- url = "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz";
- sha1 = "d2109ddc055b91af67fc4cb3b025946639d2af22";
- };
- }
-
- {
- name = "postcss___postcss_5.2.18.tgz";
- path = fetchurl {
- name = "postcss___postcss_5.2.18.tgz";
- url = "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz";
- sha1 = "badfa1497d46244f6390f58b319830d9107853c5";
- };
- }
-
- {
- name = "postcss___postcss_6.0.23.tgz";
- path = fetchurl {
- name = "postcss___postcss_6.0.23.tgz";
- url = "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz";
- sha1 = "61c82cc328ac60e677645f979054eb98bc0e3324";
- };
- }
-
- {
- name = "prepend_http___prepend_http_1.0.4.tgz";
- path = fetchurl {
- name = "prepend_http___prepend_http_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz";
- sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
- };
- }
-
- {
- name = "preserve___preserve_0.2.0.tgz";
- path = fetchurl {
- name = "preserve___preserve_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz";
- sha1 = "815ed1f6ebc65926f865b310c0713bcb3315ce4b";
- };
- }
-
- {
- name = "pretty_error___pretty_error_2.1.1.tgz";
- path = fetchurl {
- name = "pretty_error___pretty_error_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz";
- sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3";
- };
- }
-
- {
- name = "private___private_0.1.8.tgz";
- path = fetchurl {
- name = "private___private_0.1.8.tgz";
- url = "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz";
- sha1 = "2381edb3689f7a53d653190060fcf822d2f368ff";
- };
- }
-
- {
- name = "process_nextick_args___process_nextick_args_2.0.0.tgz";
- path = fetchurl {
- name = "process_nextick_args___process_nextick_args_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz";
- sha1 = "a37d732f4271b4ab1ad070d35508e8290788ffaa";
- };
- }
-
- {
- name = "process___process_0.11.10.tgz";
- path = fetchurl {
- name = "process___process_0.11.10.tgz";
- url = "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz";
- sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
- };
- }
-
- {
- name = "proxy_addr___proxy_addr_2.0.4.tgz";
- path = fetchurl {
- name = "proxy_addr___proxy_addr_2.0.4.tgz";
- url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz";
- sha1 = "ecfc733bf22ff8c6f407fa275327b9ab67e48b93";
- };
- }
-
- {
- name = "prr___prr_1.0.1.tgz";
- path = fetchurl {
- name = "prr___prr_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz";
- sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
- };
- }
-
- {
- name = "pseudomap___pseudomap_1.0.2.tgz";
- path = fetchurl {
- name = "pseudomap___pseudomap_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz";
- sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
- };
- }
-
- {
- name = "public_encrypt___public_encrypt_4.0.2.tgz";
- path = fetchurl {
- name = "public_encrypt___public_encrypt_4.0.2.tgz";
- url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz";
- sha1 = "46eb9107206bf73489f8b85b69d91334c6610994";
- };
- }
-
- {
- name = "punycode___punycode_1.3.2.tgz";
- path = fetchurl {
- name = "punycode___punycode_1.3.2.tgz";
- url = "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz";
- sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
- };
- }
-
- {
- name = "punycode___punycode_1.4.1.tgz";
- path = fetchurl {
- name = "punycode___punycode_1.4.1.tgz";
- url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz";
- sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
- };
- }
-
- {
- name = "punycode___punycode_2.1.1.tgz";
- path = fetchurl {
- name = "punycode___punycode_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz";
- sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec";
- };
- }
-
- {
- name = "q___q_1.5.1.tgz";
- path = fetchurl {
- name = "q___q_1.5.1.tgz";
- url = "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz";
- sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
- };
- }
-
- {
- name = "qs___qs_6.5.1.tgz";
- path = fetchurl {
- name = "qs___qs_6.5.1.tgz";
- url = "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz";
- sha1 = "349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8";
- };
- }
-
- {
- name = "qs___qs_6.4.0.tgz";
- path = fetchurl {
- name = "qs___qs_6.4.0.tgz";
- url = "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz";
- sha1 = "13e26d28ad6b0ffaa91312cd3bf708ed351e7233";
- };
- }
-
- {
- name = "qs___qs_6.5.2.tgz";
- path = fetchurl {
- name = "qs___qs_6.5.2.tgz";
- url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz";
- sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36";
- };
- }
-
- {
- name = "query_string___query_string_4.3.4.tgz";
- path = fetchurl {
- name = "query_string___query_string_4.3.4.tgz";
- url = "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz";
- sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb";
- };
- }
-
- {
- name = "querystring_es3___querystring_es3_0.2.1.tgz";
- path = fetchurl {
- name = "querystring_es3___querystring_es3_0.2.1.tgz";
- url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz";
- sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
- };
- }
-
- {
- name = "querystring___querystring_0.2.0.tgz";
- path = fetchurl {
- name = "querystring___querystring_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz";
- sha1 = "b209849203bb25df820da756e747005878521620";
- };
- }
-
- {
- name = "querystringify___querystringify_2.0.0.tgz";
- path = fetchurl {
- name = "querystringify___querystringify_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz";
- sha1 = "fa3ed6e68eb15159457c89b37bc6472833195755";
- };
- }
-
- {
- name = "randomatic___randomatic_3.0.0.tgz";
- path = fetchurl {
- name = "randomatic___randomatic_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz";
- sha1 = "d35490030eb4f7578de292ce6dfb04a91a128923";
- };
- }
-
- {
- name = "randombytes___randombytes_2.0.6.tgz";
- path = fetchurl {
- name = "randombytes___randombytes_2.0.6.tgz";
- url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz";
- sha1 = "d302c522948588848a8d300c932b44c24231da80";
- };
- }
-
- {
- name = "randomfill___randomfill_1.0.4.tgz";
- path = fetchurl {
- name = "randomfill___randomfill_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz";
- sha1 = "c92196fc86ab42be983f1bf31778224931d61458";
- };
- }
-
- {
- name = "range_parser___range_parser_1.2.0.tgz";
- path = fetchurl {
- name = "range_parser___range_parser_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz";
- sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e";
- };
- }
-
- {
- name = "raw_body___raw_body_2.3.2.tgz";
- path = fetchurl {
- name = "raw_body___raw_body_2.3.2.tgz";
- url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz";
- sha1 = "bcd60c77d3eb93cde0050295c3f379389bc88f89";
- };
- }
-
- {
- name = "rc___rc_1.2.8.tgz";
- path = fetchurl {
- name = "rc___rc_1.2.8.tgz";
- url = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz";
- sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed";
- };
- }
-
- {
- name = "read_pkg_up___read_pkg_up_1.0.1.tgz";
- path = fetchurl {
- name = "read_pkg_up___read_pkg_up_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz";
- sha1 = "9d63c13276c065918d57f002a57f40a1b643fb02";
- };
- }
-
- {
- name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
- path = fetchurl {
- name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz";
- sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be";
- };
- }
-
- {
- name = "read_pkg___read_pkg_1.1.0.tgz";
- path = fetchurl {
- name = "read_pkg___read_pkg_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz";
- sha1 = "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28";
- };
- }
-
- {
- name = "read_pkg___read_pkg_2.0.0.tgz";
- path = fetchurl {
- name = "read_pkg___read_pkg_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz";
- sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8";
- };
- }
-
- {
- name = "readable_stream___readable_stream_1.0.34.tgz";
- path = fetchurl {
- name = "readable_stream___readable_stream_1.0.34.tgz";
- url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz";
- sha1 = "125820e34bc842d2f2aaafafe4c2916ee32c157c";
- };
- }
-
- {
- name = "readable_stream___readable_stream_2.3.6.tgz";
- path = fetchurl {
- name = "readable_stream___readable_stream_2.3.6.tgz";
- url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz";
- sha1 = "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf";
- };
- }
-
- {
- name = "readdirp___readdirp_2.1.0.tgz";
- path = fetchurl {
- name = "readdirp___readdirp_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz";
- sha1 = "4ed0ad060df3073300c48440373f72d1cc642d78";
- };
- }
-
- {
- name = "redent___redent_1.0.0.tgz";
- path = fetchurl {
- name = "redent___redent_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz";
- sha1 = "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde";
- };
- }
-
- {
- name = "reduce_css_calc___reduce_css_calc_1.3.0.tgz";
- path = fetchurl {
- name = "reduce_css_calc___reduce_css_calc_1.3.0.tgz";
- url = "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz";
- sha1 = "747c914e049614a4c9cfbba629871ad1d2927716";
- };
- }
-
- {
- name = "reduce_function_call___reduce_function_call_1.0.2.tgz";
- path = fetchurl {
- name = "reduce_function_call___reduce_function_call_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz";
- sha1 = "5a200bf92e0e37751752fe45b0ab330fd4b6be99";
- };
- }
-
- {
- name = "regenerate___regenerate_1.4.0.tgz";
- path = fetchurl {
- name = "regenerate___regenerate_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz";
- sha1 = "4a856ec4b56e4077c557589cae85e7a4c8869a11";
- };
- }
-
- {
- name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
- path = fetchurl {
- name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
- url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
- sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9";
- };
- }
-
- {
- name = "regenerator_transform___regenerator_transform_0.10.1.tgz";
- path = fetchurl {
- name = "regenerator_transform___regenerator_transform_0.10.1.tgz";
- url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz";
- sha1 = "1e4996837231da8b7f3cf4114d71b5691a0680dd";
- };
- }
-
- {
- name = "regex_cache___regex_cache_0.4.4.tgz";
- path = fetchurl {
- name = "regex_cache___regex_cache_0.4.4.tgz";
- url = "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz";
- sha1 = "75bdc58a2a1496cec48a12835bc54c8d562336dd";
- };
- }
-
- {
- name = "regex_not___regex_not_1.0.2.tgz";
- path = fetchurl {
- name = "regex_not___regex_not_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz";
- sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c";
- };
- }
-
- {
- name = "regex_parser___regex_parser_2.2.9.tgz";
- path = fetchurl {
- name = "regex_parser___regex_parser_2.2.9.tgz";
- url = "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.9.tgz";
- sha1 = "a372f45a248b62976a568037c1b6e60a60599192";
- };
- }
-
- {
- name = "regexpu_core___regexpu_core_1.0.0.tgz";
- path = fetchurl {
- name = "regexpu_core___regexpu_core_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz";
- sha1 = "86a763f58ee4d7c2f6b102e4764050de7ed90c6b";
- };
- }
-
- {
- name = "regexpu_core___regexpu_core_2.0.0.tgz";
- path = fetchurl {
- name = "regexpu_core___regexpu_core_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz";
- sha1 = "49d038837b8dcf8bfa5b9a42139938e6ea2ae240";
- };
- }
-
- {
- name = "regjsgen___regjsgen_0.2.0.tgz";
- path = fetchurl {
- name = "regjsgen___regjsgen_0.2.0.tgz";
- url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz";
- sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7";
- };
- }
-
- {
- name = "regjsparser___regjsparser_0.1.5.tgz";
- path = fetchurl {
- name = "regjsparser___regjsparser_0.1.5.tgz";
- url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz";
- sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c";
- };
- }
-
- {
- name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz";
- path = fetchurl {
- name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
- sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef";
- };
- }
-
- {
- name = "renderkid___renderkid_2.0.1.tgz";
- path = fetchurl {
- name = "renderkid___renderkid_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz";
- sha1 = "898cabfc8bede4b7b91135a3ffd323e58c0db319";
- };
- }
-
- {
- name = "repeat_element___repeat_element_1.1.2.tgz";
- path = fetchurl {
- name = "repeat_element___repeat_element_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz";
- sha1 = "ef089a178d1483baae4d93eb98b4f9e4e11d990a";
- };
- }
-
- {
- name = "repeat_string___repeat_string_1.6.1.tgz";
- path = fetchurl {
- name = "repeat_string___repeat_string_1.6.1.tgz";
- url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz";
- sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
- };
- }
-
- {
- name = "repeating___repeating_2.0.1.tgz";
- path = fetchurl {
- name = "repeating___repeating_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz";
- sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
- };
- }
-
- {
- name = "request___request_2.87.0.tgz";
- path = fetchurl {
- name = "request___request_2.87.0.tgz";
- url = "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz";
- sha1 = "32f00235cd08d482b4d0d68db93a829c0ed5756e";
- };
- }
-
- {
- name = "request___request_2.81.0.tgz";
- path = fetchurl {
- name = "request___request_2.81.0.tgz";
- url = "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz";
- sha1 = "c6928946a0e06c5f8d6f8a9333469ffda46298a0";
- };
- }
-
- {
- name = "require_directory___require_directory_2.1.1.tgz";
- path = fetchurl {
- name = "require_directory___require_directory_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz";
- sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
- };
- }
-
- {
- name = "require_main_filename___require_main_filename_1.0.1.tgz";
- path = fetchurl {
- name = "require_main_filename___require_main_filename_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz";
- sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1";
- };
- }
-
- {
- name = "requires_port___requires_port_1.0.0.tgz";
- path = fetchurl {
- name = "requires_port___requires_port_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz";
- sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff";
- };
- }
-
- {
- name = "resolve_cwd___resolve_cwd_2.0.0.tgz";
- path = fetchurl {
- name = "resolve_cwd___resolve_cwd_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz";
- sha1 = "00a9f7387556e27038eae232caa372a6a59b665a";
- };
- }
-
- {
- name = "resolve_from___resolve_from_3.0.0.tgz";
- path = fetchurl {
- name = "resolve_from___resolve_from_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz";
- sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748";
- };
- }
-
- {
- name = "resolve_url_loader___resolve_url_loader_2.3.0.tgz";
- path = fetchurl {
- name = "resolve_url_loader___resolve_url_loader_2.3.0.tgz";
- url = "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz";
- sha1 = "e1b37034d48f22f8cfb9f04c026faaa070fdaf26";
- };
- }
-
- {
- name = "resolve_url___resolve_url_0.2.1.tgz";
- path = fetchurl {
- name = "resolve_url___resolve_url_0.2.1.tgz";
- url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz";
- sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
- };
- }
-
- {
- name = "ret___ret_0.1.15.tgz";
- path = fetchurl {
- name = "ret___ret_0.1.15.tgz";
- url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz";
- sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc";
- };
- }
-
- {
- name = "rework_visit___rework_visit_1.0.0.tgz";
- path = fetchurl {
- name = "rework_visit___rework_visit_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz";
- sha1 = "9945b2803f219e2f7aca00adb8bc9f640f842c9a";
- };
- }
-
- {
- name = "rework___rework_1.0.1.tgz";
- path = fetchurl {
- name = "rework___rework_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz";
- sha1 = "30806a841342b54510aa4110850cd48534144aa7";
- };
- }
-
- {
- name = "right_align___right_align_0.1.3.tgz";
- path = fetchurl {
- name = "right_align___right_align_0.1.3.tgz";
- url = "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz";
- sha1 = "61339b722fe6a3515689210d24e14c96148613ef";
- };
- }
-
- {
- name = "rimraf___rimraf_2.6.2.tgz";
- path = fetchurl {
- name = "rimraf___rimraf_2.6.2.tgz";
- url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz";
- sha1 = "2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36";
- };
- }
-
- {
- name = "ripemd160___ripemd160_2.0.2.tgz";
- path = fetchurl {
- name = "ripemd160___ripemd160_2.0.2.tgz";
- url = "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz";
- sha1 = "a1c1a6f624751577ba5d07914cbc92850585890c";
- };
- }
-
- {
- name = "safe_buffer___safe_buffer_5.1.1.tgz";
- path = fetchurl {
- name = "safe_buffer___safe_buffer_5.1.1.tgz";
- url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz";
- sha1 = "893312af69b2123def71f57889001671eeb2c853";
- };
- }
-
- {
- name = "safe_buffer___safe_buffer_5.1.2.tgz";
- path = fetchurl {
- name = "safe_buffer___safe_buffer_5.1.2.tgz";
- url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz";
- sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d";
- };
- }
-
- {
- name = "safe_regex___safe_regex_1.1.0.tgz";
- path = fetchurl {
- name = "safe_regex___safe_regex_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz";
- sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
- };
- }
-
- {
- name = "safer_buffer___safer_buffer_2.1.2.tgz";
- path = fetchurl {
- name = "safer_buffer___safer_buffer_2.1.2.tgz";
- url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz";
- sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a";
- };
- }
-
- {
- name = "sass_graph___sass_graph_2.2.4.tgz";
- path = fetchurl {
- name = "sass_graph___sass_graph_2.2.4.tgz";
- url = "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz";
- sha1 = "13fbd63cd1caf0908b9fd93476ad43a51d1e0b49";
- };
- }
-
- {
- name = "sass_loader___sass_loader_7.0.3.tgz";
- path = fetchurl {
- name = "sass_loader___sass_loader_7.0.3.tgz";
- url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.0.3.tgz";
- sha1 = "6ca10871a1cc7549f8143db5a9958242c4e4ca2a";
- };
- }
-
- {
- name = "sax___sax_1.2.4.tgz";
- path = fetchurl {
- name = "sax___sax_1.2.4.tgz";
- url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz";
- sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9";
- };
- }
-
- {
- name = "schema_utils___schema_utils_0.3.0.tgz";
- path = fetchurl {
- name = "schema_utils___schema_utils_0.3.0.tgz";
- url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz";
- sha1 = "f5877222ce3e931edae039f17eb3716e7137f8cf";
- };
- }
-
- {
- name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz";
- path = fetchurl {
- name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz";
- url = "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz";
- sha1 = "8eb06db9a9723333824d3f5530641149847ce5d1";
- };
- }
-
- {
- name = "select_hose___select_hose_2.0.0.tgz";
- path = fetchurl {
- name = "select_hose___select_hose_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz";
- sha1 = "625d8658f865af43ec962bfc376a37359a4994ca";
- };
- }
-
- {
- name = "selfsigned___selfsigned_1.10.3.tgz";
- path = fetchurl {
- name = "selfsigned___selfsigned_1.10.3.tgz";
- url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz";
- sha1 = "d628ecf9e3735f84e8bafba936b3cf85bea43823";
- };
- }
-
- {
- name = "semver___semver_5.5.0.tgz";
- path = fetchurl {
- name = "semver___semver_5.5.0.tgz";
- url = "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz";
- sha1 = "dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab";
- };
- }
-
- {
- name = "semver___semver_5.3.0.tgz";
- path = fetchurl {
- name = "semver___semver_5.3.0.tgz";
- url = "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz";
- sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
- };
- }
-
- {
- name = "send___send_0.16.2.tgz";
- path = fetchurl {
- name = "send___send_0.16.2.tgz";
- url = "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz";
- sha1 = "6ecca1e0f8c156d141597559848df64730a6bbc1";
- };
- }
-
- {
- name = "serve_index___serve_index_1.9.1.tgz";
- path = fetchurl {
- name = "serve_index___serve_index_1.9.1.tgz";
- url = "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz";
- sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239";
- };
- }
-
- {
- name = "serve_static___serve_static_1.13.2.tgz";
- path = fetchurl {
- name = "serve_static___serve_static_1.13.2.tgz";
- url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz";
- sha1 = "095e8472fd5b46237db50ce486a43f4b86c6cec1";
- };
- }
-
- {
- name = "set_blocking___set_blocking_2.0.0.tgz";
- path = fetchurl {
- name = "set_blocking___set_blocking_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz";
- sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
- };
- }
-
- {
- name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz";
- path = fetchurl {
- name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz";
- sha1 = "4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61";
- };
- }
-
- {
- name = "set_value___set_value_0.4.3.tgz";
- path = fetchurl {
- name = "set_value___set_value_0.4.3.tgz";
- url = "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz";
- sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1";
- };
- }
-
- {
- name = "set_value___set_value_2.0.0.tgz";
- path = fetchurl {
- name = "set_value___set_value_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz";
- sha1 = "71ae4a88f0feefbbf52d1ea604f3fb315ebb6274";
- };
- }
-
- {
- name = "setimmediate___setimmediate_1.0.5.tgz";
- path = fetchurl {
- name = "setimmediate___setimmediate_1.0.5.tgz";
- url = "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz";
- sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285";
- };
- }
-
- {
- name = "setprototypeof___setprototypeof_1.0.3.tgz";
- path = fetchurl {
- name = "setprototypeof___setprototypeof_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz";
- sha1 = "66567e37043eeb4f04d91bd658c0cbefb55b8e04";
- };
- }
-
- {
- name = "setprototypeof___setprototypeof_1.1.0.tgz";
- path = fetchurl {
- name = "setprototypeof___setprototypeof_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz";
- sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656";
- };
- }
-
- {
- name = "sha.js___sha.js_2.4.11.tgz";
- path = fetchurl {
- name = "sha.js___sha.js_2.4.11.tgz";
- url = "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz";
- sha1 = "37a5cf0b81ecbc6943de109ba2960d1b26584ae7";
- };
- }
-
- {
- name = "shallow_clone___shallow_clone_1.0.0.tgz";
- path = fetchurl {
- name = "shallow_clone___shallow_clone_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz";
- sha1 = "4480cd06e882ef68b2ad88a3ea54832e2c48b571";
- };
- }
-
- {
- name = "shebang_command___shebang_command_1.2.0.tgz";
- path = fetchurl {
- name = "shebang_command___shebang_command_1.2.0.tgz";
- url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz";
- sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
- };
- }
-
- {
- name = "shebang_regex___shebang_regex_1.0.0.tgz";
- path = fetchurl {
- name = "shebang_regex___shebang_regex_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz";
- sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
- };
- }
-
- {
- name = "signal_exit___signal_exit_3.0.2.tgz";
- path = fetchurl {
- name = "signal_exit___signal_exit_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz";
- sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
- };
- }
-
- {
- name = "slash___slash_1.0.0.tgz";
- path = fetchurl {
- name = "slash___slash_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz";
- sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55";
- };
- }
-
- {
- name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
- path = fetchurl {
- name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
- sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b";
- };
- }
-
- {
- name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
- path = fetchurl {
- name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
- sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2";
- };
- }
-
- {
- name = "snapdragon___snapdragon_0.8.2.tgz";
- path = fetchurl {
- name = "snapdragon___snapdragon_0.8.2.tgz";
- url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz";
- sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d";
- };
- }
-
- {
- name = "sntp___sntp_1.0.9.tgz";
- path = fetchurl {
- name = "sntp___sntp_1.0.9.tgz";
- url = "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz";
- sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198";
- };
- }
-
- {
- name = "sockjs_client___sockjs_client_1.1.4.tgz";
- path = fetchurl {
- name = "sockjs_client___sockjs_client_1.1.4.tgz";
- url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz";
- sha1 = "5babe386b775e4cf14e7520911452654016c8b12";
- };
- }
-
- {
- name = "sockjs___sockjs_0.3.19.tgz";
- path = fetchurl {
- name = "sockjs___sockjs_0.3.19.tgz";
- url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz";
- sha1 = "d976bbe800af7bd20ae08598d582393508993c0d";
- };
- }
-
- {
- name = "sort_keys___sort_keys_1.1.2.tgz";
- path = fetchurl {
- name = "sort_keys___sort_keys_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz";
- sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad";
- };
- }
-
- {
- name = "source_list_map___source_list_map_0.1.8.tgz";
- path = fetchurl {
- name = "source_list_map___source_list_map_0.1.8.tgz";
- url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz";
- sha1 = "c550b2ab5427f6b3f21f5afead88c4f5587b2106";
- };
- }
-
- {
- name = "source_list_map___source_list_map_2.0.0.tgz";
- path = fetchurl {
- name = "source_list_map___source_list_map_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz";
- sha1 = "aaa47403f7b245a92fbc97ea08f250d6087ed085";
- };
- }
-
- {
- name = "source_map_resolve___source_map_resolve_0.5.2.tgz";
- path = fetchurl {
- name = "source_map_resolve___source_map_resolve_0.5.2.tgz";
- url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz";
- sha1 = "72e2cc34095543e43b2c62b2c4c10d4a9054f259";
- };
- }
-
- {
- name = "source_map_support___source_map_support_0.4.18.tgz";
- path = fetchurl {
- name = "source_map_support___source_map_support_0.4.18.tgz";
- url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz";
- sha1 = "0286a6de8be42641338594e97ccea75f0a2c585f";
- };
- }
-
- {
- name = "source_map_url___source_map_url_0.4.0.tgz";
- path = fetchurl {
- name = "source_map_url___source_map_url_0.4.0.tgz";
- url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz";
- sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
- };
- }
-
- {
- name = "source_map___source_map_0.1.43.tgz";
- path = fetchurl {
- name = "source_map___source_map_0.1.43.tgz";
- url = "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz";
- sha1 = "c24bc146ca517c1471f5dacbe2571b2b7f9e3346";
- };
- }
-
- {
- name = "source_map___source_map_0.4.4.tgz";
- path = fetchurl {
- name = "source_map___source_map_0.4.4.tgz";
- url = "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz";
- sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b";
- };
- }
-
- {
- name = "source_map___source_map_0.5.7.tgz";
- path = fetchurl {
- name = "source_map___source_map_0.5.7.tgz";
- url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz";
- sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
- };
- }
-
- {
- name = "source_map___source_map_0.6.1.tgz";
- path = fetchurl {
- name = "source_map___source_map_0.6.1.tgz";
- url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz";
- sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263";
- };
- }
-
- {
- name = "spdx_correct___spdx_correct_3.0.0.tgz";
- path = fetchurl {
- name = "spdx_correct___spdx_correct_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz";
- sha1 = "05a5b4d7153a195bc92c3c425b69f3b2a9524c82";
- };
- }
-
- {
- name = "spdx_exceptions___spdx_exceptions_2.1.0.tgz";
- path = fetchurl {
- name = "spdx_exceptions___spdx_exceptions_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz";
- sha1 = "2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9";
- };
- }
-
- {
- name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz";
- path = fetchurl {
- name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz";
- sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0";
- };
- }
-
- {
- name = "spdx_license_ids___spdx_license_ids_3.0.0.tgz";
- path = fetchurl {
- name = "spdx_license_ids___spdx_license_ids_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz";
- sha1 = "7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87";
- };
- }
-
- {
- name = "spdy_transport___spdy_transport_2.1.0.tgz";
- path = fetchurl {
- name = "spdy_transport___spdy_transport_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz";
- sha1 = "4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1";
- };
- }
-
- {
- name = "spdy___spdy_3.4.7.tgz";
- path = fetchurl {
- name = "spdy___spdy_3.4.7.tgz";
- url = "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz";
- sha1 = "42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc";
- };
- }
-
- {
- name = "split_string___split_string_3.1.0.tgz";
- path = fetchurl {
- name = "split_string___split_string_3.1.0.tgz";
- url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz";
- sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2";
- };
- }
-
- {
- name = "sprintf_js___sprintf_js_1.0.3.tgz";
- path = fetchurl {
- name = "sprintf_js___sprintf_js_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz";
- sha1 = "04e6926f662895354f3dd015203633b857297e2c";
- };
- }
-
- {
- name = "sshpk___sshpk_1.14.2.tgz";
- path = fetchurl {
- name = "sshpk___sshpk_1.14.2.tgz";
- url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz";
- sha1 = "c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98";
- };
- }
-
- {
- name = "stackframe___stackframe_1.0.4.tgz";
- path = fetchurl {
- name = "stackframe___stackframe_1.0.4.tgz";
- url = "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz";
- sha1 = "357b24a992f9427cba6b545d96a14ed2cbca187b";
- };
- }
-
- {
- name = "static_extend___static_extend_0.1.2.tgz";
- path = fetchurl {
- name = "static_extend___static_extend_0.1.2.tgz";
- url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz";
- sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
- };
- }
-
- {
- name = "statuses___statuses_1.5.0.tgz";
- path = fetchurl {
- name = "statuses___statuses_1.5.0.tgz";
- url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz";
- sha1 = "161c7dac177659fd9811f43771fa99381478628c";
- };
- }
-
- {
- name = "statuses___statuses_1.4.0.tgz";
- path = fetchurl {
- name = "statuses___statuses_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz";
- sha1 = "bb73d446da2796106efcc1b601a253d6c46bd087";
- };
- }
-
- {
- name = "stdout_stream___stdout_stream_1.4.0.tgz";
- path = fetchurl {
- name = "stdout_stream___stdout_stream_1.4.0.tgz";
- url = "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz";
- sha1 = "a2c7c8587e54d9427ea9edb3ac3f2cd522df378b";
- };
- }
-
- {
- name = "stream_browserify___stream_browserify_2.0.1.tgz";
- path = fetchurl {
- name = "stream_browserify___stream_browserify_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz";
- sha1 = "66266ee5f9bdb9940a4e4514cafb43bb71e5c9db";
- };
- }
-
- {
- name = "stream_http___stream_http_2.8.3.tgz";
- path = fetchurl {
- name = "stream_http___stream_http_2.8.3.tgz";
- url = "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz";
- sha1 = "b2d242469288a5a27ec4fe8933acf623de6514fc";
- };
- }
-
- {
- name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz";
- path = fetchurl {
- name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz";
- sha1 = "279b225df1d582b1f54e65addd4352e18faa0713";
- };
- }
-
- {
- name = "string_width___string_width_1.0.2.tgz";
- path = fetchurl {
- name = "string_width___string_width_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz";
- sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
- };
- }
-
- {
- name = "string_width___string_width_2.1.1.tgz";
- path = fetchurl {
- name = "string_width___string_width_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz";
- sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e";
- };
- }
-
- {
- name = "string_decoder___string_decoder_1.1.1.tgz";
- path = fetchurl {
- name = "string_decoder___string_decoder_1.1.1.tgz";
- url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz";
- sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8";
- };
- }
-
- {
- name = "string_decoder___string_decoder_0.10.31.tgz";
- path = fetchurl {
- name = "string_decoder___string_decoder_0.10.31.tgz";
- url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz";
- sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
- };
- }
-
- {
- name = "stringstream___stringstream_0.0.6.tgz";
- path = fetchurl {
- name = "stringstream___stringstream_0.0.6.tgz";
- url = "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz";
- sha1 = "7880225b0d4ad10e30927d167a1d6f2fd3b33a72";
- };
- }
-
- {
- name = "strip_ansi___strip_ansi_3.0.1.tgz";
- path = fetchurl {
- name = "strip_ansi___strip_ansi_3.0.1.tgz";
- url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz";
- sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
- };
- }
-
- {
- name = "strip_ansi___strip_ansi_4.0.0.tgz";
- path = fetchurl {
- name = "strip_ansi___strip_ansi_4.0.0.tgz";
- url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz";
- sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
- };
- }
-
- {
- name = "strip_bom___strip_bom_2.0.0.tgz";
- path = fetchurl {
- name = "strip_bom___strip_bom_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz";
- sha1 = "6219a85616520491f35788bdbf1447a99c7e6b0e";
- };
- }
-
- {
- name = "strip_bom___strip_bom_3.0.0.tgz";
- path = fetchurl {
- name = "strip_bom___strip_bom_3.0.0.tgz";
- url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz";
- sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3";
- };
- }
-
- {
- name = "strip_eof___strip_eof_1.0.0.tgz";
- path = fetchurl {
- name = "strip_eof___strip_eof_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz";
- sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
- };
- }
-
- {
- name = "strip_indent___strip_indent_1.0.1.tgz";
- path = fetchurl {
- name = "strip_indent___strip_indent_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz";
- sha1 = "0c7962a6adefa7bbd4ac366460a638552ae1a0a2";
- };
- }
-
- {
- name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
- path = fetchurl {
- name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
- url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
- sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
- };
- }
-
- {
- name = "style_loader___style_loader_0.13.2.tgz";
- path = fetchurl {
- name = "style_loader___style_loader_0.13.2.tgz";
- url = "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz";
- sha1 = "74533384cf698c7104c7951150b49717adc2f3bb";
- };
- }
-
- {
- name = "summernote___summernote_0.8.10.tgz";
- path = fetchurl {
- name = "summernote___summernote_0.8.10.tgz";
- url = "https://registry.yarnpkg.com/summernote/-/summernote-0.8.10.tgz";
- sha1 = "21a5d7f18a3b07500b58b60d5907417a54897520";
- };
- }
-
- {
- name = "supports_color___supports_color_2.0.0.tgz";
- path = fetchurl {
- name = "supports_color___supports_color_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz";
- sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
- };
- }
-
- {
- name = "supports_color___supports_color_3.2.3.tgz";
- path = fetchurl {
- name = "supports_color___supports_color_3.2.3.tgz";
- url = "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz";
- sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6";
- };
- }
-
- {
- name = "supports_color___supports_color_4.5.0.tgz";
- path = fetchurl {
- name = "supports_color___supports_color_4.5.0.tgz";
- url = "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz";
- sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b";
- };
- }
-
- {
- name = "supports_color___supports_color_5.4.0.tgz";
- path = fetchurl {
- name = "supports_color___supports_color_5.4.0.tgz";
- url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz";
- sha1 = "1c6b337402c2137605efe19f10fec390f6faab54";
- };
- }
-
- {
- name = "svgo___svgo_0.7.2.tgz";
- path = fetchurl {
- name = "svgo___svgo_0.7.2.tgz";
- url = "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz";
- sha1 = "9f5772413952135c6fefbf40afe6a4faa88b4bb5";
- };
- }
-
- {
- name = "tapable___tapable_0.2.8.tgz";
- path = fetchurl {
- name = "tapable___tapable_0.2.8.tgz";
- url = "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz";
- sha1 = "99372a5c999bf2df160afc0d74bed4f47948cd22";
- };
- }
-
- {
- name = "tar___tar_2.2.1.tgz";
- path = fetchurl {
- name = "tar___tar_2.2.1.tgz";
- url = "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz";
- sha1 = "8e4d2a256c0e2185c6b18ad694aec968b83cb1d1";
- };
- }
-
- {
- name = "tar___tar_4.4.4.tgz";
- path = fetchurl {
- name = "tar___tar_4.4.4.tgz";
- url = "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz";
- sha1 = "ec8409fae9f665a4355cc3b4087d0820232bb8cd";
- };
- }
-
- {
- name = "thunky___thunky_1.0.2.tgz";
- path = fetchurl {
- name = "thunky___thunky_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz";
- sha1 = "a862e018e3fb1ea2ec3fce5d55605cf57f247371";
- };
- }
-
- {
- name = "time_stamp___time_stamp_2.0.0.tgz";
- path = fetchurl {
- name = "time_stamp___time_stamp_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz";
- sha1 = "95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357";
- };
- }
-
- {
- name = "timers_browserify___timers_browserify_2.0.10.tgz";
- path = fetchurl {
- name = "timers_browserify___timers_browserify_2.0.10.tgz";
- url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz";
- sha1 = "1d28e3d2aadf1d5a5996c4e9f95601cd053480ae";
- };
- }
-
- {
- name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz";
- path = fetchurl {
- name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
- sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
- };
- }
-
- {
- name = "to_fast_properties___to_fast_properties_1.0.3.tgz";
- path = fetchurl {
- name = "to_fast_properties___to_fast_properties_1.0.3.tgz";
- url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz";
- sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47";
- };
- }
-
- {
- name = "to_object_path___to_object_path_0.3.0.tgz";
- path = fetchurl {
- name = "to_object_path___to_object_path_0.3.0.tgz";
- url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz";
- sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
- };
- }
-
- {
- name = "to_regex_range___to_regex_range_2.1.1.tgz";
- path = fetchurl {
- name = "to_regex_range___to_regex_range_2.1.1.tgz";
- url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz";
- sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
- };
- }
-
- {
- name = "to_regex___to_regex_3.0.2.tgz";
- path = fetchurl {
- name = "to_regex___to_regex_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz";
- sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce";
- };
- }
-
- {
- name = "tough_cookie___tough_cookie_2.3.4.tgz";
- path = fetchurl {
- name = "tough_cookie___tough_cookie_2.3.4.tgz";
- url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz";
- sha1 = "ec60cee38ac675063ffc97a5c18970578ee83655";
- };
- }
-
- {
- name = "trim_newlines___trim_newlines_1.0.0.tgz";
- path = fetchurl {
- name = "trim_newlines___trim_newlines_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz";
- sha1 = "5887966bb582a4503a41eb524f7d35011815a613";
- };
- }
-
- {
- name = "trim_right___trim_right_1.0.1.tgz";
- path = fetchurl {
- name = "trim_right___trim_right_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz";
- sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003";
- };
- }
-
- {
- name = "true_case_path___true_case_path_1.0.2.tgz";
- path = fetchurl {
- name = "true_case_path___true_case_path_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz";
- sha1 = "7ec91130924766c7f573be3020c34f8fdfd00d62";
- };
- }
-
- {
- name = "tty_browserify___tty_browserify_0.0.0.tgz";
- path = fetchurl {
- name = "tty_browserify___tty_browserify_0.0.0.tgz";
- url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz";
- sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6";
- };
- }
-
- {
- name = "tunnel_agent___tunnel_agent_0.6.0.tgz";
- path = fetchurl {
- name = "tunnel_agent___tunnel_agent_0.6.0.tgz";
- url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
- sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
- };
- }
-
- {
- name = "tweetnacl___tweetnacl_0.14.5.tgz";
- path = fetchurl {
- name = "tweetnacl___tweetnacl_0.14.5.tgz";
- url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz";
- sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
- };
- }
-
- {
- name = "type_is___type_is_1.6.16.tgz";
- path = fetchurl {
- name = "type_is___type_is_1.6.16.tgz";
- url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz";
- sha1 = "f89ce341541c672b25ee7ae3c73dee3b2be50194";
- };
- }
-
- {
- name = "uglify_js___uglify_js_2.8.29.tgz";
- path = fetchurl {
- name = "uglify_js___uglify_js_2.8.29.tgz";
- url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz";
- sha1 = "29c5733148057bb4e1f75df35b7a9cb72e6a59dd";
- };
- }
-
- {
- name = "uglify_to_browserify___uglify_to_browserify_1.0.2.tgz";
- path = fetchurl {
- name = "uglify_to_browserify___uglify_to_browserify_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz";
- sha1 = "6e0924d6bda6b5afe349e39a6d632850a0f882b7";
- };
- }
-
- {
- name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_0.4.6.tgz";
- path = fetchurl {
- name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_0.4.6.tgz";
- url = "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz";
- sha1 = "b951f4abb6bd617e66f63eb891498e391763e309";
- };
- }
-
- {
- name = "union_value___union_value_1.0.0.tgz";
- path = fetchurl {
- name = "union_value___union_value_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz";
- sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4";
- };
- }
-
- {
- name = "uniq___uniq_1.0.1.tgz";
- path = fetchurl {
- name = "uniq___uniq_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz";
- sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
- };
- }
-
- {
- name = "uniqs___uniqs_2.0.0.tgz";
- path = fetchurl {
- name = "uniqs___uniqs_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz";
- sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02";
- };
- }
-
- {
- name = "unpipe___unpipe_1.0.0.tgz";
- path = fetchurl {
- name = "unpipe___unpipe_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz";
- sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec";
- };
- }
-
- {
- name = "unset_value___unset_value_1.0.0.tgz";
- path = fetchurl {
- name = "unset_value___unset_value_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz";
- sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
- };
- }
-
- {
- name = "upath___upath_1.1.0.tgz";
- path = fetchurl {
- name = "upath___upath_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz";
- sha1 = "35256597e46a581db4793d0ce47fa9aebfc9fabd";
- };
- }
-
- {
- name = "uri_js___uri_js_4.2.2.tgz";
- path = fetchurl {
- name = "uri_js___uri_js_4.2.2.tgz";
- url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz";
- sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0";
- };
- }
-
- {
- name = "urix___urix_0.1.0.tgz";
- path = fetchurl {
- name = "urix___urix_0.1.0.tgz";
- url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz";
- sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
- };
- }
-
- {
- name = "url_parse___url_parse_1.4.1.tgz";
- path = fetchurl {
- name = "url_parse___url_parse_1.4.1.tgz";
- url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.1.tgz";
- sha1 = "4dec9dad3dc8585f862fed461d2e19bbf623df30";
- };
- }
-
- {
- name = "url___url_0.11.0.tgz";
- path = fetchurl {
- name = "url___url_0.11.0.tgz";
- url = "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz";
- sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
- };
- }
-
- {
- name = "use___use_3.1.1.tgz";
- path = fetchurl {
- name = "use___use_3.1.1.tgz";
- url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz";
- sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f";
- };
- }
-
- {
- name = "util_deprecate___util_deprecate_1.0.2.tgz";
- path = fetchurl {
- name = "util_deprecate___util_deprecate_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz";
- sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
- };
- }
-
- {
- name = "util___util_0.10.3.tgz";
- path = fetchurl {
- name = "util___util_0.10.3.tgz";
- url = "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz";
- sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
- };
- }
-
- {
- name = "util___util_0.10.4.tgz";
- path = fetchurl {
- name = "util___util_0.10.4.tgz";
- url = "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz";
- sha1 = "3aa0125bfe668a4672de58857d3ace27ecb76901";
- };
- }
-
- {
- name = "utila___utila_0.3.3.tgz";
- path = fetchurl {
- name = "utila___utila_0.3.3.tgz";
- url = "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz";
- sha1 = "d7e8e7d7e309107092b05f8d9688824d633a4226";
- };
- }
-
- {
- name = "utila___utila_0.4.0.tgz";
- path = fetchurl {
- name = "utila___utila_0.4.0.tgz";
- url = "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz";
- sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c";
- };
- }
-
- {
- name = "utils_merge___utils_merge_1.0.1.tgz";
- path = fetchurl {
- name = "utils_merge___utils_merge_1.0.1.tgz";
- url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz";
- sha1 = "9f95710f50a267947b2ccc124741c1028427e713";
- };
- }
-
- {
- name = "uuid___uuid_3.3.2.tgz";
- path = fetchurl {
- name = "uuid___uuid_3.3.2.tgz";
- url = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz";
- sha1 = "1b4af4955eb3077c501c23872fc6513811587131";
- };
- }
-
- {
- name = "validate_npm_package_license___validate_npm_package_license_3.0.3.tgz";
- path = fetchurl {
- name = "validate_npm_package_license___validate_npm_package_license_3.0.3.tgz";
- url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz";
- sha1 = "81643bcbef1bdfecd4623793dc4648948ba98338";
- };
- }
-
- {
- name = "vary___vary_1.1.2.tgz";
- path = fetchurl {
- name = "vary___vary_1.1.2.tgz";
- url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz";
- sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc";
- };
- }
-
- {
- name = "vendors___vendors_1.0.2.tgz";
- path = fetchurl {
- name = "vendors___vendors_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz";
- sha1 = "7fcb5eef9f5623b156bcea89ec37d63676f21801";
- };
- }
-
- {
- name = "verror___verror_1.10.0.tgz";
- path = fetchurl {
- name = "verror___verror_1.10.0.tgz";
- url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz";
- sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
- };
- }
-
- {
- name = "vm_browserify___vm_browserify_0.0.4.tgz";
- path = fetchurl {
- name = "vm_browserify___vm_browserify_0.0.4.tgz";
- url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz";
- sha1 = "5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73";
- };
- }
-
- {
- name = "watchpack___watchpack_1.6.0.tgz";
- path = fetchurl {
- name = "watchpack___watchpack_1.6.0.tgz";
- url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz";
- sha1 = "4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00";
- };
- }
-
- {
- name = "wbuf___wbuf_1.7.3.tgz";
- path = fetchurl {
- name = "wbuf___wbuf_1.7.3.tgz";
- url = "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz";
- sha1 = "c1d8d149316d3ea852848895cb6a0bfe887b87df";
- };
- }
-
- {
- name = "webpack_chunk_hash___webpack_chunk_hash_0.5.0.tgz";
- path = fetchurl {
- name = "webpack_chunk_hash___webpack_chunk_hash_0.5.0.tgz";
- url = "https://registry.yarnpkg.com/webpack-chunk-hash/-/webpack-chunk-hash-0.5.0.tgz";
- sha1 = "1dba38203d73c1e6ab069b6810a5a37402399dec";
- };
- }
-
- {
- name = "webpack_dev_middleware___webpack_dev_middleware_1.12.2.tgz";
- path = fetchurl {
- name = "webpack_dev_middleware___webpack_dev_middleware_1.12.2.tgz";
- url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz";
- sha1 = "f8fc1120ce3b4fc5680ceecb43d777966b21105e";
- };
- }
-
- {
- name = "webpack_dev_server___webpack_dev_server_2.11.2.tgz";
- path = fetchurl {
- name = "webpack_dev_server___webpack_dev_server_2.11.2.tgz";
- url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz";
- sha1 = "1f4f4c78bf1895378f376815910812daf79a216f";
- };
- }
-
- {
- name = "webpack_sources___webpack_sources_1.1.0.tgz";
- path = fetchurl {
- name = "webpack_sources___webpack_sources_1.1.0.tgz";
- url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz";
- sha1 = "a101ebae59d6507354d71d8013950a3a8b7a5a54";
- };
- }
-
- {
- name = "webpack___webpack_3.12.0.tgz";
- path = fetchurl {
- name = "webpack___webpack_3.12.0.tgz";
- url = "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz";
- sha1 = "3f9e34360370602fcf639e97939db486f4ec0d74";
- };
- }
-
- {
- name = "websocket_driver___websocket_driver_0.7.0.tgz";
- path = fetchurl {
- name = "websocket_driver___websocket_driver_0.7.0.tgz";
- url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz";
- sha1 = "0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb";
- };
- }
-
- {
- name = "websocket_extensions___websocket_extensions_0.1.3.tgz";
- path = fetchurl {
- name = "websocket_extensions___websocket_extensions_0.1.3.tgz";
- url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz";
- sha1 = "5d2ff22977003ec687a4b87073dfbbac146ccf29";
- };
- }
-
- {
- name = "whet.extend___whet.extend_0.9.9.tgz";
- path = fetchurl {
- name = "whet.extend___whet.extend_0.9.9.tgz";
- url = "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz";
- sha1 = "f877d5bf648c97e5aa542fadc16d6a259b9c11a1";
- };
- }
-
- {
- name = "which_module___which_module_1.0.0.tgz";
- path = fetchurl {
- name = "which_module___which_module_1.0.0.tgz";
- url = "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz";
- sha1 = "bba63ca861948994ff307736089e3b96026c2a4f";
- };
- }
-
- {
- name = "which_module___which_module_2.0.0.tgz";
- path = fetchurl {
- name = "which_module___which_module_2.0.0.tgz";
- url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz";
- sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
- };
- }
-
- {
- name = "which___which_1.3.1.tgz";
- path = fetchurl {
- name = "which___which_1.3.1.tgz";
- url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz";
- sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a";
- };
- }
-
- {
- name = "wide_align___wide_align_1.1.3.tgz";
- path = fetchurl {
- name = "wide_align___wide_align_1.1.3.tgz";
- url = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz";
- sha1 = "ae074e6bdc0c14a431e804e624549c633b000457";
- };
- }
-
- {
- name = "window_size___window_size_0.1.0.tgz";
- path = fetchurl {
- name = "window_size___window_size_0.1.0.tgz";
- url = "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz";
- sha1 = "5438cd2ea93b202efa3a19fe8887aee7c94f9c9d";
- };
- }
-
- {
- name = "wordwrap___wordwrap_0.0.2.tgz";
- path = fetchurl {
- name = "wordwrap___wordwrap_0.0.2.tgz";
- url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz";
- sha1 = "b79669bb42ecb409f83d583cad52ca17eaa1643f";
- };
- }
-
- {
- name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
- path = fetchurl {
- name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
- url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
- sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85";
- };
- }
-
- {
- name = "wrappy___wrappy_1.0.2.tgz";
- path = fetchurl {
- name = "wrappy___wrappy_1.0.2.tgz";
- url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz";
- sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
- };
- }
-
- {
- name = "xtend___xtend_4.0.1.tgz";
- path = fetchurl {
- name = "xtend___xtend_4.0.1.tgz";
- url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz";
- sha1 = "a5c6d532be656e23db820efb943a1f04998d63af";
- };
- }
-
- {
- name = "y18n___y18n_3.2.1.tgz";
- path = fetchurl {
- name = "y18n___y18n_3.2.1.tgz";
- url = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz";
- sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41";
- };
- }
-
- {
- name = "yallist___yallist_2.1.2.tgz";
- path = fetchurl {
- name = "yallist___yallist_2.1.2.tgz";
- url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz";
- sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
- };
- }
-
- {
- name = "yallist___yallist_3.0.2.tgz";
- path = fetchurl {
- name = "yallist___yallist_3.0.2.tgz";
- url = "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz";
- sha1 = "8452b4bb7e83c7c188d8041c1a837c773d6d8bb9";
- };
- }
-
- {
- name = "yargs_parser___yargs_parser_4.2.1.tgz";
- path = fetchurl {
- name = "yargs_parser___yargs_parser_4.2.1.tgz";
- url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz";
- sha1 = "29cceac0dc4f03c6c87b4a9f217dd18c9f74871c";
- };
- }
-
- {
- name = "yargs_parser___yargs_parser_5.0.0.tgz";
- path = fetchurl {
- name = "yargs_parser___yargs_parser_5.0.0.tgz";
- url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz";
- sha1 = "275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a";
- };
- }
-
- {
- name = "yargs_parser___yargs_parser_7.0.0.tgz";
- path = fetchurl {
- name = "yargs_parser___yargs_parser_7.0.0.tgz";
- url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz";
- sha1 = "8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9";
- };
- }
-
- {
- name = "yargs___yargs_6.6.0.tgz";
- path = fetchurl {
- name = "yargs___yargs_6.6.0.tgz";
- url = "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz";
- sha1 = "782ec21ef403345f830a808ca3d513af56065208";
- };
- }
-
- {
- name = "yargs___yargs_7.1.0.tgz";
- path = fetchurl {
- name = "yargs___yargs_7.1.0.tgz";
- url = "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz";
- sha1 = "6ba318eb16961727f5d284f8ea003e8d6154d0c8";
- };
- }
-
- {
- name = "yargs___yargs_8.0.2.tgz";
- path = fetchurl {
- name = "yargs___yargs_8.0.2.tgz";
- url = "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz";
- sha1 = "6299a9055b1cefc969ff7e79c1d918dceb22c360";
- };
- }
-
- {
- name = "yargs___yargs_3.10.0.tgz";
- path = fetchurl {
- name = "yargs___yargs_3.10.0.tgz";
- url = "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz";
- sha1 = "f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1";
- };
- }
- ];
-}
diff --git a/modules/private/websites/isabelle/aten_integration.nix b/modules/private/websites/isabelle/aten_integration.nix
deleted file mode 100644
index c55ef92..0000000
--- a/modules/private/websites/isabelle/aten_integration.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.isabelle.aten_integration;
- webRoot = "/var/lib/ftp/immae/aten/public";
- cfg = config.myServices.websites.isabelle.aten_integration;
- pcfg = config.services.phpApplication;
-in {
- options.myServices.websites.isabelle.aten_integration.enable = lib.mkEnableOption "enable Aten's website in integration";
-
- config = lib.mkIf cfg.enable {
- services.phpApplication.apps.isabelle_aten_integration = {
- websiteEnv = "integration";
- httpdUser = config.services.httpd.Inte.user;
- httpdGroup = config.services.httpd.Inte.group;
- httpdWatchFiles = [
- config.secrets.fullPaths."websites/isabelle/aten_integration"
- ];
- inherit webRoot;
- varDir = "/var/lib/ftp/immae/aten_var";
- app = "/var/lib/ftp/immae/aten";
- serviceDeps = [ "postgresql.service" ];
- preStartActions = [
- "APP_ENV=dev ./bin/console --env=dev cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
- };
- phpEnv = {
- SYMFONY_DEBUG_MODE = "\"yes\"";
- };
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/isabelle/aten_integration" = {
- user = config.services.httpd.Inte.user;
- group = config.services.httpd.Inte.group;
- permissions = "0400";
- text = let
- # cf:
- # https://secure.php.net/manual/fr/function.parse-url.php
- # vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php#parseDatabaseUrlQuery
- psql_url = with secrets.postgresql; "pdo-pgsql://${user}:${password}@invalid:${port}/${database}?host=${socket}";
- in ''
- SetEnv APP_ENV "dev"
- SetEnv APP_SECRET "${secrets.secret}"
- SetEnv DATABASE_URL "${psql_url}"
- '';
- };
- services.websites.env.integration.vhostConfs.isabelle_aten_integration = {
- certName = "integration";
- addToCerts = true;
- hosts = [ "aten.ic.immae.dev" ];
- root = webRoot;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.isabelle_aten_integration}|fcgi://localhost"
-
-
- Include ${config.secrets.fullPaths."websites/isabelle/aten_integration"}
-
-
- Use LDAPConnect
- Require ldap-group cn=ic.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
-
-
- Use LDAPConnect
- Require ldap-group cn=ic.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
- DirectoryIndex index.php
- FallbackResource /index.php
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/isabelle/aten_production.nix b/modules/private/websites/isabelle/aten_production.nix
deleted file mode 100644
index 928a815..0000000
--- a/modules/private/websites/isabelle/aten_production.nix
+++ /dev/null
@@ -1,90 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.isabelle.aten_production;
- app = pkgs.callPackage ./aten_app {
- composerEnv = pkgs.composerEnv.override { php = pkgs.php72; };
- environment = secrets.environment;
- varDir = "/var/lib/isabelle_aten_production";
- };
- cfg = config.myServices.websites.isabelle.aten_production;
- pcfg = config.services.phpApplication;
-in {
- options.myServices.websites.isabelle.aten_production.enable = lib.mkEnableOption "enable Aten's website in production";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "aten.pro"; } ];
- services.phpApplication.apps.isabelle_aten_production = {
- websiteEnv = "production";
- httpdUser = config.services.httpd.Prod.user;
- httpdGroup = config.services.httpd.Prod.group;
- httpdWatchFiles = [
- config.secrets.fullPaths."websites/isabelle/aten_production"
- ];
- inherit (app) webRoot varDir;
- inherit app;
- serviceDeps = [ "postgresql.service" ];
- preStartActions = [
- "APP_ENV=${app.environment} ./bin/console --env=${app.environment} cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "dynamic";
- "pm.max_children" = "20";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "3";
- };
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/isabelle/aten_production" = {
- user = config.services.httpd.Prod.user;
- group = config.services.httpd.Prod.group;
- permissions = "0400";
- text = let
- # cf:
- # https://secure.php.net/manual/fr/function.parse-url.php
- # vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php#parseDatabaseUrlQuery
- psql_url = with secrets.postgresql; "pdo-pgsql://${user}:${password}@invalid:${port}/${database}?host=${socket}";
- in ''
- SetEnv APP_ENV "${app.environment}"
- SetEnv APP_SECRET "${secrets.secret}"
- SetEnv DATABASE_URL "${psql_url}"
- '';
- };
- services.websites.env.production.vhostConfs.isabelle_aten_production = {
- certName = "isabelle";
- certMainHost = "aten.pro";
- hosts = [ "aten.pro" "www.aten.pro" ];
- root = app.webRoot;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.isabelle_aten_production}|fcgi://localhost"
-
-
- Include ${config.secrets.fullPaths."websites/isabelle/aten_production"}
-
- Use Stats aten.pro
-
-
- Use LDAPConnect
- Require ldap-group cn=aten.pro,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
- DirectoryIndex index.php
- FallbackResource /index.php
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/isabelle/config/chmod.php b/modules/private/websites/isabelle/config/chmod.php
deleted file mode 100644
index aae16cd..0000000
--- a/modules/private/websites/isabelle/config/chmod.php
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/private/websites/isabelle/config/connect.php b/modules/private/websites/isabelle/config/connect.php
deleted file mode 100644
index 18b0933..0000000
--- a/modules/private/websites/isabelle/config/connect.php
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/modules/private/websites/isabelle/config/ldap.php b/modules/private/websites/isabelle/config/ldap.php
deleted file mode 100644
index 825b7ed..0000000
--- a/modules/private/websites/isabelle/config/ldap.php
+++ /dev/null
@@ -1,9 +0,0 @@
- array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',);
-$GLOBALS['ldap_search'] = getenv("SPIP_LDAP_SEARCH");
-?>
diff --git a/modules/private/websites/isabelle/iridologie.nix b/modules/private/websites/isabelle/iridologie.nix
deleted file mode 100644
index cd733c1..0000000
--- a/modules/private/websites/isabelle/iridologie.nix
+++ /dev/null
@@ -1,113 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- icfg = config.myEnv.websites.isabelle.iridologie;
- cfg = config.myServices.websites.isabelle.iridologie;
- app = pkgs.callPackage ./iridologie_app {
- inherit (icfg) environment;
- inherit (pkgs.webapps) spip;
- varDir = "/var/lib/isabelle_iridologie";
- };
-
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
- secretsPath = config.secrets.fullPaths."websites/isabelle/iridologie";
-in {
- options.myServices.websites.isabelle.iridologie.enable = lib.mkEnableOption "enable Iridologie's website";
-
- config = lib.mkIf cfg.enable {
- secrets.keys."websites/isabelle/iridologie" = {
- user = apacheUser;
- group = apacheGroup;
- permissions = "0400";
- text = ''
- SetEnv SPIP_CONFIG_DIR "${./config}"
- SetEnv SPIP_VAR_DIR "${app.varDir}"
- SetEnv SPIP_SITE "iridologie-${app.environment}"
- SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu"
- SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu"
- SetEnv SPIP_LDAP_SEARCH_DN "${icfg.ldap.dn}"
- SetEnv SPIP_LDAP_SEARCH_PW "${icfg.ldap.password}"
- SetEnv SPIP_LDAP_SEARCH "${icfg.ldap.filter}"
- SetEnv SPIP_MYSQL_HOST "${icfg.mysql.host}"
- SetEnv SPIP_MYSQL_PORT "${icfg.mysql.port}"
- SetEnv SPIP_MYSQL_DB "${icfg.mysql.database}"
- SetEnv SPIP_MYSQL_USER "${icfg.mysql.user}"
- SetEnv SPIP_MYSQL_PASSWORD "${icfg.mysql.password}"
- '';
- };
- services.webstats.sites = [ { name = "iridologie.icommandeur.org"; } ];
-
- systemd.services.phpfpm-isabelle_iridologie.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-isabelle_iridologie.wants = [ "mysql.service" ];
- services.phpfpm.pools.isabelle_iridologie = {
- user = config.services.httpd.Prod.user;
- group = config.services.httpd.Prod.group;
- settings = {
- "listen.owner" = "${apacheUser}";
- "listen.group" = "${apacheGroup}";
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "php_admin_value[open_basedir]" = "${app.spipConfig}:${./config}:${app}:${app.varDir}:/tmp";
- "php_admin_value[session.save_path]" = "${app.varDir}/phpSessions";
- "pm" = "dynamic";
- "pm.max_children" = "20";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "3";
- };
- phpPackage = pkgs.php72;
- };
- system.activationScripts.isabelle_iridologie = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} ${app.varDir}/IMG ${app.varDir}/tmp ${app.varDir}/local
- install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions
- '';
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.isabelle_iridologie = {
- certName = "isabelle";
- addToCerts = true;
- hosts = [ "iridologie.icommandeur.org" "icommandeur.org" "www.icommandeur.org" ];
- root = app.webRoot;
- extraConfig = [
- ''
- RewriteEngine On
- RewriteCond "%{HTTP_HOST}" "!^iridologie\.icommandeur\.org$" [NC]
- RewriteRule ^(.+)$ https://iridologie.icommandeur.org$1 [R=302,L]
-
- Include ${secretsPath}
-
- RewriteEngine On
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.isabelle_iridologie.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.php index.htm index.html
- Options -Indexes +FollowSymLinks +MultiViews +Includes
- Include ${app.webRoot}/htaccess.txt
-
- AllowOverride AuthConfig FileInfo Limit
- Require all granted
-
-
-
- Require all denied
-
-
-
- Require all denied
-
-
- Use Stats iridologie.icommandeur.org
- ''
- ];
- };
- services.websites.env.production.watchPaths = [
- secretsPath
- ];
- };
-}
diff --git a/modules/private/websites/isabelle/iridologie_app/default.nix b/modules/private/websites/isabelle/iridologie_app/default.nix
deleted file mode 100644
index edb7eef..0000000
--- a/modules/private/websites/isabelle/iridologie_app/default.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ environment ? "prod"
-, varDir ? "/var/lib/iridologie_${environment}"
-, spip, stdenv, sassc, sources }:
-let
- siteDir = stdenv.mkDerivation rec {
- version = sources.websites-isabelle-iridologie.version;
- pname = "iridologie";
- name = "${pname}-${version}";
- src = sources.websites-isabelle-iridologie;
- installPhase = ''
- cp -a . $out
- '';
- };
-in
-spip.override {
- ldap = true;
- siteName = "iridologie";
- inherit environment siteDir varDir;
-}
diff --git a/modules/private/websites/jerome/naturaloutil.nix b/modules/private/websites/jerome/naturaloutil.nix
deleted file mode 100644
index 0974ce3..0000000
--- a/modules/private/websites/jerome/naturaloutil.nix
+++ /dev/null
@@ -1,97 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; };
- cfg = config.myServices.websites.jerome.naturaloutil;
- varDir = "/var/lib/ftp/jerome";
- env = config.myEnv.websites.jerome;
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
- secretsPath = config.secrets.fullPaths."websites/jerome/naturaloutil";
-in {
- options.myServices.websites.jerome.naturaloutil.enable = lib.mkEnableOption "enable Jerome Naturaloutil's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "naturaloutil.immae.eu"; } ];
-
- security.acme.certs."ftp".extraDomains."naturaloutil.immae.eu" = null;
-
- secrets.keys."websites/jerome/naturaloutil" = {
- user = apacheUser;
- group = apacheGroup;
- permissions = "0400";
- text = ''
- ssl_set(NULL, NULL, "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt", NULL, NULL);
- '' else ""}
- $database = connect_db($db, $mysql_server, $mysql_base, $mysql_user, $mysql_password);
- ?>
- '';
- };
- system.activationScripts.jerome_naturaloutil = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/jerome_naturaloutil
- '';
- };
- systemd.services.phpfpm-jerome_naturaloutil.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-jerome_naturaloutil.wants = [ "mysql.service" ];
- services.phpfpm.pools.jerome_naturaloutil = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/jerome_naturaloutil:${secretsPath}:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/jerome_naturaloutil";
- };
- phpEnv = {
- BDD_CONNECT = secretsPath;
- };
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = adminer.apache.modules ++ [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.jerome_naturaloutil = {
- certName = "jerome";
- certMainHost = "naturaloutil.immae.eu";
- hosts = ["naturaloutil.immae.eu" ];
- root = varDir;
- extraConfig = [
- (adminer.apache.vhostConf null)
- ''
- Use Stats naturaloutil.immae.eu
- ServerAdmin ${env.server_admin}
- ErrorLog "${varDir}/logs/error_log"
- CustomLog "${varDir}/logs/access_log" combined
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.jerome_naturaloutil.socket}|fcgi://localhost"
-
-
-
- AllowOverride None
- Require all denied
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/leila/production.nix b/modules/private/websites/leila/production.nix
deleted file mode 100644
index 8385bc7..0000000
--- a/modules/private/websites/leila/production.nix
+++ /dev/null
@@ -1,114 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.leila.production;
- varDir = "/var/lib/ftp/leila";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.leila.production.enable = lib.mkEnableOption "enable Leila's websites in production";
-
- config = lib.mkIf cfg.enable {
- services.phpfpm.pools.leila = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "${varDir}:/tmp";
- "php_admin_value[max_execution_time]" = "1800";
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- disable_functions = "mail"
- '';
- phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.imagick ]);
- phpEnv = {
- PATH = lib.makeBinPath [ pkgs.imagemagick ];
- };
- };
-
- services.webstats.sites = [
- { name = "leila.bouya.org"; }
- { name = "chorale.leila.bouya.org"; }
- { name = "syrwennecreation.bouya.org"; }
- ];
-
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.leila_chorale = {
- certName = "leila";
- addToCerts = true;
- hosts = [ "chorale.leila.bouya.org" "chorale-vocanta.fr.nf" "www.chorale-vocanta.fr.nf" ];
- root = "${varDir}/Chorale";
- extraConfig = [
- ''
- Use Stats chorale.leila.bouya.org
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
-
- Use LDAPConnect
- Require ldap-group cn=chorale.leila.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.leila.socket}|fcgi://localhost"
-
-
- ''
- ];
- };
- services.websites.env.production.vhostConfs.leila_syrwenne = {
- certName = "leila";
- addToCerts = true;
- hosts = [ "syrwennecreation.bouya.org" ];
- root = "${varDir}/Syrwennecreation";
- extraConfig = [
- ''
- Use Stats syrwennecreation.bouya.org
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.leila.socket}|fcgi://localhost"
-
-
- ''
- ];
- };
- services.websites.env.production.vhostConfs.leila = {
- certName = "leila";
- certMainHost = "leila.bouya.org";
- hosts = [ "leila.bouya.org" ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats leila.bouya.org
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
-
- Use LDAPConnect
- Require ldap-group cn=chorale.leila.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.leila.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/ludivine/app/default.nix b/modules/private/websites/ludivine/app/default.nix
deleted file mode 100644
index 323b6e0..0000000
--- a/modules/private/websites/ludivine/app/default.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ environment, varDir, secretsPath
-, composerEnv, fetchurl, fetchgit, imagemagick, sass, ruby, sources }:
-let
- app = composerEnv.buildPackage (
- import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } //
- rec {
- name = "${pname}-${version}";
- pname = "ludivinecassal";
- version = sources.websites-ludivine-app.version;
- src = sources.websites-ludivine-app;
- noDev = (environment == "prod");
- preInstall = ''
- export SYMFONY_ENV="${environment}"
- cp app/config/parameters.yml.dist app/config/parameters.yml
- cat >> app/config/parameters.yml <
- SetHandler "proxy:unix:${pcfg.phpListenPaths.ludivine_integration}|fcgi://localhost"
-
-
-
- Use LDAPConnect
- Require ldap-group cn=lc.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- DirectoryIndex app_dev.php
-
-
- Options -MultiViews
-
-
-
- RewriteEngine On
-
- RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
- RewriteRule ^(.*) - [E=BASE:%1]
-
- # Maintenance script
- RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
- RewriteCond %{SCRIPT_FILENAME} !maintenance.php
- RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L]
- ErrorDocument 503 /maintenance.php
-
- # Sets the HTTP_AUTHORIZATION header removed by Apache
- RewriteCond %{HTTP:Authorization} .
- RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- RewriteCond %{ENV:REDIRECT_STATUS} ^$
- RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
-
- # If the requested filename exists, simply serve it.
- # We only want to let Apache serve files and not directories.
- RewriteCond %{REQUEST_FILENAME} -f
- RewriteRule ^ - [L]
-
- # Rewrite all other queries to the front controller.
- RewriteRule ^ %{ENV:BASE}/app_dev.php [L]
-
-
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/ludivine/production.nix b/modules/private/websites/ludivine/production.nix
deleted file mode 100644
index 7a18b88..0000000
--- a/modules/private/websites/ludivine/production.nix
+++ /dev/null
@@ -1,116 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.ludivine.production;
- app = pkgs.callPackage ./app {
- composerEnv = pkgs.composerEnv.override { php = pkgs.php72; };
- environment = secrets.environment;
- varDir = "/var/lib/ludivine_production";
- secretsPath = config.secrets.fullPaths."websites/ludivine/production";
- };
- pcfg = config.services.phpApplication;
- cfg = config.myServices.websites.ludivine.production;
-in {
- options.myServices.websites.ludivine.production.enable = lib.mkEnableOption "enable Ludivine's website in production";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "ludivinecassal.com"; } ];
- services.phpApplication.apps.ludivine_production = {
- websiteEnv = "production";
- httpdUser = config.services.httpd.Prod.user;
- httpdGroup = config.services.httpd.Prod.group;
- inherit (app) webRoot varDir;
- varDirPaths = {
- "tmp" = "0700";
- };
- inherit app;
- serviceDeps = [ "mysql.service" ];
- preStartActions = [
- "./bin/console --env=${app.environment} cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "dynamic";
- "pm.max_children" = "20";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "3";
- };
- phpWatchFiles = [
- config.secrets.fullPaths."websites/ludivine/production"
- ];
- phpEnv = {
- PATH = lib.makeBinPath [
- # below ones don't need to be in the PATH but they’re used in
- # secrets
- pkgs.imagemagick pkgs.sass pkgs.ruby
- ];
- };
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/ludivine/production" = {
- user = config.services.httpd.Prod.user;
- group = config.services.httpd.Prod.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_host: ${secrets.mysql.host}
- database_port: ${secrets.mysql.port}
- database_name: ${secrets.mysql.database}
- database_user: ${secrets.mysql.user}
- database_password: ${secrets.mysql.password}
- database_server_version: ${pkgs.mariadb.mysqlVersion}
- mailer_transport: smtp
- mailer_host: 127.0.0.1
- mailer_user: null
- mailer_password: null
- secret: ${secrets.secret}
- ldap_host: ldap.immae.eu
- ldap_port: 636
- ldap_version: 3
- ldap_ssl: true
- ldap_tls: false
- ldap_user_bind: 'uid={username},ou=users,dc=immae,dc=eu'
- ldap_base_dn: 'dc=immae,dc=eu'
- ldap_search_dn: '${secrets.ldap.dn}'
- ldap_search_password: '${secrets.ldap.password}'
- ldap_search_filter: '${secrets.ldap.filter}'
- leapt_im:
- binary_path: ${pkgs.imagemagick}/bin
- assetic:
- sass: ${pkgs.sass}/bin/sass
- ruby: ${pkgs.ruby}/bin/ruby
- '';
- };
-
- services.websites.env.production.vhostConfs.ludivine_production = {
- certName = "ludivine";
- certMainHost = "ludivinecassal.com";
- hosts = ["ludivinecassal.com" "www.ludivinecassal.com" ];
- root = app.webRoot;
- extraConfig = [
- ''
- RewriteEngine on
- RewriteCond "%{HTTP_HOST}" "!^ludivinecassal\.com$" [NC]
- RewriteRule ^(.+)$ https://ludivinecassal.com$1 [R=302,L]
-
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.ludivine_production}|fcgi://localhost"
-
-
- Use Stats ludivinecassal.com
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/moomin.txt b/modules/private/websites/moomin.txt
deleted file mode 100644
index 036fb1c..0000000
--- a/modules/private/websites/moomin.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-⠀⠀⠀⠀⠀⠀⠀⢠⢦⡀⠀⡰⣩⠃
-⠀⠀⠀⠀⠀⠀⠀⠘⣄⠙⠍⠁⠙⠦⡀
-⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⡠⠄⠔⠊⠉⠒⠒⠒⢄
-⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠆
-⠀⠀⢠⢤⠜⡆⠀⢸⠀⠰⣄⠀⠀⠀⠀⠀⠀⠀⣠⠎
-⠀⠀⠱⠤⡁⠈⠑⠇⠀⠀⠀⠉⠒⠤⠤⠄⢖⠊⠀⡐⠧⣄⣀
-⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡉⠀⣀⣨⡷
-⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢱⠜⠁
-⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣸⠱⡀
-⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⣣
-⠀⠀⠀⠀⠀⠀⠀⠑⣄⠀⠀⠀⠀⠀⠀⠀⢀⣠⣀⠴⠊⠁
-⠰⢍⢒⢄⠀⠀⠀⠀⢸⢳⢆⠀⠀⠀⠰⡖⠋⠁
-⠀⠳⠴⣙⢄⠀⢀⡠⣣⠃⠈⠑⢤⡄⠀⡸⠂
-⠀⠀⠀⠀⠑⠋⠓⠊⠁⠀⠀⠀⠓⠒⠉
-Credentials: https://twitter.com/thingskatedid/status/1278274012754309120
-Credentials: https://gist.github.com/katef/09581d7c84eddf784508fa430f6ef47a
diff --git a/modules/private/websites/nassime/production.nix b/modules/private/websites/nassime/production.nix
deleted file mode 100644
index 1179351..0000000
--- a/modules/private/websites/nassime/production.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.nassime.production;
- varDir = "/var/lib/ftp/nassime";
- env = config.myEnv.websites.nassime;
- domain = "nassime.bouya.org";
-in {
- options.myServices.websites.nassime.production.enable = lib.mkEnableOption "enable Nassime's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = domain; } ];
-
- security.acme.certs."ftp".extraDomains."${domain}" = null;
-
- services.websites.env.production.vhostConfs.nassime = {
- certName = "nassime";
- certMainHost = domain;
- hosts = [ domain ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats ${domain}
- ServerAdmin ${env.server_admin}
-
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/nath/villon.nix b/modules/private/websites/nath/villon.nix
deleted file mode 100644
index 57a1df5..0000000
--- a/modules/private/websites/nath/villon.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.nath.villon;
- varDir = "/var/lib/ftp/nath";
- env = config.myEnv.websites.nath;
- domain = "sntvillon.immae.eu";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.nath.villon.enable = lib.mkEnableOption "enable Nath's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = domain; } ];
-
- system.activationScripts.nath_villon = {
- deps = [ "users" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir}
- '';
- };
- security.acme.certs."ftp".extraDomains."${domain}" = null;
-
- services.websites.env.production.vhostConfs.nath_villon = {
- certName = "nath";
- certMainHost = domain;
- hosts = [ domain ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats ${domain}
-
-
- DirectoryIndex index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/papa/maison_bbc.nix b/modules/private/websites/papa/maison_bbc.nix
deleted file mode 100644
index 3eb736e..0000000
--- a/modules/private/websites/papa/maison_bbc.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ lib, config, ... }:
-let
- cfg = config.myServices.websites.papa.maison_bbc;
-in {
- options.myServices.websites.papa.maison_bbc.enable = lib.mkEnableOption "enable Papa Maison bbc website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "maison.bbc.bouya.org"; } ];
-
- services.websites.env.production.vhostConfs.papa_maison_bbc = {
- certName = "papa";
- addToCerts = true;
- hosts = [ "maison.bbc.bouya.org" ];
- root = ./maison_bbc_static;
- extraConfig = [
- ''
- ErrorDocument 404 /index.html
-
- DirectoryIndex index.htm index.html
- AllowOverride None
- Require all granted
-
- ''
- ];
- };
- };
-}
-
diff --git a/modules/private/websites/papa/maison_bbc_static/data.json b/modules/private/websites/papa/maison_bbc_static/data.json
deleted file mode 100644
index 1784d27..0000000
--- a/modules/private/websites/papa/maison_bbc_static/data.json
+++ /dev/null
@@ -1,4101 +0,0 @@
-{
- "mean_consumption": {
- "data": [
- {
- "x": "2010-01-01 00:00:00",
- "y": 0
- },
- {
- "x": "2012-06-01 00:00:00",
- "y": 0.3
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 0.3
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 0.7
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 8.1
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 8.8
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 8.2
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 7.2
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 1.2
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 0
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 0.8
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 0.4
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 0.6
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2020-04-01 00:00:00",
- "y": 0.5
- },
- {
- "x": "2020-05-01 00:00:00",
- "y": 0.5
- }
- ],
- "name": "Consommation moyenne",
- "unit": "kW",
- "hide": false
- },
- "total_consumption": {
- "data": [
- {
- "x": "2010-01-01 00:00:00",
- "y": 74.8
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 629
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 859.3
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 1150.7
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 1440.1
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 1829.6
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 2218.6
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 468.7
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 2924.1
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": -3217.1
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": -2847.2
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 224.6
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 536.5
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 882
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 1207.7
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 1565.4
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 1924.1
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 2323.5
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 2754.8
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 3176.7
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 3530.1
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 3975
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 4364.8
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 1485.8
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 9.3
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 6
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 10
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 10.9
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 13.1
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 1.6
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 2.1
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 2.8
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 2.2
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 2.8
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 0
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 2.1
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 43.2
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 78.6
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 118.2
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 155.2
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 203.1
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 213.7
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 4567.8
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 46.2
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 404.3
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 711.3
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 1098.7
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 1365.4
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 1705.3
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 2041.5
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 2400.8
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 2816.8
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 3236.5
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 3610
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 4047.8
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 4447.2
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 4704.1
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 260.9
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 502.7
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 896.9
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 1268.4
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 1625.5
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 1944.8
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 2256.8
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 2714.7
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 314.9
- },
- {
- "x": "2020-04-01 00:00:00",
- "y": 679.7
- },
- {
- "x": "2020-05-01 00:00:00",
- "y": 1084.7
- }
- ],
- "name": "Consommation totale",
- "unit": "kWh",
- "hide": false
- },
- "Chambre_RDC_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 25.1
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 18
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 20
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 20.1
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 15.6
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 18.1
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 25.1
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 21.4
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 20.4
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 20.5
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 19.8
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 21.9
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 25
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 22.4
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 18.2
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 20
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 20
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 19.6
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 21.4
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 20.4
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 24.2
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 24.5
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 23.6
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 19.5
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 19.8
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 20.4
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 19.8
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 19.5
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 22.9
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 24
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 21.1
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 23.4
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 22.9
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 22
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 19.7
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 20
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 20
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 20.2
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 21.1
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 23.8
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 23.6
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 22
- }
- ],
- "name": "Chambre_RDC",
- "unit": "°C",
- "hide": false
- },
- "Exterieure_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 18.6
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 20.2
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 24.7
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 23.2
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 13.3
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 6.1
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 3.3
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 1.9
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 6.6
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 10.2
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 11.2
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 16.9
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 28.9
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 16.9
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 5.9
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 4.5
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 6.9
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 6.8
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 8.3
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 11.6
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 12
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 17.3
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 13.5
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 9.9
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 4.5
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 4.4
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 4.4
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 7.7
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 12.4
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 14.1
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 18.8
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 14.3
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 10.4
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 9.3
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 7.7
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 6
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 5.6
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 6.6
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 9.6
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 14.5
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 17.9
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 20.4
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 14.2
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 9.7
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 16.8
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 21.4
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 15.8
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 14.2
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 7.5
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 4.2
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 10.2
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 17.6
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 16.1
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 22.4
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 30
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 19.8
- }
- ],
- "name": "Exterieure",
- "unit": "°C",
- "hide": false
- },
- "Sejour_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 23
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 25.3
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 20.1
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 20
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 15.8
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 20.5
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 20.8
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 25
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 22.9
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 21.2
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 25.6
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 18
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 20
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 20
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 19.6
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 21.8
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 20.5
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 21.6
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 23.1
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 21.4
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 21.1
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 20.1
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 20.1
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 20.2
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 19.7
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 21.6
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 23.2
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 24.7
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 24.5
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 21
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 24
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 24.3
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 21.6
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 23.8
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 23.8
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 24.6
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 23.5
- }
- ],
- "name": "Sejour",
- "unit": "°C",
- "hide": false
- },
- "Garage_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 20.2
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 19.4
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 17
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 13.8
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 9.2
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 7.6
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 5.3
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 3.4
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 7.3
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 10.7
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 12.4
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 17.2
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 23
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 20.2
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 17.1
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 14.5
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 8.2
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 5.9
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 7.9
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 7.6
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 9
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 12.6
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 14.2
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 14.6
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 11.2
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 6.7
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 6.3
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 5.1
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 8.6
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 13.3
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 14.2
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 23.2
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 21.8
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 16.3
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 12.5
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 10.8
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 7.5
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 55.6
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 8
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 11.4
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 15.2
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 18.5
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 18.8
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 15.2
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 11.5
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 16.7
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 21.1
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 16.4
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 14.2
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 9
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 7
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 9.3
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 4
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 9.4
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 12.9
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 13.9
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 14.1
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 16.4
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 24
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 24.2
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2020-05-01 00:00:00",
- "y": 21
- }
- ],
- "name": "Garage",
- "unit": "°C",
- "hide": true
- },
- "Soufflage_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 22
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 24.1
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 18.1
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 14.6
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 16.5
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 16.7
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 13.4
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 18.2
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 19.8
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 20.4
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 24.9
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 20.2
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 17
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 17.8
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 18.3
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 17.8
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 19.1
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 24.1
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 6.6
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 6.4
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 4.8
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 9.9
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 15.3
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 15.8
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 20.1
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 21.8
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 21.9
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 17.1
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 13.2
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 12.8
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 11.1
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 11.7
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 11.3
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 24.2
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 18.5
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 24.2
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 23.8
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 23
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 19.3
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 14.6
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 14.9
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 16.4
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 13.5
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 14.7
- }
- ],
- "name": "Soufflage",
- "unit": "°C",
- "hide": true
- },
- "Mezzanine_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 25.9
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 23.1
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 19.7
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 19.4
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 19
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 15.3
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 20.5
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 20.8
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 25.7
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 23.1
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 23
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 19.5
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 20
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 20
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 19.6
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 21.1
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 21.6
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 22.3
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 25.9
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 19.6
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 17.6
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 19.9
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 19.5
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 21.6
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 25.4
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 25.1
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 24.2
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 21.8
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 24.9
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 24.9
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 24.2
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 23.2
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 25.6
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 23.9
- }
- ],
- "name": "Mezzanine",
- "unit": "°C",
- "hide": false
- },
- "Extraction_temperature": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 22
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 22.4
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 24.6
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 19.2
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 17.3
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 18.4
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 20.3
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 16.2
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 20.8
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 21.4
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 21.7
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 25.5
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 19.3
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 20.6
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 20.8
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 18.8
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": -90.2
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 24
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 20.4
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 24.7
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 21.8
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 17.9
- }
- ],
- "name": "Extraction",
- "unit": "°C",
- "hide": true
- },
- "Bureau_temperature": {
- "data": [
- {
- "x": "2012-08-01 00:00:00",
- "y": 26
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 26.3
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 24.8
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 23.6
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 18
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 23.2
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 26.1
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 22.2
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 22.9
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 23.6
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 27
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 24
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 22.5
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 20.9
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 23.5
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 22.4
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 23.3
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 23.2
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 26
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 26.3
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 24.3
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 22.6
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 22.5
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 22
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 20.8
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 22.8
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 22.1
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 23.1
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 24.4
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 26.3
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 26
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 24.9
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 22.9
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 23.9
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 24.6
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 25.2
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 33.8
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 38.6
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 35.3
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 35.2
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 36.2
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 24.3
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 23.6
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 24.6
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 24.8
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 26.1
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 26.5
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 30
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 27.5
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 25.3
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 26.1
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 25.2
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 27.3
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 30.2
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 25.6
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 36
- },
- {
- "x": "2020-04-01 00:00:00",
- "y": 35.2
- },
- {
- "x": "2020-05-01 00:00:00",
- "y": 37.4
- }
- ],
- "name": "Bureau",
- "unit": "°C",
- "hide": false
- },
- "Temp_Nord_temperature": {
- "data": [
- {
- "x": "2012-08-01 00:00:00",
- "y": 22.9
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 15.4
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 12.8
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 8.5
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 18.1
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 22
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 16.8
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 21.2
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 21.3
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 21.9
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 26.2
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 24.5
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 23.6
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 22
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 22.5
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 22.7
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 22.5
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 20.7
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 21.5
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 22.4
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 23.4
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 26.8
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 23.7
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 22.1
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 19.2
- }
- ],
- "name": "Temp_Nord",
- "unit": "°C",
- "hide": true
- },
- "Chambre_RDC_hygrometrie": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 63
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 59
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 56
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 54
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 59
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 67
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 62
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 46
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 42
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 44
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 47
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 50
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 56
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 60
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 59
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 59
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 62
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 49
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 45
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 52
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 48
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 47
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 48
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 53
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 63
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 57
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 56
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 47
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 47
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 43
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 47
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 47
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 46
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 56
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 54
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 59
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 54
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 57
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 59
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 63
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 64
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 59
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 55
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 53
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 52
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 61
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 58
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 52
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 54
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 56
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 51
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 58
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 60
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 60
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 59
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 55
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 54
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 60
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 49
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 51
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 43
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 44
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 49
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 59
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 61
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 56
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 51
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 41
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 43
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 50
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 57
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 52
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 48
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 51
- }
- ],
- "name": "Chambre_RDC",
- "unit": "%",
- "hide": false
- },
- "Exterieure_hygrometrie": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 63
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 59
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 50
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 49
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 53
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 69
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 82
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 85
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 80
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 72
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 67
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 74
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 70
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 40
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 75
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 84
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 74
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 79
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 74
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 65
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 66
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 67
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 68
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 76
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 79
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 82
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 81
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 70
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 69
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 60
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 82
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 68
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 55
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 59
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 65
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 74
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 75
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 69
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 78
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 76
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 67
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 67
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 64
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 68
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 54
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 48
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 49
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 46
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 48
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 41
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 48
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 62
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 54
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 56
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 59
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 62
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 50
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 41
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 61
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 43
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 35
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 37
- }
- ],
- "name": "Exterieure",
- "unit": "%",
- "hide": false
- },
- "Sejour_hygrometrie": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 60
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 57
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 54
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 52
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 55
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 63
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 61
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 45
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 41
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 43
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 45
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 52
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 60
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 58
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 56
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 60
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 48
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 44
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 51
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 46
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 44
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 45
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 49
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 61
- },
- {
- "x": "2014-10-01 00:00:00",
- "y": 54
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 52
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 46
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 46
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 41
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 45
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 44
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 47
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 54
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 53
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 55
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 49
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 54
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 55
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 59
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 63
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 60
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 52
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 50
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 48
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 57
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 55
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 49
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 51
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 51
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 47
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 54
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 57
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 57
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 57
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 52
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 50
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 56
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 47
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 50
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 41
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 41
- },
- {
- "x": "2018-04-01 00:00:00",
- "y": 46
- },
- {
- "x": "2018-05-01 00:00:00",
- "y": 56
- },
- {
- "x": "2018-06-01 00:00:00",
- "y": 58
- },
- {
- "x": "2018-07-01 00:00:00",
- "y": 54
- },
- {
- "x": "2018-08-01 00:00:00",
- "y": 48
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 36
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 39
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 46
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 54
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 49
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 45
- },
- {
- "x": "2020-03-01 00:00:00",
- "y": 45
- }
- ],
- "name": "Sejour",
- "unit": "%",
- "hide": false
- },
- "Soufflage_hygrometrie": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 64
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 59
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 58
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 60
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 71
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 84
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 66
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 40
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 41
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 38
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 39
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 43
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 50
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 58
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 55
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 47
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 40
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 48
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 40
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 37
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 45
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 47
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 82
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 84
- },
- {
- "x": "2015-02-01 00:00:00",
- "y": 78
- },
- {
- "x": "2015-03-01 00:00:00",
- "y": 72
- },
- {
- "x": "2015-04-01 00:00:00",
- "y": 54
- },
- {
- "x": "2015-05-01 00:00:00",
- "y": 75
- },
- {
- "x": "2015-06-01 00:00:00",
- "y": 72
- },
- {
- "x": "2015-07-01 00:00:00",
- "y": 60
- },
- {
- "x": "2015-08-01 00:00:00",
- "y": 61
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 61
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 80
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 88
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 90
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 96
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 97
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 68
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 64
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 71
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 73
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 74
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 76
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 72
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 72
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 82
- },
- {
- "x": "2017-12-01 00:00:00",
- "y": 67
- },
- {
- "x": "2018-01-01 00:00:00",
- "y": 72
- },
- {
- "x": "2018-02-01 00:00:00",
- "y": 57
- },
- {
- "x": "2018-03-01 00:00:00",
- "y": 59
- }
- ],
- "name": "Soufflage",
- "unit": "%",
- "hide": true
- },
- "Mezzanine_hygrometrie": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 59
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 56
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 52
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 52
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 56
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 64
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 64
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 49
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 43
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 45
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 46
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 53
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 58
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 61
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 51
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 45
- },
- {
- "x": "2014-01-01 00:00:00",
- "y": 54
- },
- {
- "x": "2014-02-01 00:00:00",
- "y": 48
- },
- {
- "x": "2014-03-01 00:00:00",
- "y": 45
- },
- {
- "x": "2014-04-01 00:00:00",
- "y": 46
- },
- {
- "x": "2014-05-01 00:00:00",
- "y": 50
- },
- {
- "x": "2014-06-01 00:00:00",
- "y": 60
- },
- {
- "x": "2015-09-01 00:00:00",
- "y": 52
- },
- {
- "x": "2015-10-01 00:00:00",
- "y": 55
- },
- {
- "x": "2015-11-01 00:00:00",
- "y": 57
- },
- {
- "x": "2015-12-01 00:00:00",
- "y": 60
- },
- {
- "x": "2016-01-01 00:00:00",
- "y": 66
- },
- {
- "x": "2016-02-01 00:00:00",
- "y": 65
- },
- {
- "x": "2016-03-01 00:00:00",
- "y": 55
- },
- {
- "x": "2016-04-01 00:00:00",
- "y": 51
- },
- {
- "x": "2016-05-01 00:00:00",
- "y": 50
- },
- {
- "x": "2016-06-01 00:00:00",
- "y": 58
- },
- {
- "x": "2016-07-01 00:00:00",
- "y": 55
- },
- {
- "x": "2016-08-01 00:00:00",
- "y": 49
- },
- {
- "x": "2016-09-01 00:00:00",
- "y": 52
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 54
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 50
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 55
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 55
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 57
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 56
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 54
- },
- {
- "x": "2019-03-01 00:00:00",
- "y": 39
- },
- {
- "x": "2019-04-01 00:00:00",
- "y": 40
- },
- {
- "x": "2019-05-01 00:00:00",
- "y": 48
- },
- {
- "x": "2019-06-01 00:00:00",
- "y": 53
- },
- {
- "x": "2019-07-01 00:00:00",
- "y": 48
- },
- {
- "x": "2019-08-01 00:00:00",
- "y": 46
- }
- ],
- "name": "Mezzanine",
- "unit": "%",
- "hide": false
- },
- "Extraction_hygrometrie": {
- "data": [
- {
- "x": "2012-06-01 00:00:00",
- "y": 64
- },
- {
- "x": "2012-07-01 00:00:00",
- "y": 60
- },
- {
- "x": "2012-08-01 00:00:00",
- "y": 56
- },
- {
- "x": "2012-09-01 00:00:00",
- "y": 59
- },
- {
- "x": "2012-10-01 00:00:00",
- "y": 65
- },
- {
- "x": "2012-11-01 00:00:00",
- "y": 77
- },
- {
- "x": "2012-12-01 00:00:00",
- "y": 62
- },
- {
- "x": "2013-01-01 00:00:00",
- "y": 43
- },
- {
- "x": "2013-02-01 00:00:00",
- "y": 40
- },
- {
- "x": "2013-03-01 00:00:00",
- "y": 40
- },
- {
- "x": "2013-04-01 00:00:00",
- "y": 42
- },
- {
- "x": "2013-05-01 00:00:00",
- "y": 45
- },
- {
- "x": "2013-06-01 00:00:00",
- "y": 52
- },
- {
- "x": "2013-07-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-08-01 00:00:00",
- "y": 57
- },
- {
- "x": "2013-09-01 00:00:00",
- "y": 55
- },
- {
- "x": "2013-10-01 00:00:00",
- "y": 58
- },
- {
- "x": "2013-11-01 00:00:00",
- "y": 47
- },
- {
- "x": "2013-12-01 00:00:00",
- "y": 39
- },
- {
- "x": "2014-11-01 00:00:00",
- "y": 55
- },
- {
- "x": "2014-12-01 00:00:00",
- "y": 47
- },
- {
- "x": "2015-01-01 00:00:00",
- "y": 89
- },
- {
- "x": "2017-03-01 00:00:00",
- "y": 50
- },
- {
- "x": "2017-04-01 00:00:00",
- "y": 50
- },
- {
- "x": "2017-05-01 00:00:00",
- "y": 56
- },
- {
- "x": "2017-06-01 00:00:00",
- "y": 59
- },
- {
- "x": "2017-07-01 00:00:00",
- "y": 58
- },
- {
- "x": "2017-08-01 00:00:00",
- "y": 60
- },
- {
- "x": "2017-09-01 00:00:00",
- "y": 55
- },
- {
- "x": "2017-10-01 00:00:00",
- "y": 54
- },
- {
- "x": "2017-11-01 00:00:00",
- "y": 57
- }
- ],
- "name": "Extraction",
- "unit": "%",
- "hide": true
- }
-}
diff --git a/modules/private/websites/papa/maison_bbc_static/favicon.ico b/modules/private/websites/papa/maison_bbc_static/favicon.ico
deleted file mode 100644
index 03990f9..0000000
Binary files a/modules/private/websites/papa/maison_bbc_static/favicon.ico and /dev/null differ
diff --git a/modules/private/websites/papa/maison_bbc_static/index.html b/modules/private/websites/papa/maison_bbc_static/index.html
deleted file mode 100644
index 78c318c..0000000
--- a/modules/private/websites/papa/maison_bbc_static/index.html
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
- Pause
-
-
-
-
-
-
-
-
-
- Site web en pause !
-
-
-
Le site est actuellement en pause.
-
- Données historiques
-
- Consommation moyenne
- Consommation totale
- Hygrométrie
- Température
-
-
-
-
-
-
-
diff --git a/modules/private/websites/papa/maison_bbc_static/lamaison.png b/modules/private/websites/papa/maison_bbc_static/lamaison.png
deleted file mode 100644
index dad243c..0000000
Binary files a/modules/private/websites/papa/maison_bbc_static/lamaison.png and /dev/null differ
diff --git a/modules/private/websites/papa/surveillance.nix b/modules/private/websites/papa/surveillance.nix
deleted file mode 100644
index a8e5149..0000000
--- a/modules/private/websites/papa/surveillance.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.papa.surveillance;
- varDir = "/var/lib/ftp/papa";
- apacheUser = config.services.httpd.Prod.user;
-in {
- options.myServices.websites.papa.surveillance.enable = lib.mkEnableOption "enable Papa surveillance's website";
-
- config = lib.mkIf cfg.enable {
- security.acme.certs."ftp".extraDomains."surveillance.maison.bbc.bouya.org" = null;
-
- services.cron = {
- systemCronJobs = let
- script = pkgs.writeScript "cleanup-papa" ''
- #!${pkgs.stdenv.shell}
- d=$(date -d "7 days ago" +%Y%m%d)
- for i in /var/lib/ftp/papa/*/20[0-9][0-9][0-9][0-9][0-9][0-9]; do
- if [ "$d" -gt $(basename $i) ]; then
- rm -rf "$i"
- fi
- done
- '';
- in
- [
- ''
- 0 6 * * * ${apacheUser} ${script}
- ''
- ];
- };
-
- services.websites.env.production.vhostConfs.papa_surveillance = {
- certName = "papa";
- certMainHost = "surveillance.maison.bbc.bouya.org";
- hosts = [ "surveillance.maison.bbc.bouya.org" ];
- root = varDir;
- extraConfig = [
- ''
- Use Apaxy "${varDir}" "title .duplicity-ignore"
-
- Use LDAPConnect
- Options Indexes
- AllowOverride None
- Require ldap-group cn=surveillance.maison.bbc.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu
-
- ''
- ];
- };
- };
-}
-
diff --git a/modules/private/websites/patrick_fodella/altermondia.nix b/modules/private/websites/patrick_fodella/altermondia.nix
deleted file mode 100644
index 2a41aa3..0000000
--- a/modules/private/websites/patrick_fodella/altermondia.nix
+++ /dev/null
@@ -1,73 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.patrick_fodella.altermondia;
- varDir = "/var/lib/ftp/patrick_fodella/altermondia";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.patrick_fodella.altermondia.enable = lib.mkEnableOption "enable Patrick Fodella Altermondia's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "altermondia.org"; } ];
-
- system.activationScripts.patrick_fodella_altermondia = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/patrick_fodella_altermondia
- '';
- };
- systemd.services.phpfpm-patrick_fodella_altermondia.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-patrick_fodella_altermondia.wants = [ "mysql.service" ];
- services.phpfpm.pools.patrick_fodella_altermondia = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/patrick_fodella_altermondia:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/patrick_fodella_altermondia";
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- disable_functions = "mail"
- '';
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.patrick_fodella_altermondia = {
- certName = "patrick_fodella";
- addToCerts = true;
- hosts = ["altermondia.org" "www.altermondia.org" ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats altermondia.org
-
- RewriteEngine on
- RewriteCond "%{HTTP_HOST}" "!^altermondia\.org$" [NC]
- RewriteRule ^(.+)$ https://altermondia.org$1 [R=302,L]
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.patrick_fodella_altermondia.socket}|fcgi://localhost"
-
-
-
- AllowOverride None
- Require all denied
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride all
- Require all granted
-
- ''
- ];
- };
- };
-}
-
diff --git a/modules/private/websites/patrick_fodella/ecolyeu.nix b/modules/private/websites/patrick_fodella/ecolyeu.nix
deleted file mode 100644
index 00dab76..0000000
--- a/modules/private/websites/patrick_fodella/ecolyeu.nix
+++ /dev/null
@@ -1,72 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.patrick_fodella.ecolyeu;
- varDir = "/var/lib/ftp/patrick_fodella/ecolyeu_pessicart";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.patrick_fodella.ecolyeu.enable = lib.mkEnableOption "enable Patrick Fodella Ecolyeu's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "ecolyeu-pessicart-nice.fr"; } ];
-
- system.activationScripts.patrick_fodella_ecolyeu = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/patrick_fodella_ecolyeu
- '';
- };
- systemd.services.phpfpm-patrick_fodella_ecolyeu.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-patrick_fodella_ecolyeu.wants = [ "mysql.service" ];
- services.phpfpm.pools.patrick_fodella_ecolyeu = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/patrick_fodella_ecolyeu:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/patrick_fodella_ecolyeu";
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- disable_functions = "mail"
- '';
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.patrick_fodella_ecolyeu = {
- certName = "patrick_fodella";
- certMainHost = "ecolyeu-pessicart-nice.fr";
- hosts = ["ecolyeu-pessicart-nice.fr" "www.ecolyeu-pessicart-nice.fr" ];
- root = varDir;
- extraConfig = [
- ''
- Use Stats ecolyeu-pessicart-nice.fr
-
- RewriteEngine on
- RewriteCond "%{HTTP_HOST}" "!^www\.ecolyeu-pessicart-nice\.fr$" [NC]
- RewriteRule ^(.+)$ https://www.ecolyeu-pessicart-nice.fr$1 [R=302,L]
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.patrick_fodella_ecolyeu.socket}|fcgi://localhost"
-
-
-
- AllowOverride None
- Require all denied
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride all
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/piedsjaloux/app/default.nix b/modules/private/websites/piedsjaloux/app/default.nix
deleted file mode 100644
index 4525a18..0000000
--- a/modules/private/websites/piedsjaloux/app/default.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{ environment, varDir, secretsPath
-, composerEnv, fetchurl, fetchgit, sources }:
-let
- app = composerEnv.buildPackage (
- import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } //
- rec {
- version = sources.websites-piedsjaloux-app.version;
- pname = "piedsjaloux";
- name = "${pname}-${version}";
- src = sources.websites-piedsjaloux-app;
- noDev = (environment == "prod");
- preInstall = ''
- export SYMFONY_ENV="${environment}"
- '';
- # /!\ miniatures and data need to be in the same physical dir due to a
- # bug in leapt.im (searches for data/../miniatures)
- postInstall = ''
- cd $out
- rm app/config/parameters.yml
- ln -sf ${secretsPath} app/config/parameters.yml
- rm -rf var/{logs,cache,data,miniatures,tmp}
- ln -sf ${varDir}/{logs,cache,data,miniatures,tmp} var/
- '';
- passthru = {
- inherit varDir environment secretsPath;
- webRoot = "${app}/web";
- };
- });
-in app
diff --git a/modules/private/websites/piedsjaloux/app/php-packages.nix b/modules/private/websites/piedsjaloux/app/php-packages.nix
deleted file mode 100644
index 7b99936..0000000
--- a/modules/private/websites/piedsjaloux/app/php-packages.nix
+++ /dev/null
@@ -1,1009 +0,0 @@
-# Generated with composer2nix and adapted to return only the list of
-# packages
-{ composerEnv, fetchurl, fetchgit ? null }:
-{
- packages = {
- "behat/transliterator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c";
- src = fetchurl {
- url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c;
- sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0";
- };
- };
- };
- "components/bootstrap" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "components-bootstrap-5d60b2efd3159e1a9e203901849b3493c5aac61f";
- src = fetchurl {
- url = https://api.github.com/repos/components/bootstrap/zipball/5d60b2efd3159e1a9e203901849b3493c5aac61f;
- sha256 = "0jdyxl86dr2lf8az1vby84i7kdn1qcqkp8fy60rs18gav0aqp4fg";
- };
- };
- };
- "components/jquery" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "components-jquery-459648cda77875519c5da3ae1dd0ed5d170aa649";
- src = fetchurl {
- url = https://api.github.com/repos/components/jquery/zipball/459648cda77875519c5da3ae1dd0ed5d170aa649;
- sha256 = "04jv8yifhwx0cpkw3y3ng0bs2dv77pzrdd640p59rjxwba6r1lbb";
- };
- };
- };
- "components/jqueryui" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "components-jqueryui-c34f8dbf3ba57b3784b93f26119f436c0e8288e1";
- src = fetchurl {
- url = https://api.github.com/repos/components/jqueryui/zipball/c34f8dbf3ba57b3784b93f26119f436c0e8288e1;
- sha256 = "00nkg6z8g6l3jysyzsfmfxhxqcdsd3jfqib28j8kn2frzx508xv9";
- };
- };
- };
- "composer/ca-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "composer-ca-bundle-8afa52cd417f4ec417b4bfe86b68106538a87660";
- src = fetchurl {
- url = https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660;
- sha256 = "18b0gq29frjf4yhl4sl3i3zbz6zr3qjgsjb8cjdhz65vpb50581p";
- };
- };
- };
- "container-interop/container-interop" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "container-interop-container-interop-79cbf1341c22ec75643d841642dd5d6acd83bdb8";
- src = fetchurl {
- url = https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8;
- sha256 = "1pxm461g5flcq50yabr01nw8w17n3g7klpman9ps3im4z0604m52";
- };
- };
- };
- "dmishh/settings-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "dmishh-settings-bundle-0ee48b015691694a8dcbd3ee654d33386e7bf478";
- src = fetchurl {
- url = https://api.github.com/repos/dmishh/SettingsBundle/zipball/0ee48b015691694a8dcbd3ee654d33386e7bf478;
- sha256 = "0m2fw5shvnkqlz0nm27ggpmkipfh377y1hjsw343zv1nn72nxfqf";
- };
- };
- };
- "doctrine/annotations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-annotations-c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5;
- sha256 = "0b80xpqd3j99xgm0c41kbgy0k6knrfnd29223c93295sb12112g7";
- };
- };
- };
- "doctrine/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-cache-d768d58baee9a4862ca783840eca1b9add7a7f57";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57;
- sha256 = "1kljhw4gqp12iz88h6ymsrlfir2fis7icn6dffyizfc1csyb4s2i";
- };
- };
- };
- "doctrine/collections" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-collections-a01ee38fcd999f34d9bfbcee59dbda5105449cbf";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf;
- sha256 = "0d36zc21ka0pdac9xpkxsgf5zzw9gp0m9lk3r3xs5y70j0lkkkis";
- };
- };
- };
- "doctrine/common" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-common-30e33f60f64deec87df728c02b107f82cdafad9d";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/common/zipball/30e33f60f64deec87df728c02b107f82cdafad9d;
- sha256 = "0s4vv14ibyx62a9aj3wn5cs2bbxd72fajmfmi8qb5l11gx0375na";
- };
- };
- };
- "doctrine/dbal" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-dbal-22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9;
- sha256 = "0kbahs699jd8pxf512dgg7arv49dc7qzi3mx8snxqm4h15n5brnj";
- };
- };
- };
- "doctrine/doctrine-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-bundle-82d2c63cd09acbde2332f55d9aa7b28aefe4983d";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/82d2c63cd09acbde2332f55d9aa7b28aefe4983d;
- sha256 = "0gzrigv360rp50yxpwidbkf8vlagym0w1if010yz5xcfrz37cpn3";
- };
- };
- };
- "doctrine/doctrine-cache-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-cache-bundle-5514c90d9fb595e1095e6d66ebb98ce9ef049927";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927;
- sha256 = "04njrfhw4fc2ifacd9h0wd9i14l7ycv3hanbqrw5ilsai02j6asa";
- };
- };
- };
- "doctrine/doctrine-migrations-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-migrations-bundle-49fa399181db4bf4f9f725126bd1cb65c4398dce";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce;
- sha256 = "1a73xjhjrjlvkh8d253kfc2rbxd2h4hwafhv5078dy7rg6x9blyn";
- };
- };
- };
- "doctrine/event-manager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-event-manager-a520bc093a0170feeb6b14e9d83f3a14452e64b3";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3;
- sha256 = "165cxvw4idqj01l63nya2whpdb3fz6ld54rx198b71bzwfrydl88";
- };
- };
- };
- "doctrine/inflector" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-inflector-5527a48b7313d15261292c149e55e26eae771b0a";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a;
- sha256 = "0ng6vlwjr8h6hqwa32ynykz1mhlfsff5hirjidlk086ab6njppa5";
- };
- };
- };
- "doctrine/instantiator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-instantiator-185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda;
- sha256 = "1mah9a6mb30qad1zryzjain2dxw29d8h4bjkbcs3srpm3p891msy";
- };
- };
- };
- "doctrine/lexer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c;
- sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74";
- };
- };
- };
- "doctrine/migrations" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-migrations-215438c0eef3e5f9b7da7d09c6b90756071b43e6";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6;
- sha256 = "0k6sgw65vji9rgib10mq2m634m41a67inspkrcw4qixig2lnb3ld";
- };
- };
- };
- "doctrine/orm" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-orm-434820973cadf2da2d66e7184be370084cc32ca8";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8;
- sha256 = "114fyq8kaf5qzfkp8sdygqflf3z94va1cs5c3scycfpg9cmi4gls";
- };
- };
- };
- "doctrine/persistence" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-persistence-c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/persistence/zipball/c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38;
- sha256 = "0xdm5n38rjas1mlyxc15sg1as5h7y012mdb0j9lr6cvphgnaxxv7";
- };
- };
- };
- "doctrine/reflection" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-reflection-02538d3f95e88eb397a5f86274deb2c6175c2ab6";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6;
- sha256 = "12n9zik4lxb9lx1jf0nbvg9vl9nv958a7z1yjx48scfxd1d1sxjy";
- };
- };
- };
- "eko/feedbundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "eko-feedbundle-d4e626616d9ccf6527212d3bdda15f9af3838e4f";
- src = fetchurl {
- url = https://api.github.com/repos/eko/FeedBundle/zipball/d4e626616d9ccf6527212d3bdda15f9af3838e4f;
- sha256 = "145f4mq2bpsdayaiqmgz1asmjx2is4v327h2ny2wp03knnkjvnfq";
- };
- };
- };
- "fig/link-util" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac;
- sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64";
- };
- };
- };
- "gedmo/doctrine-extensions" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "gedmo-doctrine-extensions-87c78ff9fd4b90460386f753d95622f6fbbfcb27";
- src = fetchurl {
- url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/87c78ff9fd4b90460386f753d95622f6fbbfcb27;
- sha256 = "1i33xy9s18rncc1fllwi2qi7hrxj8g762fvgl9np7xndxa7kclyb";
- };
- };
- };
- "gregwar/captcha" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "gregwar-captcha-cf953dd79748406e0292cea8c565399681e4d345";
- src = fetchurl {
- url = https://api.github.com/repos/Gregwar/Captcha/zipball/cf953dd79748406e0292cea8c565399681e4d345;
- sha256 = "153m7bkhs3drxk0jfbq67a8vr1m13g7isc4ck44k5hyfzpcazb5i";
- };
- };
- };
- "gregwar/captcha-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "gregwar-captcha-bundle-c2d5468556890dd25e0b53bd345fc205562c86f7";
- src = fetchurl {
- url = https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/c2d5468556890dd25e0b53bd345fc205562c86f7;
- sha256 = "04wcvqq457h6v7mzmrar946swd9akk27fmfig4qj8hpxzj250cgk";
- };
- };
- };
- "helios-ag/fm-bbcode-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "helios-ag-fm-bbcode-bundle-d88ff5ca6c0ab71ec094d5a7d56b0bc8bc100363";
- src = fetchurl {
- url = https://api.github.com/repos/helios-ag/FMBbCodeBundle/zipball/d88ff5ca6c0ab71ec094d5a7d56b0bc8bc100363;
- sha256 = "13g9ddd2p3nf1vrbkf6l00qdqz89rq6d8l20p68dmiy7mb6kpynl";
- };
- };
- };
- "immae/piedsjaloux-ckeditor-component" = {
- targetDir = "";
- src = fetchgit {
- name = "immae-piedsjaloux-ckeditor-component-9946db9daaa76448d0e43247472cdedd2a5ea22a";
- url = "https://git.immae.eu/perso/Immae/Projets/packagist/piedsjaloux-ckeditor-component.git";
- rev = "9946db9daaa76448d0e43247472cdedd2a5ea22a";
- sha256 = "183rgl23li3bqsynfmvv2s7jvlmqf6a5pskgrcxlaxcrr0d09n8c";
- };
- };
- "incenteev/composer-parameter-handler" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550";
- src = fetchurl {
- url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550;
- sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm";
- };
- };
- };
- "jdorn/sql-formatter" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc";
- src = fetchurl {
- url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc;
- sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi";
- };
- };
- };
- "kriswallsmith/assetic" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "kriswallsmith-assetic-e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1";
- src = fetchurl {
- url = https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1;
- sha256 = "1dqk4zvx8fgqf8rb81sj9bipl5431jib2b9kcvxyig5fw99irpf8";
- };
- };
- };
- "leapt/im-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "leapt-im-bundle-83442778d118f6edb537b93f9746c3a97e56c3d1";
- src = fetchurl {
- url = https://api.github.com/repos/leapt/im-bundle/zipball/83442778d118f6edb537b93f9746c3a97e56c3d1;
- sha256 = "1gm4ih3v1j0xjm7mrpspd3yacdwvbqgag22cyqmix0hc9hw3pc6a";
- };
- };
- };
- "luxifer/doctrine-functions" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "luxifer-doctrine-functions-e1c0bb1a5cb002d9fc82d8b32a5da28c02d34c6c";
- src = fetchurl {
- url = https://api.github.com/repos/luxifer/doctrine-functions/zipball/e1c0bb1a5cb002d9fc82d8b32a5da28c02d34c6c;
- sha256 = "1sw4826nvs5q0y2na9m26rbxfiaw0kfqwhky7x7apicgx5adqfa9";
- };
- };
- };
- "mjohnson/decoda" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "mjohnson-decoda-8cd0928b78a4bf5ade48b80c934370fc1f5f84a1";
- src = fetchurl {
- url = https://api.github.com/repos/milesj/decoda/zipball/8cd0928b78a4bf5ade48b80c934370fc1f5f84a1;
- sha256 = "0wcxz9yirz4zir06xvnlchqgppmyasymak06gn46jn6v6c9dsykc";
- };
- };
- };
- "monolog/monolog" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "monolog-monolog-bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266";
- src = fetchurl {
- url = https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266;
- sha256 = "0h3nnxjf2bdh7nmpqnpij99lqv6bw13r2bx83d8vn5zvblwg5png";
- };
- };
- };
- "ocramius/package-versions" = {
- targetDir = "";
- needsModifyRights = true;
- src = composerEnv.buildZipPackage {
- name = "ocramius-package-versions-4489d5002c49d55576fa0ba786f42dbb009be46f";
- src = fetchurl {
- url = https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f;
- sha256 = "039c404g9597x45xh04bnn8kmcyknkbnr57yb9s7vf29vfrg4881";
- };
- };
- };
- "ocramius/proxy-manager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "ocramius-proxy-manager-14b137b06b0f911944132df9d51e445a35920ab1";
- src = fetchurl {
- url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/14b137b06b0f911944132df9d51e445a35920ab1;
- sha256 = "10y5msgh2jdlw4w075fasv40yq01szjy15m3f0wgc89hlfmqz0sn";
- };
- };
- };
- "paragonie/random_compat" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "paragonie-random_compat-84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95";
- src = fetchurl {
- url = https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95;
- sha256 = "03nsccdvcb79l64b7lsmx0n8ldf5z3v8niqr7bpp6wg401qp9p09";
- };
- };
- };
- "psr/cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8;
- sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz";
- };
- };
- };
- "psr/container" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f;
- sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j";
- };
- };
- };
- "psr/link" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562;
- sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13";
- };
- };
- };
- "psr/log" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-log-6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd;
- sha256 = "1i351p3gd1pgjcjxv7mwwkiw79f1xiqr38irq22156h05zlcx80d";
- };
- };
- };
- "psr/simple-cache" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b";
- src = fetchurl {
- url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b;
- sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw";
- };
- };
- };
- "robloach/component-installer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "robloach-component-installer-908a859aa7c4949ba9ad67091e67bac10b66d3d7";
- src = fetchurl {
- url = https://api.github.com/repos/RobLoach/component-installer/zipball/908a859aa7c4949ba9ad67091e67bac10b66d3d7;
- sha256 = "19y5sv4k338bihzmm8iac6q43r18vxhmbpvrdhz8jn39r51ampq9";
- };
- };
- };
- "sensio/distribution-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-distribution-bundle-59eac70f15f97ee945924948a6f5e2f6f86b7a4b";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/59eac70f15f97ee945924948a6f5e2f6f86b7a4b;
- sha256 = "05mj4c0ahwg6l2wipyqfyyjjp1m2vvl7ymp61nvwv7zhvqacvljs";
- };
- };
- };
- "sensio/framework-extra-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-framework-extra-bundle-bb907234df776b68922eb4b25bfa061683597b6a";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a;
- sha256 = "011hcljjcfq5qy4a7mlf0hwqxyb58yci40ini0n5rqandcyk2nck";
- };
- };
- };
- "sensiolabs/security-checker" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensiolabs-security-checker-46be3f58adac13084497961e10eed9a7fb4d44d1";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/security-checker/zipball/46be3f58adac13084497961e10eed9a7fb4d44d1;
- sha256 = "1caqf3hdfsajj9nb8fpinvs6apv90g1srwxcyxdnr6a8d6g0p6qi";
- };
- };
- };
- "swiftmailer/swiftmailer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "swiftmailer-swiftmailer-181b89f18a90f8925ef805f950d47a7190e9b950";
- src = fetchurl {
- url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950;
- sha256 = "0hkmawv3bhbqdavy4wxqhzajg5zqd7chsi8w27y2zdi5r35az75d";
- };
- };
- };
- "symfony/assetic-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-assetic-bundle-2e0a23a4874838e26de6f025e02fc63328921a4c";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c;
- sha256 = "17rxrkyzxa6x5nn7qhhhdgx4z0nlznnq5fifza4wv9znca8bbwyc";
- };
- };
- };
- "symfony/monolog-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-monolog-bundle-572e143afc03419a75ab002c80a2fd99299195ff";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/monolog-bundle/zipball/572e143afc03419a75ab002c80a2fd99299195ff;
- sha256 = "0g8icydnwfbqcbc56pqyc8bv1vp31331w0r75r3hqh225p2j1nd7";
- };
- };
- };
- "symfony/polyfill-apcu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-apcu-19e1b73bf255265ad0b568f81766ae2a3266d8d2";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/19e1b73bf255265ad0b568f81766ae2a3266d8d2;
- sha256 = "0jg33c81kwkpxk0b18jkslz9jkbkxl5k48h6m5b33dm63p1fj05r";
- };
- };
- };
- "symfony/polyfill-ctype" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-ctype-e3d826245268269cd66f8326bd8bc066687b4a19";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19;
- sha256 = "16md0qmy5jvvl7lc6n6r5hxjdr5i30vl6n9rpkm4b11rh2nqh7mh";
- };
- };
- };
- "symfony/polyfill-intl-icu" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-intl-icu-f22a90256d577c7ef7efad8df1f0201663d57644";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f22a90256d577c7ef7efad8df1f0201663d57644;
- sha256 = "0x7h8l248l1gc07xmvfixq6p80ifdaa29qympfq3jzfb79k69slq";
- };
- };
- };
- "symfony/polyfill-mbstring" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-mbstring-c79c051f5b3a46be09205c73b80b346e4153e494";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494;
- sha256 = "18v2777cky55ah6xi4dh383mp4iddwzmnvx81qd86y1kgfykwhpi";
- };
- };
- };
- "symfony/polyfill-php56" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php56-ff208829fe1aa48ab9af356992bb7199fed551af";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php56/zipball/ff208829fe1aa48ab9af356992bb7199fed551af;
- sha256 = "0vmpiwakc7hpbr6jwpk7cqcy41ybgwl6jkn3q8c4ryxynknn5hfk";
- };
- };
- };
- "symfony/polyfill-php70" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-php70-6b88000cdd431cd2e940caa2cb569201f3f84224";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224;
- sha256 = "08h77r1i2q4pwdd0yk3pfhqqgk0z7gwmkzmvykx9bfv1z7a0h8ik";
- };
- };
- };
- "symfony/polyfill-util" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-polyfill-util-3b58903eae668d348a7126f999b0da0f2f93611c";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/polyfill-util/zipball/3b58903eae668d348a7126f999b0da0f2f93611c;
- sha256 = "00bb5mgljk6d54nyvd4gmc7mbzfr4b4q7h3rxmv8rzq613wcjp3i";
- };
- };
- };
- "symfony/swiftmailer-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec;
- sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01";
- };
- };
- };
- "symfony/symfony" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-symfony-f6b8ddc362b1cf3fb06548693c3adbb736092412";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/symfony/zipball/f6b8ddc362b1cf3fb06548693c3adbb736092412;
- sha256 = "0ip7k5xf34w4p1zvv2nkv4nyik3asidk3zlgzyc1v57429z0f28q";
- };
- };
- };
- "twig/extensions" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "twig-extensions-57873c8b0c1be51caa47df2cdb824490beb16202";
- src = fetchurl {
- url = https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202;
- sha256 = "1sjajjd6vnczvdrl9b8zhzr06l5dflzqiwg9d33d92q8gli4j7jn";
- };
- };
- };
- "twig/twig" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "twig-twig-a11dd39f5b6589e14f0ff3b36675d06047c589b1";
- src = fetchurl {
- url = https://api.github.com/repos/twigphp/Twig/zipball/a11dd39f5b6589e14f0ff3b36675d06047c589b1;
- sha256 = "0rnwam9379gj5m4ik0fh6c81dbr7kwj2b3x1gnmpf6awa5fm261n";
- };
- };
- };
- "zendframework/zend-code" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-code-c21db169075c6ec4b342149f446e7b7b724f95eb";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb;
- sha256 = "031mfsahjkl63348020wq05273kvszx0dv2766zmzncnd6fcggw1";
- };
- };
- };
- "zendframework/zend-escaper" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-escaper-31d8aafae982f9568287cb4dce987e6aff8fd074";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074;
- sha256 = "16gwqh9zpclc3fmf89cf738mxfh36ar3wdf9i0wvby0g0nhknkd7";
- };
- };
- };
- "zendframework/zend-eventmanager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd;
- sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n";
- };
- };
- };
- "zendframework/zend-feed" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-feed-6641f4cf3f4586c63f83fd70b6d19966025c8888";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-feed/zipball/6641f4cf3f4586c63f83fd70b6d19966025c8888;
- sha256 = "0wl2pf4cq0snlp3gbl2ia662i48yils464qlfqf7gdmbn1ryzcpi";
- };
- };
- };
- "zendframework/zend-http" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-http-2c8aed3d25522618573194e7cc51351f8cd4a45b";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-http/zipball/2c8aed3d25522618573194e7cc51351f8cd4a45b;
- sha256 = "1vy6b24ihwv1g08hjnw4pd7c5171g866jnlr3j6fg0xqv79s4dn9";
- };
- };
- };
- "zendframework/zend-loader" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-loader-78f11749ea340f6ca316bca5958eef80b38f9b6c";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-loader/zipball/78f11749ea340f6ca316bca5958eef80b38f9b6c;
- sha256 = "056zp0xchc4ckijg969im5him3j4cji6hsy26fiaycwprniaqdmg";
- };
- };
- };
- "zendframework/zend-servicemanager" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-servicemanager-a1ed6140d0d3ee803fec96582593ed024950067b";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-servicemanager/zipball/a1ed6140d0d3ee803fec96582593ed024950067b;
- sha256 = "0s3aplkilrd8b18xh55h9m1yvnp9b6vnlgby4gqhqv8npnxxqir9";
- };
- };
- };
- "zendframework/zend-stdlib" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-stdlib-66536006722aff9e62d1b331025089b7ec71c065";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-stdlib/zipball/66536006722aff9e62d1b331025089b7ec71c065;
- sha256 = "0cl0lcgqb5aja6iijp0wrclxra57imwsmhkfpahdl2bsgs1inf2f";
- };
- };
- };
- "zendframework/zend-uri" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-uri-3b6463645c6766f78ce537c70cb4fdabee1e725f";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-uri/zipball/3b6463645c6766f78ce537c70cb4fdabee1e725f;
- sha256 = "0zkb88y9qbgshm8ys5yjxhz6a7fhxl7waygwn37pqsbvz74mbbvp";
- };
- };
- };
- "zendframework/zend-validator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "zendframework-zend-validator-f0789b4c4c099afdd2ecc58cc209a26c64bd4f17";
- src = fetchurl {
- url = https://api.github.com/repos/zendframework/zend-validator/zipball/f0789b4c4c099afdd2ecc58cc209a26c64bd4f17;
- sha256 = "1lwxbr3jlldll4ccw5cn2ny1cbzh279mnfz7m1djqc8qnw16c8jl";
- };
- };
- };
- };
- devPackages = {
- "doctrine/data-fixtures" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-data-fixtures-3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/data-fixtures/zipball/3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a;
- sha256 = "0wbxhy7hq17laqgnq9x9ygysv0n1kn7s4x3v89pk7iy622pil3sm";
- };
- };
- };
- "doctrine/doctrine-fixtures-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "doctrine-doctrine-fixtures-bundle-74b8cc70a4a25b774628ee59f4cdf3623a146273";
- src = fetchurl {
- url = https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/74b8cc70a4a25b774628ee59f4cdf3623a146273;
- sha256 = "1bbflq8k6izwqgp9ka2gyb5y96a80b4lnlc5wrgc5gnih7hqidlf";
- };
- };
- };
- "fzaninotto/faker" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "fzaninotto-faker-d0190b156bcca848d401fb80f31f504f37141c8d";
- src = fetchurl {
- url = https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d;
- sha256 = "1x7xrxw14x7b0iq7sxi9ynswk8ljga62i77ch7xip4dwgq1dypvi";
- };
- };
- };
- "league/factory-muffin" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "league-factory-muffin-316ed2bac70178567f995d877b831804c9c58d5a";
- src = fetchurl {
- url = https://api.github.com/repos/thephpleague/factory-muffin/zipball/316ed2bac70178567f995d877b831804c9c58d5a;
- sha256 = "1fxh0hsqifmnhgkwyd460x3w9wn74369lmak3f1m24mn2asiynxq";
- };
- };
- };
- "league/factory-muffin-faker" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "league-factory-muffin-faker-30dbd11bb6be03b47e52bd60006ae198d20ab426";
- src = fetchurl {
- url = https://api.github.com/repos/thephpleague/factory-muffin-faker/zipball/30dbd11bb6be03b47e52bd60006ae198d20ab426;
- sha256 = "0dsimjdnsmzdd4vwjzw1gz1bb4zlhmv66g3fc9k4nj5bqch6mny1";
- };
- };
- };
- "mikey179/vfsStream" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "mikey179-vfsStream-d5fec95f541d4d71c4823bb5e30cf9b9e5b96145";
- src = fetchurl {
- url = https://github.com/bovigo/vfsStream/archive/v1.6.5.zip;
- sha256 = "16vi7ci8nxq5hxnzzjmmia73gdm55qcwn006c6hgdwa3i58dnr4l";
- };
- };
- };
- "phpdocumentor/reflection-common" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpdocumentor-reflection-common-21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6";
- src = fetchurl {
- url = https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6;
- sha256 = "1yaf1zg9lnkfnq2ndpviv0hg5bza9vjvv5l4wgcn25lx1p8a94w2";
- };
- };
- };
- "phpdocumentor/reflection-docblock" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpdocumentor-reflection-docblock-94fd0001232e47129dd3504189fa1c7225010d08";
- src = fetchurl {
- url = https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08;
- sha256 = "03zvxqb5n9ddvysj8mjdwf59h7sagj5x5z15nhs7mqpcky1w388x";
- };
- };
- };
- "phpdocumentor/type-resolver" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpdocumentor-type-resolver-9c977708995954784726e25d0cd1dddf4e65b0f7";
- src = fetchurl {
- url = https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7;
- sha256 = "0h888r2iy2290yp9i3fij8wd5b7960yi7yn1rwh26x1xxd83n2mb";
- };
- };
- };
- "phpspec/prophecy" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpspec-prophecy-4ba436b55987b4bf311cb7c6ba82aa528aac0a06";
- src = fetchurl {
- url = https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06;
- sha256 = "0sz9fg8r4yvpgrhsh6qaic3p89pafdj8bdf4izbcccq6mdhclxn6";
- };
- };
- };
- "phpunit/php-code-coverage" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-php-code-coverage-eabf68b476ac7d0f73793aada060f1c1a9bf8979";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979;
- sha256 = "0xfkf2kaqrid0ajr8qfh3qnpiqqddl0cmmdy6hd7l9y7ziy6qz8d";
- };
- };
- };
- "phpunit/php-file-iterator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-php-file-iterator-730b01bc3e867237eaac355e06a36b85dd93a8b4";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4;
- sha256 = "0kbg907g9hrx7pv8v0wnf4ifqywdgvigq6y6z00lyhgd0b8is060";
- };
- };
- };
- "phpunit/php-text-template" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-php-text-template-31f8b717e51d9a2afca6c9f046f5d69fc27c8686";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686;
- sha256 = "1y03m38qqvsbvyakd72v4dram81dw3swyn5jpss153i5nmqr4p76";
- };
- };
- };
- "phpunit/php-timer" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-php-timer-3dcf38ca72b158baf0bc245e9184d3fdffa9c46f";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f;
- sha256 = "1j04r0hqzrv6m1jk5nb92k2nnana72nscqpfk3rgv3fzrrv69ljr";
- };
- };
- };
- "phpunit/php-token-stream" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-php-token-stream-1ce90ba27c42e4e44e6d8458241466380b51fa16";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16;
- sha256 = "0j1v83m268cddhyzi8qvqfzhpz12hrm3dyw6skyqvljdp7l9x6lk";
- };
- };
- };
- "phpunit/phpunit" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-phpunit-46023de9a91eec7dfb06cc56cb4e260017298517";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517;
- sha256 = "0mxhgcmc575hw3n7czindgqiha8jhdi4p19h883vf15fg6xf5iv6";
- };
- };
- };
- "phpunit/phpunit-mock-objects" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "phpunit-phpunit-mock-objects-ac8e7a3db35738d56ee9a76e78a4e03d97628983";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983;
- sha256 = "0s7nyyafdqw2hp7wsd2mxnjxpk26630vv3wii6hcdb0q8xy8r78i";
- };
- };
- };
- "sebastian/comparator" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-comparator-2b7424b55f5047b47ac6e5ccb20b2aea4011d9be";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be;
- sha256 = "0ymarxgnr8b3iy0w18h5z13iiv0ja17vjryryzfcwlqqhlc6w7iq";
- };
- };
- };
- "sebastian/diff" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-diff-7f066a26a962dbe58ddea9f72a4e82874a3975a4";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4;
- sha256 = "1ppx21vjj79z6d584ryq451k7kvdc511awmqjkj9g4vxj1s1h3j6";
- };
- };
- };
- "sebastian/environment" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-environment-be2c607e43ce4c89ecd60e75c6a85c126e754aea";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea;
- sha256 = "0gzgnk847kf18krq4ybbi2knzj7i0kdghsdlj6qynzzrlf7idij0";
- };
- };
- };
- "sebastian/exporter" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-exporter-42c4c2eec485ee3e159ec9884f95b431287edde4";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4;
- sha256 = "1p5mc4lqwxn79v06jjlgqxynblywcxw2mkhbf6r4jlz0bsrqafxn";
- };
- };
- };
- "sebastian/global-state" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-global-state-bc37d50fea7d017d3d340f230811c9f1d7280af4";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4;
- sha256 = "0y1x16mf9q38s7rlc7k2s6sxn2ccxmyk1q5zgh24hr4yp035f0pb";
- };
- };
- };
- "sebastian/recursion-context" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-recursion-context-b19cc3298482a335a95f3016d2f8a6950f0fbcd7";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7;
- sha256 = "1i9xdv55nkg1yy5q4lmpq1jsjif69hjrwmr1zha6b5qjf6ivlvjm";
- };
- };
- };
- "sebastian/version" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sebastian-version-58b3a85e7999757d6ad81c787a1fbf5ff6c628c6";
- src = fetchurl {
- url = https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6;
- sha256 = "1s71b6ss29pcsm0120myriwnzla1kpj13f3f739c7k1wfm69h4wz";
- };
- };
- };
- "sensio/generator-bundle" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65";
- src = fetchurl {
- url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65;
- sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3";
- };
- };
- };
- "symfony/phpunit-bridge" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "symfony-phpunit-bridge-2155067dfc73e0e77dbc26f236af17e4df552de5";
- src = fetchurl {
- url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/2155067dfc73e0e77dbc26f236af17e4df552de5;
- sha256 = "1fhqyhvns69pkv086d1sp918bakqq9pk9d16nzck2s4pfdf097pj";
- };
- };
- };
- "webmozart/assert" = {
- targetDir = "";
- src = composerEnv.buildZipPackage {
- name = "webmozart-assert-83e253c8e0be5b0257b881e1827274667c5c17a9";
- src = fetchurl {
- url = https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9;
- sha256 = "04w7rrjy43k93376an7xhnxqn2ibbw5fra7rqky7j1dl1f0hkn6d";
- };
- };
- };
- };
-}
diff --git a/modules/private/websites/piedsjaloux/integration.nix b/modules/private/websites/piedsjaloux/integration.nix
deleted file mode 100644
index 3502964..0000000
--- a/modules/private/websites/piedsjaloux/integration.nix
+++ /dev/null
@@ -1,135 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.piedsjaloux.integration;
- webRoot = "/var/lib/ftp/immae/piedsjaloux/web";
- cfg = config.myServices.websites.piedsjaloux.integration;
- pcfg = config.services.phpApplication;
- texlive = pkgs.texlive.combine { inherit (pkgs.texlive) attachfile preprint scheme-small; };
-in {
- options.myServices.websites.piedsjaloux.integration.enable = lib.mkEnableOption "enable PiedsJaloux's website in integration";
-
- config = lib.mkIf cfg.enable {
- services.phpApplication.apps.piedsjaloux_integration = {
- websiteEnv = "integration";
- httpdUser = config.services.httpd.Inte.user;
- httpdGroup = config.services.httpd.Inte.group;
- inherit webRoot;
- varDir = "/var/lib/ftp/immae/piedsjaloux_var";
- varDirPaths = {
- "tmp" = "0700";
- };
- app = "/var/lib/ftp/immae/piedsjaloux";
- serviceDeps = [ "mysql.service" ];
- preStartActions = [
- "./bin/console --env=dev cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
- };
- phpEnv = {
- PATH = lib.makeBinPath [
- pkgs.apg pkgs.unzip
- # below ones don't need to be in the PATH but they’re used in
- # secrets
- pkgs.imagemagick texlive
- ];
- SYMFONY_DEBUG_MODE = "\"yes\"";
- };
- phpWatchFiles = [
- config.secrets.fullPaths."websites/piedsjaloux/integration"
- ];
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/piedsjaloux/integration" = {
- user = config.services.httpd.Inte.user;
- group = config.services.httpd.Inte.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_host: ${secrets.mysql.host}
- database_port: ${secrets.mysql.port}
- database_name: ${secrets.mysql.database}
- database_user: ${secrets.mysql.user}
- database_password: ${secrets.mysql.password}
- database_server_version: ${pkgs.mariadb.mysqlVersion}
- mailer_transport: smtp
- mailer_host: 127.0.0.1
- mailer_user: null
- mailer_password: null
- secret: ${secrets.secret}
- pdflatex: "${texlive}/bin/pdflatex"
- leapt_im:
- binary_path: ${pkgs.imagemagick}/bin
- '';
- };
-
- services.websites.env.integration.vhostConfs.piedsjaloux_integration = {
- certName = "integration";
- addToCerts = true;
- hosts = [ "test.pj.immae.dev" ];
- root = webRoot;
- extraConfig = [
- ''
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.piedsjaloux_integration}|fcgi://localhost"
-
-
-
- Use LDAPConnect
- Require ldap-group cn=pj.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 " "
-
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
- DirectoryIndex app_dev.php
-
-
- Options -MultiViews
-
-
-
- RewriteEngine On
-
- RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
- RewriteRule ^(.*) - [E=BASE:%1]
-
- # Maintenance script
- RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
- RewriteCond %{SCRIPT_FILENAME} !maintenance.php
- RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L]
- ErrorDocument 503 /maintenance.php
-
- # Sets the HTTP_AUTHORIZATION header removed by Apache
- RewriteCond %{HTTP:Authorization} .
- RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- RewriteCond %{ENV:REDIRECT_STATUS} ^$
- RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
-
- # If the requested filename exists, simply serve it.
- # We only want to let Apache serve files and not directories.
- RewriteCond %{REQUEST_FILENAME} -f
- RewriteRule ^ - [L]
-
- # Rewrite all other queries to the front controller.
- RewriteRule ^ %{ENV:BASE}/app_dev.php [L]
-
-
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/piedsjaloux/production.nix b/modules/private/websites/piedsjaloux/production.nix
deleted file mode 100644
index 422c7f0..0000000
--- a/modules/private/websites/piedsjaloux/production.nix
+++ /dev/null
@@ -1,106 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- secrets = config.myEnv.websites.piedsjaloux.production;
- app = pkgs.callPackage ./app {
- composerEnv = pkgs.composerEnv.override { php = pkgs.php72; };
- environment = secrets.environment;
- varDir = "/var/lib/piedsjaloux_production";
- secretsPath = config.secrets.fullPaths."websites/piedsjaloux/production";
- };
- cfg = config.myServices.websites.piedsjaloux.production;
- pcfg = config.services.phpApplication;
- texlive = pkgs.texlive.combine { inherit (pkgs.texlive) attachfile preprint scheme-small; };
-in {
- options.myServices.websites.piedsjaloux.production.enable = lib.mkEnableOption "enable PiedsJaloux's website in production";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "piedsjaloux.fr"; } ];
- services.phpApplication.apps.piedsjaloux_production = {
- websiteEnv = "production";
- httpdUser = config.services.httpd.Prod.user;
- httpdGroup = config.services.httpd.Prod.group;
- inherit (app) webRoot varDir;
- varDirPaths = {
- "tmp" = "0700";
- };
- inherit app;
- serviceDeps = [ "mysql.service" ];
- preStartActions = [
- "./bin/console --env=${app.environment} cache:clear --no-warmup"
- ];
- phpOpenbasedir = [ "/tmp" ];
- phpPool = {
- "php_admin_value[upload_max_filesize]" = "20M";
- "php_admin_value[post_max_size]" = "20M";
- #"php_admin_flag[log_errors]" = "on";
- "pm" = "dynamic";
- "pm.max_children" = "20";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "3";
- };
- phpEnv = {
- PATH = lib.makeBinPath [
- pkgs.apg pkgs.unzip
- # below ones don't need to be in the PATH but they’re used in
- # secrets
- pkgs.imagemagick texlive
- ];
- };
- phpWatchFiles = [
- app.secretsPath
- ];
- phpPackage = pkgs.php72;
- };
-
- secrets.keys."websites/piedsjaloux/production" = {
- user = config.services.httpd.Prod.user;
- group = config.services.httpd.Prod.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_host: ${secrets.mysql.host}
- database_port: ${secrets.mysql.port}
- database_name: ${secrets.mysql.database}
- database_user: ${secrets.mysql.user}
- database_password: ${secrets.mysql.password}
- database_server_version: ${pkgs.mariadb.mysqlVersion}
- mailer_transport: smtp
- mailer_host: 127.0.0.1
- mailer_user: null
- mailer_password: null
- secret: ${secrets.secret}
- pdflatex: "${texlive}/bin/pdflatex"
- leapt_im:
- binary_path: ${pkgs.imagemagick}/bin
- '';
- };
-
- services.websites.env.production.vhostConfs.piedsjaloux_production = {
- certName = "piedsjaloux";
- certMainHost = "piedsjaloux.fr";
- hosts = [ "piedsjaloux.fr" "www.piedsjaloux.fr" ];
- root = app.webRoot;
- extraConfig = [
- ''
- RewriteEngine on
- RewriteCond "%{HTTP_HOST}" "!^www.piedsjaloux\.fr$" [NC]
- RewriteRule ^(.+)$ https://www.piedsjaloux.fr$1 [R=302,L]
-
-
- SetHandler "proxy:unix:${pcfg.phpListenPaths.piedsjaloux_production}|fcgi://localhost"
-
-
- Use Stats piedsjaloux.fr
-
-
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/ressourcerie_banon/cloud.nix b/modules/private/websites/ressourcerie_banon/cloud.nix
deleted file mode 100644
index 5179218..0000000
--- a/modules/private/websites/ressourcerie_banon/cloud.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.ressourcerie_banon.cloud;
- nextcloud = config.myServices.tools.cloud.farm.package;
-in {
- options.myServices.websites.ressourcerie_banon.cloud.enable = lib.mkEnableOption "enable Ressourcerie Banon’s cloud";
-
- config = lib.mkIf cfg.enable {
- myServices.tools.cloud.farm.instances = [ "ressourcerie_banon" ];
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.ressourcerie_banon_cloud = {
- certName = "ressourcerie_banon";
- addToCerts = true;
- hosts = ["cloud.le-garage-autonome.org"];
- root = nextcloud;
- extraConfig = [ config.myServices.tools.cloud.farm.vhosts.ressourcerie_banon ];
- };
- };
-}
-
diff --git a/modules/private/websites/ressourcerie_banon/cryptpad.nix b/modules/private/websites/ressourcerie_banon/cryptpad.nix
deleted file mode 100644
index 7aea728..0000000
--- a/modules/private/websites/ressourcerie_banon/cryptpad.nix
+++ /dev/null
@@ -1,49 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.ressourcerie_banon.cryptpad;
- envCfg = config.myEnv.tools.cryptpad.ressourcerie_banon;
- port = envCfg.port;
- configFile = pkgs.writeText "config.js" ''
- // ${pkgs.cryptpad}/lib/node_modules/cryptpad/config/config.example.js
- module.exports = {
- httpUnsafeOrigin: 'https://${domain}',
- httpPort: ${toString port},
- adminEmail: '${envCfg.email}',
- filePath: './datastore/',
- archivePath: './data/archive',
- pinPath: './data/pins',
- taskPath: './data/tasks',
- blockPath: './block',
- blobPath: './blob',
- blobStagingPath: './data/blobstage',
- decreePath: './data/decrees',
- logPath: './data/logs',
- logToStdout: false,
- logLevel: 'info',
- logFeedback: false,
- verbose: false,
- inactiveTime: false,
- adminKeys: ${builtins.toJSON envCfg.admins},
- };
- '';
- domain = "pad.le-garage-autonome.org";
-in {
- options.myServices.websites.ressourcerie_banon.cryptpad.enable = lib.mkEnableOption "Enable Ressourcerie Banon’s cryptpad";
-
- config = lib.mkIf cfg.enable {
- myServices.tools.cryptpad.farm.hosts.ressourcerie_banon = {
- inherit domain port;
- config = configFile;
- };
- services.websites.env.production.modules = [ "proxy_wstunnel" ];
- services.websites.env.production.vhostConfs.ressourcerie_banon_cryptpad = {
- certName = "ressourcerie_banon";
- addToCerts = true;
- hosts = [domain];
- root = config.myServices.tools.cryptpad.farm.vhostRoots.ressourcerie_banon;
- extraConfig = [
- config.myServices.tools.cryptpad.farm.vhosts.ressourcerie_banon
- ];
- };
- };
-}
diff --git a/modules/private/websites/ressourcerie_banon/production.nix b/modules/private/websites/ressourcerie_banon/production.nix
deleted file mode 100644
index fa00d92..0000000
--- a/modules/private/websites/ressourcerie_banon/production.nix
+++ /dev/null
@@ -1,70 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.ressourcerie_banon.production;
- varDir = "/var/lib/ftp/ressourcerie_banon";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.ressourcerie_banon.production.enable = lib.mkEnableOption "enable Ressourcerie Banon's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "ressourcerie-banon.org"; } ];
-
- system.activationScripts.ressourcerie_banon = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/ressourcerie_banon
- '';
- };
- systemd.services.phpfpm-ressourcerie_banon.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-ressourcerie_banon.wants = [ "mysql.service" ];
- services.phpfpm.pools.ressourcerie_banon = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/ressourcerie_banon:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/ressourcerie_banon";
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- disable_functions = "mail"
- '';
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.ressourcerie_banon = {
- certName = "ressourcerie_banon";
- certMainHost = "ressourcerie-banon.org";
- hosts = ["ressourcerie-banon.org" "www.ressourcerie-banon.org" "ressourcerie-sault.org" "www.ressourcerie-sault.org" "le-garage-autonome.org"
- "www.le-garage-autonome.org"];
- root = varDir;
- extraConfig = [
- ''
- Use Stats ressourcerie-banon.org
-
- RewriteEngine on
- RewriteCond "%{HTTP_HOST}" "!^ressourcerie-banon\.org$" [NC]
- RewriteRule ^(.+)$ https://ressourcerie-banon.org$1 [R=302,L]
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.ressourcerie_banon.socket}|fcgi://localhost"
-
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride all
- Require all granted
-
- ''
- ];
- };
- };
-}
-
diff --git a/modules/private/websites/richie/production.nix b/modules/private/websites/richie/production.nix
deleted file mode 100644
index a548cff..0000000
--- a/modules/private/websites/richie/production.nix
+++ /dev/null
@@ -1,106 +0,0 @@
-{ lib, config, pkgs, ... }:
-let
- cfg = config.myServices.websites.richie.production;
- vardir = "/var/lib/richie_production";
- richieSrc = pkgs.stdenv.mkDerivation rec {
- version = pkgs.sources.websites-richie-app.version;
- pname = "richie";
- name = "${pname}-${version}";
- src = pkgs.sources.websites-richie-app;
- phases = "installPhase";
- installPhase = ''
- cp -a $src $out
- chmod -R u+w $out
- ln -sf ${vardir}/files $out/
- ln -sf ${vardir}/drapeaux $out/images/
- ln -sf ${vardir}/photos $out/
- sed -i "s@localedef --list-archive@localedef --list-archive /run/current-system/sw/lib/locale/locale-archive@" $out/admin/parametres.php
- '';
- };
- secretPath = config.secrets.fullPaths."websites/richie/production";
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in
-{
- options.myServices.websites.richie.production.enable = lib.mkEnableOption "enable Richie's website";
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "europe-richie.org"; } ];
-
- secrets.keys."websites/richie/production" = {
- user = apacheUser;
- group = apacheGroup;
- permissions = "0400";
- text = with config.myEnv.websites.richie; ''
- Auth('${smtp_mailer.user}', '${smtp_mailer.password}');
- ?>
- '';
- };
- system.activationScripts.richie_production = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/richie_production
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${vardir}
- '';
- };
- services.phpfpm.pools.richie_production = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "${vardir}:/var/lib/php/sessions/richie_production:${secretPath}:${richieSrc}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/richie_production";
- };
- phpEnv = {
- PATH = "/run/current-system/sw/bin:${lib.makeBinPath [ pkgs.imagemagick ]}";
- BDD_CONNECT = secretPath;
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- date.timezone = 'Europe/Paris'
- '';
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.richie_production = {
- certName = "richie";
- addToCerts = true;
- certMainHost = "europe-richie.org";
- hosts = [ "europe-richie.org" "www.europe-richie.org" ];
- root = richieSrc;
- extraConfig = [
- ''
- Use Stats europe-richie.org
- ErrorDocument 404 /404.html
-
- Require all denied
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride None
- Require all granted
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.richie_production.socket}|fcgi://localhost"
-
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/syden/peertube.nix b/modules/private/websites/syden/peertube.nix
deleted file mode 100644
index 64d4a5d..0000000
--- a/modules/private/websites/syden/peertube.nix
+++ /dev/null
@@ -1,132 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- scfg = config.myServices.websites.syden.peertube;
- name = "peertube";
- dataDir = "/var/lib/syden_peertube";
- package = (pkgs.mylibs.flakeCompat ../../../../flakes/private/peertube).packages.x86_64-linux.peertube_syden;
- env = config.myEnv.tools.syden_peertube;
-in
-{
- options.myServices.websites.syden.peertube.enable = lib.mkEnableOption "enable Syden's website";
-
- config = lib.mkIf scfg.enable {
- users.users.peertube = {
- uid = config.ids.uids.peertube;
- group = "peertube";
- description = "Peertube user";
- useDefaultShell = true;
- extraGroups = [ "keys" ];
- };
- users.groups.peertube.gid = config.ids.gids.peertube;
-
- secrets.keys."websites/syden/peertube" = {
- user = "peertube";
- group = "peertube";
- permissions = "0640";
- text = ''
- listen:
- hostname: 'localhost'
- port: ${toString env.listenPort}
- webserver:
- https: true
- hostname: 'record-links.immae.eu'
- port: 443
- database:
- hostname: '${env.postgresql.socket}'
- port: 5432
- suffix: '_syden'
- username: '${env.postgresql.user}'
- password: '${env.postgresql.password}'
- pool:
- max: 5
- redis:
- socket: '${env.redis.socket}'
- auth: null
- db: ${env.redis.db}
- smtp:
- transport: sendmail
- sendmail: '/run/wrappers/bin/sendmail'
- from_address: 'peertube@tools.immae.eu'
- storage:
- tmp: '${dataDir}/storage/tmp/'
- avatars: '${dataDir}/storage/avatars/'
- videos: '${dataDir}/storage/videos/'
- streaming_playlists: '${dataDir}/storage/streaming-playlists/'
- redundancy: '${dataDir}/storage/videos/'
- logs: '${dataDir}/storage/logs/'
- previews: '${dataDir}/storage/previews/'
- thumbnails: '${dataDir}/storage/thumbnails/'
- torrents: '${dataDir}/storage/torrents/'
- captions: '${dataDir}/storage/captions/'
- cache: '${dataDir}/storage/cache/'
- plugins: '${dataDir}/storage/plugins/'
- client_overrides: '${dataDir}/storage/client-overrides/'
- '';
- };
-
- services.filesWatcher.syden_peertube = {
- restart = true;
- paths = [ config.secrets.fullPaths."websites/syden/peertube" ];
- };
-
- systemd.services.syden_peertube = {
- description = "Peertube";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" "postgresql.service" ];
- wants = [ "postgresql.service" ];
-
- environment.NODE_CONFIG_DIR = "${dataDir}/config";
- environment.NODE_ENV = "production";
- environment.HOME = package;
-
- path = [ pkgs.nodejs pkgs.bashInteractive pkgs.ffmpeg pkgs.openssl ];
-
- script = ''
- install -m 0750 -d ${dataDir}/config
- ln -sf ${config.secrets.fullPaths."websites/syden/peertube"} ${dataDir}/config/production.yaml
- ln -sf ${package}/config/default.yaml ${dataDir}/config/default.yaml
- exec npm run start
- '';
-
- serviceConfig = {
- User = "peertube";
- Group = "peertube";
- WorkingDirectory = package;
- StateDirectory = "syden_peertube";
- StateDirectoryMode = 0750;
- PrivateTmp = true;
- ProtectHome = true;
- ProtectControlGroups = true;
- Restart = "always";
- Type = "simple";
- TimeoutSec = 60;
- };
-
- unitConfig.RequiresMountsFor = dataDir;
- };
-
- services.websites.env.production.vhostConfs.syden_peertube = {
- certName = "syden";
- addToCerts = true;
- certMainHost = "record-links.immae.eu";
- hosts = [ "record-links.immae.eu" ];
- root = null;
- extraConfig = [ ''
- RewriteEngine On
-
- RewriteCond %{REQUEST_URI} ^/socket.io [NC]
- RewriteCond %{QUERY_STRING} transport=websocket [NC]
- RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
-
- RewriteCond %{REQUEST_URI} ^/tracker/socket [NC]
- RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
-
- ProxyPass / http://localhost:${toString env.listenPort}/
- ProxyPassReverse / http://localhost:${toString env.listenPort}/
-
- ProxyPreserveHost On
- RequestHeader set X-Real-IP %{REMOTE_ADDR}s
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/telio_tortay/production.nix b/modules/private/websites/telio_tortay/production.nix
deleted file mode 100644
index 16eca74..0000000
--- a/modules/private/websites/telio_tortay/production.nix
+++ /dev/null
@@ -1,81 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; };
- cfg = config.myServices.websites.telio_tortay.production;
- varDir = "/var/lib/ftp/telio_tortay";
- env = config.myEnv.websites.telio_tortay;
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
-in {
- options.myServices.websites.telio_tortay.production.enable = lib.mkEnableOption "enable Telio Tortay's website";
-
- config = lib.mkIf cfg.enable {
- services.webstats.sites = [ { name = "telio-tortay.immae.eu"; } ];
-
- security.acme.certs."ftp".extraDomains."telio-tortay.immae.eu" = null;
-
- system.activationScripts.telio_tortay = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/ftp/telio_tortay/logs
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/telio_tortay
- '';
- };
- systemd.services.phpfpm-telio_tortay.after = lib.mkAfter [ "mysql.service" ];
- systemd.services.phpfpm-telio_tortay.wants = [ "mysql.service" ];
- services.phpfpm.pools.telio_tortay = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
-
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[open_basedir]" = "/var/lib/php/sessions/telio_tortay:${varDir}:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/telio_tortay";
- };
- phpOptions = config.services.phpfpm.phpOptions + ''
- disable_functions = "mail"
- '';
- phpPackage = pkgs.php72;
- };
- services.websites.env.production.modules = adminer.apache.modules ++ [ "proxy_fcgi" ];
- services.websites.env.production.vhostConfs.telio_tortay = {
- certName = "telio_tortay";
- certMainHost = "telio-tortay.immae.eu";
- hosts = ["telio-tortay.immae.eu" "realistesmedia.fr" "www.realistesmedia.fr" ];
- root = varDir;
- extraConfig = [
- (adminer.apache.vhostConf null)
- ''
- Use Stats telio-tortay.immae.eu
- ServerAdmin ${env.server_admin}
- ErrorLog "${varDir}/logs/error_log"
- CustomLog "${varDir}/logs/access_log" combined
-
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.telio_tortay.socket}|fcgi://localhost"
-
-
-
- AllowOverride None
- Require all denied
-
-
- AllowOverride None
- Require all denied
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride all
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/assets/default.nix b/modules/private/websites/tools/assets/default.nix
deleted file mode 100644
index 0eb476d..0000000
--- a/modules/private/websites/tools/assets/default.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.tools.assets;
- assets_urls = lib.mapAttrs (k: v: pkgs.fetchurl v) config.myEnv.tools.assets;
- assets = pkgs.runCommand "assets" {} (''
- mkdir -p $out
- cp -a ${./static}/* $out/
- '' + builtins.concatStringsSep "\n"
- (lib.mapAttrsToList (k: v: ''
- install -D -m644 -T ${v} $out/${k}
- '') assets_urls));
-in
-{
- options.myServices.websites.tools.assets = {
- enable = lib.mkEnableOption "Enable assets website";
- };
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.vhostConfs.assets = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "assets.immae.eu" ];
- root = assets;
- extraConfig = [
- ''
- Use Apaxy "${assets}" "title"
-
- Options Indexes FollowSymlinks
- AllowOverride None
- Require all granted
- Header always set Last-Modified "Tue, 01 Jan 2020 00:00:00 GMT"
- Header always set Cache-Control "public, max-age=31536000, immutable"
- Header always set Access-Control-Allow-Origin "*"
- Header always set Access-Control-Expose-Headers "*"
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/assets/static/favicon.png b/modules/private/websites/tools/assets/static/favicon.png
deleted file mode 100644
index 1caf5a4..0000000
Binary files a/modules/private/websites/tools/assets/static/favicon.png and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/logger.png b/modules/private/websites/tools/assets/static/logger.png
deleted file mode 100644
index d9579fb..0000000
Binary files a/modules/private/websites/tools/assets/static/logger.png and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/logger.txt b/modules/private/websites/tools/assets/static/logger.txt
deleted file mode 100644
index 50dccc6..0000000
--- a/modules/private/websites/tools/assets/static/logger.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Downloaded from https://commons.wikimedia.org/wiki/File:Ghost2.svg
-Licence Creative Commons Attribution-Share Alike 4.0 International
-https://creativecommons.org/licenses/by-sa/4.0/deed.en
diff --git a/modules/private/websites/tools/assets/static/logo.jpg b/modules/private/websites/tools/assets/static/logo.jpg
deleted file mode 100644
index a89172d..0000000
Binary files a/modules/private/websites/tools/assets/static/logo.jpg and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/logo.txt b/modules/private/websites/tools/assets/static/logo.txt
deleted file mode 100644
index 327e62a..0000000
--- a/modules/private/websites/tools/assets/static/logo.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-size: 2
-dpi: 72
-background: white
-plot_type: fullcolor
-center: "whole"
-whitespace: 0.5
-format: jpg
diff --git a/modules/private/websites/tools/assets/static/logo_big.jpg b/modules/private/websites/tools/assets/static/logo_big.jpg
deleted file mode 100644
index 45448f2..0000000
Binary files a/modules/private/websites/tools/assets/static/logo_big.jpg and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/logo_big.txt b/modules/private/websites/tools/assets/static/logo_big.txt
deleted file mode 100644
index ce92c09..0000000
--- a/modules/private/websites/tools/assets/static/logo_big.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-size: 4
-dpi: 72
-background: white
-plot_type: fullcolor
-center: "whole"
-whitespace: 0.5
-format: jpg
diff --git a/modules/private/websites/tools/assets/static/logo_center.jpg b/modules/private/websites/tools/assets/static/logo_center.jpg
deleted file mode 100644
index 6b177e0..0000000
Binary files a/modules/private/websites/tools/assets/static/logo_center.jpg and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/logo_center.txt b/modules/private/websites/tools/assets/static/logo_center.txt
deleted file mode 100644
index 60a8f1c..0000000
--- a/modules/private/websites/tools/assets/static/logo_center.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-size: 4
-dpi: 72
-background: white
-plot_type: fullcolor
-center: "center"
-whitespace: 0.5
-format: jpg
-
diff --git a/modules/private/websites/tools/assets/static/monitoring.png b/modules/private/websites/tools/assets/static/monitoring.png
deleted file mode 100644
index 0024fee..0000000
Binary files a/modules/private/websites/tools/assets/static/monitoring.png and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/monitoring.txt b/modules/private/websites/tools/assets/static/monitoring.txt
deleted file mode 100644
index 9f3e13a..0000000
--- a/modules/private/websites/tools/assets/static/monitoring.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Downloaded from https://commons.wikimedia.org/wiki/File:Magnifying_Glass2.svg
-Licence Creative Commons CC0 1.0 Universal Public Domain Dedication
-https://creativecommons.org/publicdomain/zero/1.0/deed.en
diff --git a/modules/private/websites/tools/assets/static/photos/ct.jpg b/modules/private/websites/tools/assets/static/photos/ct.jpg
deleted file mode 100644
index ab7876b..0000000
Binary files a/modules/private/websites/tools/assets/static/photos/ct.jpg and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/photos/fretlink.jpg b/modules/private/websites/tools/assets/static/photos/fretlink.jpg
deleted file mode 100644
index c941e1d..0000000
Binary files a/modules/private/websites/tools/assets/static/photos/fretlink.jpg and /dev/null differ
diff --git a/modules/private/websites/tools/assets/static/photos/raton.jpg b/modules/private/websites/tools/assets/static/photos/raton.jpg
deleted file mode 100644
index a859e1c..0000000
Binary files a/modules/private/websites/tools/assets/static/photos/raton.jpg and /dev/null differ
diff --git a/modules/private/websites/tools/cloud/default.nix b/modules/private/websites/tools/cloud/default.nix
deleted file mode 100644
index 44163de..0000000
--- a/modules/private/websites/tools/cloud/default.nix
+++ /dev/null
@@ -1,184 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- nextcloud = pkgs.webapps.nextcloud.withApps (a: [
- a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.contacts
- a.cookbook a.deck a.extract a.files_markdown a.files_readmemd
- a.flowupload a.gpxedit a.gpxpod a.keeweb a.maps a.metadata a.music
- a.notes a.ocsms a.passman a.polls a.spreed a.tasks
- ]);
- env = config.myEnv.tools.nextcloud;
- varDir = "/var/lib/nextcloud";
- cfg = config.myServices.websites.tools.cloud;
- phpFpm = rec {
- basedir = builtins.concatStringsSep ":" ([ nextcloud varDir ] ++ nextcloud.apps);
- pool = {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[output_buffering]" = "0";
- "php_admin_value[max_execution_time]" = "1800";
- "php_admin_value[zend_extension]" = "opcache";
- #already enabled by default?
- #"php_value[opcache.enable]" = "1";
- "php_value[opcache.enable_cli]" = "1";
- "php_value[opcache.interned_strings_buffer]" = "8";
- "php_value[opcache.max_accelerated_files]" = "10000";
- "php_value[opcache.memory_consumption]" = "128";
- "php_value[opcache.save_comments]" = "1";
- "php_value[opcache.revalidate_freq]" = "1";
- "php_admin_value[memory_limit]" = "512M";
-
- "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-in {
- options.myServices.websites.tools.cloud = {
- enable = lib.mkEnableOption "enable cloud website";
- };
-
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.modules = [ "proxy_fcgi" ];
-
- services.websites.env.tools.vhostConfs.cloud = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["cloud.immae.eu" ];
- root = nextcloud;
- extraConfig = [
- ''
- SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
-
- AcceptPathInfo On
- DirectoryIndex index.php
- Options FollowSymlinks
- Require all granted
- AllowOverride all
-
-
- Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
-
-
- CGIPassAuth on
- SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud.socket}|fcgi://localhost"
-
-
-
- ''
- ];
- };
-
- secrets.keys."webapps/tools-nextcloud" = {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0600";
- # This file is not actually included, see activationScript below
- text = ''
- '${env.instance_id}',
- 'datadirectory' => '/var/lib/nextcloud/',
- 'passwordsalt' => '${env.password_salt}',
- 'debug' => false,
- 'dbtype' => 'pgsql',
- 'version' => implode($OC_Version, '.'),
- 'dbname' => '${env.postgresql.database}',
- 'dbhost' => '${env.postgresql.socket}',
- 'dbtableprefix' => 'oc_',
- 'dbuser' => '${env.postgresql.user}',
- 'dbpassword' => '${env.postgresql.password}',
- 'installed' => true,
- 'maxZipInputSize' => 0,
- 'allowZipDownload' => true,
- 'forcessl' => true,
- 'theme' => ${"''"},
- 'maintenance' => false,
- 'trusted_domains' =>
- array (
- 0 => 'cloud.immae.eu',
- ),
- 'secret' => '${env.secret}',
- 'appstoreenabled' => false,
- 'appstore.experimental.enabled' => true,
- 'loglevel' => 2,
- 'trashbin_retention_obligation' => 'auto',
- 'htaccess.RewriteBase' => '/',
- 'mail_smtpmode' => 'sendmail',
- 'mail_smtphost' => '127.0.0.1',
- 'mail_smtpname' => ''',
- 'mail_smtppassword' => ''',
- 'mail_from_address' => 'nextcloud',
- 'mail_smtpauth' => false,
- 'mail_domain' => 'tools.immae.eu',
- 'memcache.local' => '\\OC\\Memcache\\APCu',
- 'memcache.locking' => '\\OC\\Memcache\\Redis',
- 'filelocking.enabled' => true,
- 'redis' =>
- array (
- 'host' => '${env.redis.socket}',
- 'port' => 0,
- 'dbindex' => ${env.redis.db},
- ),
- 'overwrite.cli.url' => 'https://cloud.immae.eu',
- 'ldapIgnoreNamingRules' => false,
- 'ldapProviderFactory' => '\\OCA\\User_LDAP\\LDAPProviderFactory',
- 'has_rebuilt_cache' => true,
- );
- '';
- };
- users.users.root.packages = let
- occ = pkgs.writeScriptBin "nextcloud-occ" ''
- #! ${pkgs.stdenv.shell}
- cd ${nextcloud}
- NEXTCLOUD_CONFIG_DIR="${nextcloud}/config" \
- exec \
- sudo -E -u wwwrun ${pkgs.php74}/bin/php \
- -c ${pkgs.php74}/etc/php.ini \
- occ $*
- '';
- in [ occ ];
-
- system.activationScripts.nextcloud = {
- deps = [ "secrets" ];
- text = let
- confs = lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) nextcloud.otherConfig;
- in
- ''
- install -m 0755 -o wwwrun -g wwwrun -d ${varDir}
- install -m 0750 -o wwwrun -g wwwrun -d ${varDir}/phpSessions
- ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v:
- "install -D -m 0644 -o wwwrun -g wwwrun -T ${v} ${varDir}/config/${n}.json"
- ) confs)}
- #install -D -m 0600 -o wwwrun -g wwwrun -T ${config.secrets.fullPaths."webapps/tools-nextcloud"} ${varDir}/config/config.php
- '';
- };
-
- services.phpfpm.pools.nextcloud = {
- user = "wwwrun";
- group = "wwwrun";
- settings = phpFpm.pool;
- phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache ]);
- };
-
- services.cron = {
- enable = true;
- systemCronJobs = let
- script = pkgs.writeScriptBin "nextcloud-cron" ''
- #! ${pkgs.stdenv.shell}
- export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive
- export PATH=/run/wrappers/bin:$PATH
- ${pkgs.php74}/bin/php -d memory_limit=2048M -f ${nextcloud}/cron.php
- '';
- in [
- ''
- */15 * * * * wwwrun ${script}/bin/nextcloud-cron
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/cloud/farm.nix b/modules/private/websites/tools/cloud/farm.nix
deleted file mode 100644
index 7be774c..0000000
--- a/modules/private/websites/tools/cloud/farm.nix
+++ /dev/null
@@ -1,123 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.tools.cloud.farm;
- apacheUser = config.services.httpd.Prod.user;
- apacheGroup = config.services.httpd.Prod.group;
- nextcloud = (pkgs.webapps.nextcloud.override { varDir = null; }).withApps (a: [
- a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.contacts
- a.cookbook a.deck a.extract a.files_markdown a.files_readmemd
- a.flowupload a.gpxedit a.gpxpod a.impersonate a.keeweb a.maps
- a.metadata a.music a.notes a.ocsms a.passman a.polls a.spreed
- a.tasks
- ]);
- toVardir = name: "/var/lib/nextcloud_farm/${name}";
- varDirs = map toVardir cfg.instances;
- phpBaseDir = builtins.concatStringsSep ":" ([ nextcloud ] ++ varDirs ++ nextcloud.apps);
- toVhost = name: ''
- SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
- SetEnv NEXTCLOUD_CONFIG_DIR "${toVardir name}"
-
- AcceptPathInfo On
- DirectoryIndex index.php
- Options FollowSymlinks
- Require all granted
- AllowOverride all
-
-
- Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
-
-
- CGIPassAuth on
- SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud_farm.socket}|fcgi://localhost"
-
-
-
- '';
-in
-{
- options.myServices.tools.cloud.farm = {
- instances = lib.mkOption {
- description = "Instances names for the nextcloud Farm";
- default = [];
- type = lib.types.listOf lib.types.str;
- };
- vhosts = lib.mkOption {
- description = "Instance vhosts configs";
- readOnly = true;
- type = lib.types.attrsOf lib.types.str;
- default = lib.genAttrs cfg.instances toVhost;
- };
- package = lib.mkOption {
- description = "Nextcloud derivation";
- readOnly = true;
- type = lib.types.package;
- default = nextcloud;
- };
- };
-
- config = lib.mkIf (builtins.length cfg.instances > 0) {
- system.activationScripts.cloud_farm_vardirs = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${builtins.concatStringsSep " " varDirs}
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/nextcloud_farm/phpSessions
- '';
- };
- systemd.services.phpfpm-nextcloud_farm.after = lib.mkAfter [ "postgresql.service" ];
- systemd.services.phpfpm-nextcloud_farm.wants = [ "postgresql.service" ];
- services.phpfpm.pools.nextcloud_farm = {
- user = apacheUser;
- group = apacheGroup;
- settings = {
- "listen.owner" = apacheUser;
- "listen.group" = apacheGroup;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[output_buffering]" = "0";
- "php_admin_value[max_execution_time]" = "1800";
- "php_admin_value[zend_extension]" = "opcache";
- #already enabled by default?
- #"php_value[opcache.enable]" = "1";
- "php_value[opcache.enable_cli]" = "1";
- "php_value[opcache.interned_strings_buffer]" = "8";
- "php_value[opcache.max_accelerated_files]" = "10000";
- "php_value[opcache.memory_consumption]" = "128";
- "php_value[opcache.save_comments]" = "1";
- "php_value[opcache.revalidate_freq]" = "1";
- "php_admin_value[memory_limit]" = "512M";
-
- "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${phpBaseDir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/nextcloud_farm/phpSessions";
- };
- phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache ]);
- };
- users.users.root.packages = let
- toOcc = name: pkgs.writeScriptBin "nextcloud-occ-${name}" ''
- #! ${pkgs.stdenv.shell}
- cd ${nextcloud}
- NEXTCLOUD_CONFIG_DIR="${toVardir name}" \
- exec \
- sudo -E -u wwwrun ${pkgs.php74}/bin/php \
- -c ${pkgs.php74}/etc/php.ini \
- occ $*
- '';
- in map toOcc cfg.instances;
- services.cron = {
- enable = true;
- systemCronJobs = let
- toScript = name: pkgs.writeScriptBin "nextcloud-cron" ''
- #! ${pkgs.stdenv.shell}
- export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive
- export PATH=/run/wrappers/bin:$PATH
- export NEXTCLOUD_CONFIG_DIR="${toVardir name}"
- ${pkgs.php74}/bin/php -d memory_limit=512M -f ${nextcloud}/cron.php
- '';
- toLine = name: ''
- */15 * * * * wwwrun ${toScript name}/bin/nextcloud-cron
- '';
- in map toLine cfg.instances;
- };
- };
-}
diff --git a/modules/private/websites/tools/commento/default.nix b/modules/private/websites/tools/commento/default.nix
deleted file mode 100644
index c36255b..0000000
--- a/modules/private/websites/tools/commento/default.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.websites.tools.commento;
- env = config.myEnv.tools.commento;
- webPort = "${host}:${port}";
- port = toString env.listenPort;
- host = "localhost";
- postgresql_url = "postgres://${env.postgresql.user}:${env.postgresql.password}@localhost:${env.postgresql.port}/${env.postgresql.database}?sslmode=disable";
-in
-{
- options.myServices.websites.tools.commento = {
- enable = lib.mkEnableOption "Enable commento website";
- };
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "commento/env" = {
- permissions = "0400";
- text = ''
- COMMENTO_ORIGIN=https://commento.immae.eu/
- COMMENTO_PORT=${port}
- COMMENTO_POSTGRES=${postgresql_url}
- COMMENTO_FORBID_NEW_OWNERS=true
- COMMENTO_BIND_ADDRESS=${host}
- COMMENTO_GZIP_STATIC=true
- COMMENTO_SMTP_HOST=${env.smtp.host}
- COMMENTO_SMTP_PORT=${env.smtp.port}
- COMMENTO_SMTP_USERNAME=${env.smtp.email}
- COMMENTO_SMTP_PASSWORD=${env.smtp.password}
- COMMENTO_SMTP_FROM_ADDRESS=${env.smtp.email}
- '';
- };
- };
-
- services.websites.env.tools.vhostConfs.commento = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "commento.immae.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPass / http://${webPort}/
- ProxyPassReverse / http://${webPort}/
- ProxyPreserveHost On
- ''
- ];
- };
- systemd.services.commento = {
- description = "Commento";
- wantedBy = [ "multi-user.target" ];
- requires = ["postgresql.service"];
- after = ["network.target" "postgresql.service"];
- serviceConfig = {
- User = "wwwrun";
- ExecStart = "${pkgs.commento}/commento";
- EnvironmentFile = config.secrets.fullPaths."commento/env";
- };
- };
- };
-}
diff --git a/modules/private/websites/tools/cryptpad/default.nix b/modules/private/websites/tools/cryptpad/default.nix
deleted file mode 100644
index 69b9877..0000000
--- a/modules/private/websites/tools/cryptpad/default.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ config, pkgs, lib, ... }:
-let
- cfg = config.myServices.websites.tools.cryptpad;
- envCfg = config.myEnv.tools.cryptpad.immaeEu;
- domain = "cryptpad.immae.eu";
- port = envCfg.port;
- configFile = pkgs.writeText "config.js" ''
- // ${pkgs.cryptpad}/lib/node_modules/cryptpad/config/config.example.js
- module.exports = {
- httpUnsafeOrigin: 'https://${domain}',
- httpPort: ${toString port},
- adminEmail: '${envCfg.email}',
- filePath: './datastore/',
- archivePath: './data/archive',
- pinPath: './data/pins',
- taskPath: './data/tasks',
- blockPath: './block',
- blobPath: './blob',
- blobStagingPath: './data/blobstage',
- decreePath: './data/decrees',
- logPath: './data/logs',
- logToStdout: false,
- logLevel: 'info',
- logFeedback: false,
- verbose: false,
- inactiveTime: false,
- maxUploadSize: 100 * 1024 * 1024,
- adminKeys: ${builtins.toJSON envCfg.admins},
- };
- '';
-in
-{
- options.myServices.websites.tools.cryptpad.enable = lib.mkEnableOption "Enable Cryptpad";
- config = lib.mkIf cfg.enable {
- myServices.tools.cryptpad.farm.hosts.immaeEu = {
- inherit domain port;
- config = configFile;
- };
- services.websites.env.tools.modules = [ "proxy_wstunnel" ];
- services.websites.env.tools.vhostConfs.cryptpad = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [domain];
- root = config.myServices.tools.cryptpad.farm.vhostRoots.immaeEu;
- extraConfig = [
- config.myServices.tools.cryptpad.farm.vhosts.immaeEu
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/cryptpad/farm.nix b/modules/private/websites/tools/cryptpad/farm.nix
deleted file mode 100644
index b35f348..0000000
--- a/modules/private/websites/tools/cryptpad/farm.nix
+++ /dev/null
@@ -1,180 +0,0 @@
-{ pkgs, config, lib, ... }:
-let
- cfg = config.myServices.tools.cryptpad.farm;
- toService = name:
- let
- inherit (cfg.hosts.${name}) package config;
- in {
- description = "Cryptpad ${name} Service";
- wantedBy = [ "multi-user.target" ];
- after = [ "networking.target" ];
- serviceConfig = {
- User = "cryptpad";
- Group = "cryptpad";
- Environment = [
- "CRYPTPAD_CONFIG=${config}"
- "HOME=%S/cryptpad/${name}"
- ];
- ExecStart = "${package}/bin/cryptpad";
- PrivateTmp = true;
- Restart = "always";
- StateDirectory = "cryptpad/${name}";
- WorkingDirectory = "%S/cryptpad/${name}";
- };
- };
- toVhostRoot = name: "${cfg.hosts.${name}.package}/lib/node_modules/cryptpad";
- toVhost = name:
- let
- inherit (cfg.hosts.${name}) package domain port;
- api_domain = domain;
- files_domain = domain;
- in ''
- RewriteEngine On
-
- Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
- Header set X-XSS-Protection "1; mode=block"
- Header set X-Content-Type-Options "nosniff"
- Header set Access-Control-Allow-Origin "*"
- Header set Permissions-Policy "interest-cohort=()"
-
- Header set Cross-Origin-Resource-Policy "cross-origin"
-
- Header set Cross-Origin-Opener-Policy "same-origin"
-
- Header set Cross-Origin-Embedder-Policy "require-corp"
-
- ErrorDocument 404 /customize.dist/404.html
-
-
- Header set Cache-Control "max-age=31536000"
-
-
- Header set Cache-Control "no-cache"
-
-
- SetEnv styleSrc "'unsafe-inline' 'self' ${domain}"
- SetEnv connectSrc "'self' https://${domain} ${domain} https://${api_domain} blob: wss://${api_domain} ${api_domain} ${files_domain}"
- SetEnv fontSrc "'self' data: ${domain}"
- SetEnv imgSrc "'self' data: * blob: ${domain}"
- SetEnv frameSrc "'self' blob:"
- SetEnv mediaSrc "'self' data: * blob: ${domain}"
- SetEnv childSrc "https://${domain}"
- SetEnv workerSrc "https://${domain}"
- SetEnv scriptSrc "'self' 'unsafe-eval' 'unsafe-inline' resource: ${domain}"
-
- Header set Content-Security-Policy "default-src 'none'; child-src %{childSrc}e; worker-src %{workerSrc}e; media-src %{mediaSrc}e; style-src %{styleSrc}e; script-src %{scriptSrc}e; connect-src %{connectSrc}e; font-src %{fontSrc}e; img-src %{imgSrc}e; frame-src %{frameSrc}e;"
-
- RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
- RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
- RewriteRule .* ws://localhost:${toString port}%{REQUEST_URI} [P,NE,QSA,L]
-
- RewriteRule ^/customize/(.*)$ /customize.dist/$1 [L]
-
- ProxyPassMatch "^/(api/(config|broadcast).*)$" "http://localhost:${toString port}/$1"
- ProxyPassReverse /api http://localhost:${toString port}/api
- ProxyPreserveHost On
- RequestHeader set X-Real-IP %{REMOTE_ADDR}s
-
- Alias /blob /var/lib/cryptpad/${name}/blob
-
- Require all granted
- AllowOverride None
-
- Alias /block /var/lib/cryptpad/${name}/block
-
- Require all granted
- AllowOverride None
-
-
- Header set Cache-Control "max-age=31536000"
- Header set Access-Control-Allow-Origin "*"
- Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
- Header set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length"
- Header set Access-Control-Expose-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length"
-
- RewriteCond %{REQUEST_METHOD} OPTIONS
- RewriteRule ^(.*)$ $1 [R=204,L]
-
-
-
- Header set Cache-Control "max-age=0"
-
-
- RewriteRule ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media|profile|contacts|todo|filepicker|debug|kanban|sheet|support|admin|notifications|teams|calendar|presentation|doc)$ $1/ [R=302,L]
-
- RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI} -f
- RewriteRule (.*) /www/$1 [L]
-
- RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI}/index.html -f
- RewriteRule (.*) /www/$1/index.html [L]
-
- RewriteCond %{DOCUMENT_ROOT}/customize.dist/%{REQUEST_URI} -f
- RewriteRule (.*) /customize.dist/$1 [L]
-
-
- AllowOverride None
- Require all granted
- DirectoryIndex index.html
-
-
- AllowOverride None
- Require all granted
- DirectoryIndex index.html
-
- '';
-in
-{
- options.myServices.tools.cryptpad.farm = {
- hosts = lib.mkOption {
- default = {};
- description = "Hosts to install";
- type = lib.types.attrsOf (lib.types.submodule {
- options = {
- port = lib.mkOption {
- type = lib.types.port;
- };
- package = lib.mkOption {
- type = lib.types.package;
- description = "Cryptpad package to use";
- default = pkgs.cryptpad;
- };
- domain = lib.mkOption {
- type = lib.types.str;
- description = "Domain for main host";
- };
- config = lib.mkOption {
- type = lib.types.path;
- description = "Path to configuration";
- };
- };
- });
- };
- vhosts = lib.mkOption {
- description = "Instance vhosts configs";
- readOnly = true;
- type = lib.types.attrsOf lib.types.str;
- default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhost;
- };
- vhostRoots = lib.mkOption {
- description = "Instance vhosts document roots";
- readOnly = true;
- type = lib.types.attrsOf lib.types.path;
- default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhostRoot;
- };
- };
- config = {
- users.users = lib.optionalAttrs (cfg.hosts != {}) {
- cryptpad = {
- uid = config.ids.uids.cryptpad;
- group = "cryptpad";
- description = "Cryptpad user";
- };
- };
- users.groups = lib.optionalAttrs (cfg.hosts != {}) {
- cryptpad = {
- gid = config.ids.gids.cryptpad;
- };
- };
- systemd.services = lib.listToAttrs (map (n: lib.nameValuePair "cryptpad-${n}" (toService n)) (builtins.attrNames cfg.hosts));
- };
-}
diff --git a/modules/private/websites/tools/dav/davical.nix b/modules/private/websites/tools/dav/davical.nix
deleted file mode 100644
index bc5ecf6..0000000
--- a/modules/private/websites/tools/dav/davical.nix
+++ /dev/null
@@ -1,133 +0,0 @@
-{ stdenv, fetchurl, gettext, writeText, env, awl, davical, config }:
-rec {
- activationScript = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/davical
- '';
- };
- keys."webapps/dav-davical" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
- pg_connect[] = "dbname=${env.postgresql.database} user=${env.postgresql.user} host=${env.postgresql.socket} password=${env.postgresql.password}";
-
- $c->readonly_webdav_collections = false;
-
- $c->admin_email ='davical@tools.immae.eu';
-
- $c->restrict_setup_to_admin = true;
-
- $c->collections_always_exist = false;
-
- $c->external_refresh = 60;
-
- $c->enable_scheduling = true;
-
- $c->iMIP = (object) array("send_email" => true);
-
- $c->authenticate_hook['optional'] = false;
- $c->authenticate_hook['call'] = 'LDAP_check';
- $c->authenticate_hook['config'] = array(
- 'host' => '${env.ldap.host}',
- 'port' => '389',
- 'startTLS' => 'yes',
- 'bindDN'=> '${env.ldap.dn}',
- 'passDN'=> '${env.ldap.password}',
- 'protocolVersion' => '3',
- 'baseDNUsers'=> array('ou=users,${env.ldap.base}', 'ou=group_users,${env.ldap.base}'),
- 'filterUsers' => '${env.ldap.filter}',
- 'baseDNGroups' => 'ou=groups,${env.ldap.base}',
- 'filterGroups' => 'memberOf=cn=groups,${env.ldap.dn}',
- 'mapping_field' => array(
- "username" => "uid",
- "fullname" => "cn",
- "email" => "mail",
- "modified" => "modifyTimestamp",
- ),
- 'format_updated'=> array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)),
- /** used to set default value for all users, will be overcharged by ldap if defined also in mapping_field **/
- // 'default_value' => array("date_format_type" => "E","locale" => "fr_FR"),
- 'group_mapping_field' => array(
- "username" => "cn",
- "updated" => "modifyTimestamp",
- "fullname" => "givenName",
- "displayname" => "givenName",
- "members" => "memberUid",
- "email" => "mail",
- ),
- );
-
- $c->do_not_sync_from_ldap = array('admin' => true);
- include('drivers_ldap.php');
- '';
- };
- webapp = davical.override { davical_config = config.secrets.fullPaths."webapps/dav-davical"; };
- webRoot = "${webapp}/htdocs";
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /davical "${root}"
- Alias /caldav.php "${root}/caldav.php"
-
- DirectoryIndex index.php index.html
- AcceptPathInfo On
- AllowOverride None
- Require all granted
-
-
- CGIPassAuth on
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- RewriteEngine On
-
- Header unset Access-Control-Allow-Origin
- Header unset Access-Control-Allow-Methods
- Header unset Access-Control-Allow-Headers
- Header unset Access-Control-Allow-Credentials
- Header unset Access-Control-Expose-Headers
-
- Header always set Access-Control-Allow-Origin "*"
- Header always set Access-Control-Allow-Methods "GET,POST,OPTIONS,PROPFIND,PROPPATCH,REPORT,PUT,MOVE,DELETE,LOCK,UNLOCK"
- Header always set Access-Control-Allow-Headers "User-Agent,Authorization,Content-type,Depth,If-match,If-None-Match,Lock-Token,Timeout,Destination,Overwrite,Prefer,X-client,X-Requested-With"
- Header always set Access-Control-Allow-Credentials false
- Header always set Access-Control-Expose-Headers "Etag,Preference-Applied"
-
- RewriteCond %{HTTP:Access-Control-Request-Method} !^$
- RewriteCond %{REQUEST_METHOD} OPTIONS
- RewriteRule ^(.*)$ $1 [R=200,L]
-
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" [ webapp config.secrets.fullPaths."webapps/dav-davical" awl ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "dynamic";
- "pm.max_children" = "60";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "10";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "DavicalPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/davical";
- "php_admin_value[include_path]" = "${awl}/inc:${webapp}/inc";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/davical";
- "php_flag[magic_quotes_gpc]" = "Off";
- "php_flag[register_globals]" = "Off";
- "php_admin_value[error_reporting]" = "E_ALL & ~E_NOTICE";
- "php_admin_value[default_charset]" = "utf-8";
- "php_flag[magic_quotes_runtime]" = "Off";
- };
- };
-}
diff --git a/modules/private/websites/tools/dav/default.nix b/modules/private/websites/tools/dav/default.nix
deleted file mode 100644
index b3aa03d..0000000
--- a/modules/private/websites/tools/dav/default.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- infcloud = rec {
- root = pkgs.webapps.infcloud;
- vhostConf = ''
- Alias /carddavmate ${root}
- Alias /caldavzap ${root}
- Alias /infcloud ${root}
-
- AllowOverride All
- Options FollowSymlinks
- Require all granted
- DirectoryIndex index.html
-
- '';
- };
- davical = pkgs.callPackage ./davical.nix {
- env = config.myEnv.tools.davical;
- inherit (pkgs.webapps) davical awl;
- inherit config;
- };
-
- cfg = config.myServices.websites.tools.dav;
-in {
- options.myServices.websites.tools.dav = {
- enable = lib.mkEnableOption "enable dav website";
- };
-
- config = lib.mkIf cfg.enable {
- system.activationScripts.davical = davical.activationScript;
- secrets.keys = davical.keys;
- services.websites.env.tools.modules = davical.apache.modules;
-
- services.websites.env.tools.vhostConfs.dav = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["dav.immae.eu" ];
- root = ./www;
- extraConfig = [
- infcloud.vhostConf
- (davical.apache.vhostConf config.services.phpfpm.pools.davical.socket)
- ];
- };
-
- services.phpfpm.pools = {
- davical = {
- user = config.services.httpd.Tools.user;
- group = config.services.httpd.Tools.group;
- settings = davical.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- };
- };
-}
-
diff --git a/modules/private/websites/tools/dav/www/index.html b/modules/private/websites/tools/dav/www/index.html
deleted file mode 100644
index 91c25ba..0000000
--- a/modules/private/websites/tools/dav/www/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
- Dav configuration
-
-
-
-
- Dav configuration:
-
- Server: https://dav.immae.eu/caldav.php
-
-
-
- Clients:
-
-
-
-
-
diff --git a/modules/private/websites/tools/db/default.nix b/modules/private/websites/tools/db/default.nix
deleted file mode 100644
index fc8d989..0000000
--- a/modules/private/websites/tools/db/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- adminer = pkgs.callPackage ../../commons/adminer.nix { inherit config; };
-
- cfg = config.myServices.websites.tools.db;
-in {
- options.myServices.websites.tools.db = {
- enable = lib.mkEnableOption "enable database's website";
- };
-
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.modules = adminer.apache.modules;
- services.websites.env.tools.vhostConfs.db-1 = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["db-1.immae.eu" ];
- root = null;
- extraConfig = [ (adminer.apache.vhostConf null) ];
- };
- };
-}
diff --git a/modules/private/websites/tools/diaspora/default.nix b/modules/private/websites/tools/diaspora/default.nix
deleted file mode 100644
index 3a115ed..0000000
--- a/modules/private/websites/tools/diaspora/default.nix
+++ /dev/null
@@ -1,185 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- env = config.myEnv.tools.diaspora;
- root = "${dcfg.workdir}/public/";
- cfg = config.myServices.websites.tools.diaspora;
- dcfg = config.services.diaspora;
-in {
- options.myServices.websites.tools.diaspora = {
- enable = lib.mkEnableOption "enable diaspora's website";
- };
-
- config = lib.mkIf cfg.enable {
- users.users.diaspora.extraGroups = [ "keys" ];
-
- secrets.keys = {
- "webapps/diaspora" = {
- isDir = true;
- user = "diaspora";
- group = "diaspora";
- permissions = "0500";
- };
- "webapps/diaspora/diaspora.yml" = {
- user = "diaspora";
- group = "diaspora";
- permissions = "0400";
- text = ''
- configuration:
- environment:
- url: "https://diaspora.immae.eu/"
- certificate_authorities: '${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt'
- redis: 'redis://${env.redis.host}:${env.redis.port}/${env.redis.db}'
- sidekiq:
- s3:
- assets:
- logging:
- logrotate:
- debug:
- server:
- listen: '${dcfg.sockets.rails}'
- rails_environment: 'production'
- chat:
- server:
- bosh:
- log:
- map:
- mapbox:
- privacy:
- piwik:
- statistics:
- camo:
- settings:
- enable_registrations: false
- welcome_message:
- invitations:
- open: false
- paypal_donations:
- community_spotlight:
- captcha:
- enable: false
- terms:
- maintenance:
- remove_old_users:
- default_metas:
- csp:
- services:
- twitter:
- tumblr:
- wordpress:
- mail:
- enable: true
- sender_address: 'diaspora@tools.immae.eu'
- method: 'sendmail'
- smtp:
- sendmail:
- location: '/run/wrappers/bin/sendmail'
- admins:
- account: "ismael"
- podmin_email: 'diaspora@tools.immae.eu'
- relay:
- outbound:
- inbound:
- ldap:
- enable: true
- host: ${env.ldap.host}
- port: 636
- only_ldap: true
- mail_attribute: mail
- skip_email_confirmation: true
- use_bind_dn: true
- bind_dn: "${env.ldap.dn}"
- bind_pw: "${env.ldap.password}"
- search_base: "${env.ldap.base}"
- search_filter: "${env.ldap.filter}"
- production:
- environment:
- development:
- environment:
- '';
- };
- "webapps/diaspora/database.yml" = {
- user = "diaspora";
- group = "diaspora";
- permissions = "0400";
- text = ''
- postgresql: &postgresql
- adapter: postgresql
- host: "${env.postgresql.socket}"
- port: "${env.postgresql.port}"
- username: "${env.postgresql.user}"
- password: "${env.postgresql.password}"
- encoding: unicode
- common: &common
- <<: *postgresql
- combined: &combined
- <<: *common
- development:
- <<: *combined
- database: diaspora_development
- production:
- <<: *combined
- database: ${env.postgresql.database}
- test:
- <<: *combined
- database: "diaspora_test"
- integration1:
- <<: *combined
- database: diaspora_integration1
- integration2:
- <<: *combined
- database: diaspora_integration2
- '';
- };
- "webapps/diaspora/secret_token.rb" = {
- user = "diaspora";
- group = "diaspora";
- permissions = "0400";
- text = ''
- Diaspora::Application.config.secret_key_base = '${env.secret_token}'
- '';
- };
- };
-
- services.diaspora = {
- enable = true;
- package = pkgs.webapps.diaspora.override { ldap = true; };
- dataDir = "/var/lib/diaspora_immae";
- adminEmail = "diaspora@tools.immae.eu";
- configDir = config.secrets.fullPaths."webapps/diaspora";
- };
-
- services.filesWatcher.diaspora = {
- restart = true;
- paths = [ dcfg.configDir ];
- };
-
- services.websites.env.tools.modules = [
- "headers" "proxy" "proxy_http"
- ];
- services.websites.env.tools.vhostConfs.diaspora = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "diaspora.immae.eu" ];
- root = root;
- extraConfig = [ ''
- RewriteEngine On
- RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
- RewriteRule ^/(.*)$ unix://${dcfg.sockets.rails}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L]
-
- ProxyRequests Off
- ProxyVia On
- ProxyPreserveHost On
- RequestHeader set X_FORWARDED_PROTO https
-
-
- Require all granted
-
-
-
- Require all granted
- Options -MultiViews
-
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/tools/ether/default.nix b/modules/private/websites/tools/ether/default.nix
deleted file mode 100644
index 0539095..0000000
--- a/modules/private/websites/tools/ether/default.nix
+++ /dev/null
@@ -1,216 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- env = config.myEnv.tools.etherpad-lite;
- cfg = config.myServices.websites.tools.etherpad-lite;
- # Make sure we’re not rebuilding whole libreoffice just because of a
- # dependency
- libreoffice = (import { overlays = []; }).libreoffice-fresh;
- ecfg = config.services.etherpad-lite;
-in {
- options.myServices.websites.tools.etherpad-lite = {
- enable = lib.mkEnableOption "enable etherpad's website";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "webapps/tools-etherpad-apikey" = {
- permissions = "0400";
- text = env.api_key;
- };
- "webapps/tools-etherpad-sessionkey" = {
- permissions = "0400";
- text = env.session_key;
- };
- "webapps/tools-etherpad" = {
- permissions = "0400";
- text = ''
- {
- "title": "Etherpad",
- "favicon": "favicon.ico",
- "skinName": "colibris",
- "skinVariants": "dark-toolbar light-background super-light-editor full-width-editor",
-
- "ip": "",
- "port" : "${ecfg.sockets.node}",
- "showSettingsInAdminPage" : false,
- "dbType" : "postgres",
- "dbSettings" : {
- "user" : "${env.postgresql.user}",
- "host" : "${env.postgresql.socket}",
- "password": "${env.postgresql.password}",
- "database": "${env.postgresql.database}",
- "charset" : "utf8mb4"
- },
-
- "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",
- "padOptions": {
- "noColors": false,
- "showControls": true,
- "showChat": true,
- "showLineNumbers": true,
- "useMonospaceFont": false,
- "userName": false,
- "userColor": false,
- "rtl": false,
- "alwaysShowChat": false,
- "chatAndUsers": false,
- "lang": "fr"
- },
-
- "suppressErrorsInPadText" : false,
- "requireSession" : false,
- "editOnly" : false,
- "sessionNoPassword" : false,
- "minify" : true,
- "maxAge" : 21600,
- "abiword" : null,
- "soffice" : "${libreoffice}/bin/soffice",
- "tidyHtml" : "",
- "allowUnknownFileEnds" : true,
- "requireAuthentication" : false,
- "requireAuthorization" : false,
- "trustProxy" : false,
- "disableIPlogging" : false,
- "automaticReconnectionTimeout" : 0,
- "scrollWhenFocusLineIsOutOfViewport": {
- "percentage": {
- "editionAboveViewport": 0,
- "editionBelowViewport": 0
- },
- "duration": 0,
- "scrollWhenCaretIsInTheLastLineOfViewport": false,
- "percentageToScrollWhenUserPressesArrowUp": 0
- },
- "users": {
- "admin": {
- "password": "${env.adminPassword}",
- "is_admin": true
- },
- "ldapauth": {
- "hash": "invalid",
- "url": "ldaps://${env.ldap.host}",
- "accountBase": "${env.ldap.base}",
- "accountPattern": "${env.ldap.filter}",
- "displayNameAttribute": "cn",
- "searchDN": "${env.ldap.dn}",
- "searchPWD": "${env.ldap.password}",
- "groupSearchBase": "${env.ldap.base}",
- "groupAttribute": "member",
- "groupAttributeIsDN": true,
- "searchScope": "sub",
- "groupSearch": "${env.ldap.group_filter}",
- "anonymousReadonly": false
- }
- },
- "ep_mypads": {
- "warning": "This hash is stored in database, changing anything here will not have any consequence",
- "ldap": {
- "url": "ldaps://${env.ldap.host}",
- "bindDN": "${env.ldap.dn}",
- "bindCredentials": "${env.ldap.password}",
- "searchBase": "${env.ldap.base}",
- "searchFilter": "${env.ldap.filter}",
- "properties": {
- "login": "uid",
- "email": "mail",
- "firstname": "givenName",
- "lastname": "sn"
- },
- "defaultLang": "fr"
- }
- },
- "ep_comments_page": {
- "displayCommentAsIcon": true,
- "highlightSelectedText": true
- },
- "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
- "loadTest": false,
- "indentationOnNewLine": false,
- "toolbar": {
- "left": [
- ["bold", "italic", "underline", "strikethrough"],
- ["orderedlist", "unorderedlist", "indent", "outdent"],
- ["undo", "redo"],
- ["clearauthorship"]
- ],
- "right": [
- ["importexport", "timeslider", "savedrevision"],
- ["settings", "embed"],
- ["showusers"]
- ],
- "timeslider": [
- ["timeslider_export", "timeslider_returnToPad"]
- ]
- },
- "loglevel": "INFO",
- "logconfig" : { "appenders": [ { "type": "console" } ] }
- }
- '';
- };
- };
- services.etherpad-lite = {
- enable = true;
- package = pkgs.webapps.etherpad-lite.withModules (p: [
- p.ep_align p.ep_bookmark p.ep_colors p.ep_comments_page
- p.ep_cursortrace p.ep_delete_empty_pads p.ep_embedmedia
- p.ep_font_size p.ep_headings2 p.ep_immae_buttons p.ep_ldapauth
- p.ep_line_height p.ep_markdown p.ep_mypads p.ep_page_view
- p.ep_previewimages p.ep_ruler p.ep_scrollto
- p.ep_set_title_on_pad p.ep_subscript_and_superscript
- p.ep_timesliderdiff
- ]);
- modules = [];
- sessionKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-sessionkey";
- apiKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-apikey";
- configFile = config.secrets.fullPaths."webapps/tools-etherpad";
- };
-
- systemd.services.etherpad-lite.serviceConfig.SupplementaryGroups = "keys";
- # Needed so that they get in the closure
- systemd.services.etherpad-lite.path = [ libreoffice pkgs.html-tidy ];
-
- services.filesWatcher.etherpad-lite = {
- restart = true;
- paths = [ ecfg.sessionKeyFile ecfg.apiKeyFile ecfg.configFile ];
- };
-
- services.websites.env.tools.modules = [
- "headers" "proxy" "proxy_http" "proxy_wstunnel"
- ];
- services.websites.env.tools.vhostConfs.etherpad-lite = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "ether.immae.eu" ];
- root = null;
- extraConfig = [ ''
- Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
- RequestHeader set X-Forwarded-Proto "https"
-
- RewriteEngine On
-
- RewriteMap redirects "txt:${pkgs.writeText "redirects.txt" config.myEnv.tools.etherpad-lite.redirects}"
- RewriteCond %{QUERY_STRING} "!noredirect"
- RewriteCond %{REQUEST_URI} "^(.*)$"
- RewriteCond ''${redirects:$1|Unknown} "!Unknown"
- RewriteRule "^(.*)$" ''${redirects:$1} [L,NE,R=301,QSD]
-
- RewriteCond %{REQUEST_URI} ^/socket.io [NC]
- RewriteCond %{QUERY_STRING} transport=websocket [NC]
- RewriteRule /(.*) unix://${ecfg.sockets.node}|ws://ether.immae.eu/$1 [P,NE,QSA,L]
-
-
- ProxyVia On
- ProxyRequests Off
- ProxyPreserveHost On
- ProxyPass / unix://${ecfg.sockets.node}|http://ether.immae.eu/
- ProxyPassReverse / unix://${ecfg.sockets.node}|http://ether.immae.eu/
-
- Options FollowSymLinks MultiViews
- AllowOverride None
- Require all granted
-
-
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/tools/games/codenames/codenames.patch b/modules/private/websites/tools/games/codenames/codenames.patch
deleted file mode 100644
index 9faf069..0000000
--- a/modules/private/websites/tools/games/codenames/codenames.patch
+++ /dev/null
@@ -1,8306 +0,0 @@
-diff --git a/elm.json b/elm.json
-index a0d276b..1b73a46 100644
---- a/elm.json
-+++ b/elm.json
-@@ -3,7 +3,7 @@
- "source-directories": [
- "src"
- ],
-- "elm-version": "0.19.0",
-+ "elm-version": "0.19.1",
- "dependencies": {
- "direct": {
- "elm/browser": "1.0.1",
-@@ -15,12 +15,11 @@
- "perzanko/elm-loading": "2.0.4"
- },
- "indirect": {
-- "Skinney/murmur3": "2.0.8",
- "elm/bytes": "1.0.8",
- "elm/file": "1.0.5",
- "elm/time": "1.0.0",
- "elm/virtual-dom": "1.0.2",
-- "rtfeldman/elm-css": "16.0.1",
-+ "rtfeldman/elm-css": "16.1.0",
- "rtfeldman/elm-hex": "1.0.0"
- }
- },
-@@ -32,4 +31,4 @@
- "elm/random": "1.0.0"
- }
- }
--}
-\ No newline at end of file
-+}
-diff --git a/package-lock.json b/package-lock.json
-index 778b061..05a22ab 100644
---- a/package-lock.json
-+++ b/package-lock.json
-@@ -4,196 +4,7963 @@
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.0.0",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
-+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.0.0"
-+ }
-+ },
-+ "@babel/core": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz",
-+ "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.0.0",
-+ "@babel/generator": "^7.3.4",
-+ "@babel/helpers": "^7.2.0",
-+ "@babel/parser": "^7.3.4",
-+ "@babel/template": "^7.2.2",
-+ "@babel/traverse": "^7.3.4",
-+ "@babel/types": "^7.3.4",
-+ "convert-source-map": "^1.1.0",
-+ "debug": "^4.1.0",
-+ "json5": "^2.1.0",
-+ "lodash": "^4.17.11",
-+ "resolve": "^1.3.2",
-+ "semver": "^5.4.1",
-+ "source-map": "^0.5.0"
-+ },
-+ "dependencies": {
-+ "json5": {
-+ "version": "2.1.3",
-+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
-+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
-+ "dev": true,
-+ "requires": {
-+ "minimist": "^1.2.5"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/generator": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz",
-+ "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.3.4",
-+ "jsesc": "^2.5.1",
-+ "lodash": "^4.17.11",
-+ "source-map": "^0.5.0",
-+ "trim-right": "^1.0.1"
-+ },
-+ "dependencies": {
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/helper-annotate-as-pure": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
-+ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-builder-binary-assignment-operator-visitor": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
-+ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-explode-assignable-expression": "^7.8.3",
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-builder-react-jsx": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz",
-+ "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-annotate-as-pure": "^7.8.3",
-+ "@babel/types": "^7.9.0"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-create-regexp-features-plugin": {
-+ "version": "7.8.8",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz",
-+ "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-annotate-as-pure": "^7.8.3",
-+ "@babel/helper-regex": "^7.8.3",
-+ "regexpu-core": "^4.7.0"
-+ }
-+ },
-+ "@babel/helper-define-map": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
-+ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-function-name": "^7.8.3",
-+ "@babel/types": "^7.8.3",
-+ "lodash": "^4.17.13"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-explode-assignable-expression": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
-+ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/traverse": "^7.8.3",
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/generator": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
-+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.9.5",
-+ "jsesc": "^2.5.1",
-+ "lodash": "^4.17.13",
-+ "source-map": "^0.5.0"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/traverse": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
-+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/generator": "^7.9.5",
-+ "@babel/helper-function-name": "^7.9.5",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "@babel/parser": "^7.9.0",
-+ "@babel/types": "^7.9.5",
-+ "debug": "^4.1.0",
-+ "globals": "^11.1.0",
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/helper-function-name": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
-+ "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-get-function-arity": "^7.8.3",
-+ "@babel/template": "^7.8.3",
-+ "@babel/types": "^7.9.5"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/template": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/parser": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-get-function-arity": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
-+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-hoist-variables": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
-+ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-member-expression-to-functions": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
-+ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-module-imports": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
-+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-module-transforms": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
-+ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-module-imports": "^7.8.3",
-+ "@babel/helper-replace-supers": "^7.8.6",
-+ "@babel/helper-simple-access": "^7.8.3",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "@babel/template": "^7.8.6",
-+ "@babel/types": "^7.9.0",
-+ "lodash": "^4.17.13"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/template": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/parser": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-optimise-call-expression": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
-+ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-plugin-utils": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
-+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
-+ "dev": true
-+ },
-+ "@babel/helper-regex": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
-+ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
-+ "dev": true,
-+ "requires": {
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/helper-remap-async-to-generator": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
-+ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-annotate-as-pure": "^7.8.3",
-+ "@babel/helper-wrap-function": "^7.8.3",
-+ "@babel/template": "^7.8.3",
-+ "@babel/traverse": "^7.8.3",
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/generator": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
-+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.9.5",
-+ "jsesc": "^2.5.1",
-+ "lodash": "^4.17.13",
-+ "source-map": "^0.5.0"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/template": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/parser": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ }
-+ },
-+ "@babel/traverse": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
-+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/generator": "^7.9.5",
-+ "@babel/helper-function-name": "^7.9.5",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "@babel/parser": "^7.9.0",
-+ "@babel/types": "^7.9.5",
-+ "debug": "^4.1.0",
-+ "globals": "^11.1.0",
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/helper-replace-supers": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
-+ "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-member-expression-to-functions": "^7.8.3",
-+ "@babel/helper-optimise-call-expression": "^7.8.3",
-+ "@babel/traverse": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/generator": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
-+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.9.5",
-+ "jsesc": "^2.5.1",
-+ "lodash": "^4.17.13",
-+ "source-map": "^0.5.0"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/traverse": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
-+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/generator": "^7.9.5",
-+ "@babel/helper-function-name": "^7.9.5",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "@babel/parser": "^7.9.0",
-+ "@babel/types": "^7.9.5",
-+ "debug": "^4.1.0",
-+ "globals": "^11.1.0",
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/helper-simple-access": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
-+ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/template": "^7.8.3",
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/template": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/parser": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-split-export-declaration": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
-+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "@babel/helper-validator-identifier": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
-+ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
-+ "dev": true
-+ },
-+ "@babel/helper-wrap-function": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
-+ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-function-name": "^7.8.3",
-+ "@babel/template": "^7.8.3",
-+ "@babel/traverse": "^7.8.3",
-+ "@babel/types": "^7.8.3"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/generator": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
-+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.9.5",
-+ "jsesc": "^2.5.1",
-+ "lodash": "^4.17.13",
-+ "source-map": "^0.5.0"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/template": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/parser": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ }
-+ },
-+ "@babel/traverse": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
-+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/generator": "^7.9.5",
-+ "@babel/helper-function-name": "^7.9.5",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "@babel/parser": "^7.9.0",
-+ "@babel/types": "^7.9.5",
-+ "debug": "^4.1.0",
-+ "globals": "^11.1.0",
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/helpers": {
-+ "version": "7.9.2",
-+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
-+ "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/template": "^7.8.3",
-+ "@babel/traverse": "^7.9.0",
-+ "@babel/types": "^7.9.0"
-+ },
-+ "dependencies": {
-+ "@babel/code-frame": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/highlight": "^7.8.3"
-+ }
-+ },
-+ "@babel/generator": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
-+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/types": "^7.9.5",
-+ "jsesc": "^2.5.1",
-+ "lodash": "^4.17.13",
-+ "source-map": "^0.5.0"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.9.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
-+ "dev": true
-+ },
-+ "@babel/template": {
-+ "version": "7.8.6",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/parser": "^7.8.6",
-+ "@babel/types": "^7.8.6"
-+ }
-+ },
-+ "@babel/traverse": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
-+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.8.3",
-+ "@babel/generator": "^7.9.5",
-+ "@babel/helper-function-name": "^7.9.5",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "@babel/parser": "^7.9.0",
-+ "@babel/types": "^7.9.5",
-+ "debug": "^4.1.0",
-+ "globals": "^11.1.0",
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.5",
-+ "lodash": "^4.17.13",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/highlight": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
-+ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-validator-identifier": "^7.9.0",
-+ "chalk": "^2.0.0",
-+ "js-tokens": "^4.0.0"
-+ }
-+ },
-+ "@babel/parser": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz",
-+ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==",
-+ "dev": true
-+ },
-+ "@babel/plugin-proposal-async-generator-functions": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
-+ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/helper-remap-async-to-generator": "^7.8.3",
-+ "@babel/plugin-syntax-async-generators": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-proposal-json-strings": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
-+ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/plugin-syntax-json-strings": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-proposal-object-rest-spread": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz",
-+ "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-+ "@babel/plugin-transform-parameters": "^7.9.5"
-+ }
-+ },
-+ "@babel/plugin-proposal-optional-catch-binding": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
-+ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-proposal-unicode-property-regex": {
-+ "version": "7.8.8",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz",
-+ "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-create-regexp-features-plugin": "^7.8.8",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-syntax-async-generators": {
-+ "version": "7.8.4",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-syntax-flow": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz",
-+ "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-syntax-json-strings": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-syntax-jsx": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
-+ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-syntax-object-rest-spread": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-syntax-optional-catch-binding": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.0"
-+ }
-+ },
-+ "@babel/plugin-transform-arrow-functions": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
-+ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-async-to-generator": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
-+ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-module-imports": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/helper-remap-async-to-generator": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-block-scoped-functions": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
-+ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-block-scoping": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
-+ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "lodash": "^4.17.13"
-+ }
-+ },
-+ "@babel/plugin-transform-classes": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz",
-+ "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-annotate-as-pure": "^7.8.3",
-+ "@babel/helper-define-map": "^7.8.3",
-+ "@babel/helper-function-name": "^7.9.5",
-+ "@babel/helper-optimise-call-expression": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/helper-replace-supers": "^7.8.6",
-+ "@babel/helper-split-export-declaration": "^7.8.3",
-+ "globals": "^11.1.0"
-+ }
-+ },
-+ "@babel/plugin-transform-computed-properties": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
-+ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-destructuring": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz",
-+ "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-dotall-regex": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
-+ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-duplicate-keys": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
-+ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-exponentiation-operator": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
-+ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-flow-strip-types": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz",
-+ "integrity": "sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.0.0",
-+ "@babel/plugin-syntax-flow": "^7.2.0"
-+ }
-+ },
-+ "@babel/plugin-transform-for-of": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz",
-+ "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-function-name": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
-+ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-function-name": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-literals": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
-+ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-modules-amd": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz",
-+ "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-module-transforms": "^7.9.0",
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "babel-plugin-dynamic-import-node": "^2.3.0"
-+ }
-+ },
-+ "@babel/plugin-transform-modules-commonjs": {
-+ "version": "7.2.0",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
-+ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-module-transforms": "^7.1.0",
-+ "@babel/helper-plugin-utils": "^7.0.0",
-+ "@babel/helper-simple-access": "^7.1.0"
-+ }
-+ },
-+ "@babel/plugin-transform-modules-systemjs": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz",
-+ "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-hoist-variables": "^7.8.3",
-+ "@babel/helper-module-transforms": "^7.9.0",
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "babel-plugin-dynamic-import-node": "^2.3.0"
-+ }
-+ },
-+ "@babel/plugin-transform-modules-umd": {
-+ "version": "7.9.0",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz",
-+ "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-module-transforms": "^7.9.0",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-named-capturing-groups-regex": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
-+ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-create-regexp-features-plugin": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-new-target": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
-+ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-object-super": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
-+ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/helper-replace-supers": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-parameters": {
-+ "version": "7.9.5",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz",
-+ "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-get-function-arity": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-react-jsx": {
-+ "version": "7.3.0",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
-+ "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-builder-react-jsx": "^7.3.0",
-+ "@babel/helper-plugin-utils": "^7.0.0",
-+ "@babel/plugin-syntax-jsx": "^7.2.0"
-+ }
-+ },
-+ "@babel/plugin-transform-regenerator": {
-+ "version": "7.8.7",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz",
-+ "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==",
-+ "dev": true,
-+ "requires": {
-+ "regenerator-transform": "^0.14.2"
-+ }
-+ },
-+ "@babel/plugin-transform-shorthand-properties": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
-+ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-spread": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
-+ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-sticky-regex": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
-+ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3",
-+ "@babel/helper-regex": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-template-literals": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
-+ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-annotate-as-pure": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-typeof-symbol": {
-+ "version": "7.8.4",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
-+ "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/plugin-transform-unicode-regex": {
-+ "version": "7.8.3",
-+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
-+ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-+ "@babel/helper-plugin-utils": "^7.8.3"
-+ }
-+ },
-+ "@babel/preset-env": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz",
-+ "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/helper-module-imports": "^7.0.0",
-+ "@babel/helper-plugin-utils": "^7.0.0",
-+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
-+ "@babel/plugin-proposal-json-strings": "^7.2.0",
-+ "@babel/plugin-proposal-object-rest-spread": "^7.3.4",
-+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
-+ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
-+ "@babel/plugin-syntax-async-generators": "^7.2.0",
-+ "@babel/plugin-syntax-json-strings": "^7.2.0",
-+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
-+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
-+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
-+ "@babel/plugin-transform-async-to-generator": "^7.3.4",
-+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
-+ "@babel/plugin-transform-block-scoping": "^7.3.4",
-+ "@babel/plugin-transform-classes": "^7.3.4",
-+ "@babel/plugin-transform-computed-properties": "^7.2.0",
-+ "@babel/plugin-transform-destructuring": "^7.2.0",
-+ "@babel/plugin-transform-dotall-regex": "^7.2.0",
-+ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
-+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
-+ "@babel/plugin-transform-for-of": "^7.2.0",
-+ "@babel/plugin-transform-function-name": "^7.2.0",
-+ "@babel/plugin-transform-literals": "^7.2.0",
-+ "@babel/plugin-transform-modules-amd": "^7.2.0",
-+ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
-+ "@babel/plugin-transform-modules-systemjs": "^7.3.4",
-+ "@babel/plugin-transform-modules-umd": "^7.2.0",
-+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
-+ "@babel/plugin-transform-new-target": "^7.0.0",
-+ "@babel/plugin-transform-object-super": "^7.2.0",
-+ "@babel/plugin-transform-parameters": "^7.2.0",
-+ "@babel/plugin-transform-regenerator": "^7.3.4",
-+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
-+ "@babel/plugin-transform-spread": "^7.2.0",
-+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
-+ "@babel/plugin-transform-template-literals": "^7.2.0",
-+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
-+ "@babel/plugin-transform-unicode-regex": "^7.2.0",
-+ "browserslist": "^4.3.4",
-+ "invariant": "^2.2.2",
-+ "js-levenshtein": "^1.1.3",
-+ "semver": "^5.3.0"
-+ }
-+ },
-+ "@babel/runtime": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz",
-+ "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==",
-+ "dev": true,
-+ "requires": {
-+ "regenerator-runtime": "^0.12.0"
-+ },
-+ "dependencies": {
-+ "regenerator-runtime": {
-+ "version": "0.12.1",
-+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "@babel/template": {
-+ "version": "7.2.2",
-+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
-+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.0.0",
-+ "@babel/parser": "^7.2.2",
-+ "@babel/types": "^7.2.2"
-+ }
-+ },
-+ "@babel/traverse": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz",
-+ "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.0.0",
-+ "@babel/generator": "^7.3.4",
-+ "@babel/helper-function-name": "^7.1.0",
-+ "@babel/helper-split-export-declaration": "^7.0.0",
-+ "@babel/parser": "^7.3.4",
-+ "@babel/types": "^7.3.4",
-+ "debug": "^4.1.0",
-+ "globals": "^11.1.0",
-+ "lodash": "^4.17.11"
-+ }
-+ },
-+ "@babel/types": {
-+ "version": "7.3.4",
-+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
-+ "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
-+ "dev": true,
-+ "requires": {
-+ "esutils": "^2.0.2",
-+ "lodash": "^4.17.11",
-+ "to-fast-properties": "^2.0.0"
-+ }
-+ },
-+ "@iarna/toml": {
-+ "version": "2.2.5",
-+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
-+ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
-+ "dev": true
-+ },
-+ "@mrmlnc/readdir-enhanced": {
-+ "version": "2.2.1",
-+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
-+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
-+ "dev": true,
-+ "requires": {
-+ "call-me-maybe": "^1.0.1",
-+ "glob-to-regexp": "^0.3.0"
-+ }
-+ },
-+ "@nodelib/fs.stat": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
-+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
-+ "dev": true
-+ },
-+ "@parcel/fs": {
-+ "version": "1.11.0",
-+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz",
-+ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==",
-+ "dev": true,
-+ "requires": {
-+ "@parcel/utils": "^1.11.0",
-+ "mkdirp": "^0.5.1",
-+ "rimraf": "^2.6.2"
-+ }
-+ },
-+ "@parcel/logger": {
-+ "version": "1.11.1",
-+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz",
-+ "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==",
-+ "dev": true,
-+ "requires": {
-+ "@parcel/workers": "^1.11.0",
-+ "chalk": "^2.1.0",
-+ "grapheme-breaker": "^0.3.2",
-+ "ora": "^2.1.0",
-+ "strip-ansi": "^4.0.0"
-+ }
-+ },
-+ "@parcel/utils": {
-+ "version": "1.11.0",
-+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz",
-+ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==",
-+ "dev": true
-+ },
-+ "@parcel/watcher": {
-+ "version": "1.12.1",
-+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz",
-+ "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==",
-+ "dev": true,
-+ "requires": {
-+ "@parcel/utils": "^1.11.0",
-+ "chokidar": "^2.1.5"
-+ }
-+ },
-+ "@parcel/workers": {
-+ "version": "1.11.0",
-+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz",
-+ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==",
-+ "dev": true,
-+ "requires": {
-+ "@parcel/utils": "^1.11.0",
-+ "physical-cpu-count": "^2.0.0"
-+ }
-+ },
-+ "@types/q": {
-+ "version": "1.5.2",
-+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
-+ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
-+ "dev": true
-+ },
-+ "abab": {
-+ "version": "2.0.3",
-+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
-+ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
-+ "dev": true
-+ },
-+ "abbrev": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-+ "dev": true
-+ },
-+ "acorn": {
-+ "version": "7.1.1",
-+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
-+ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
-+ "dev": true
-+ },
-+ "acorn-globals": {
-+ "version": "4.3.4",
-+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
-+ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
-+ "dev": true,
-+ "requires": {
-+ "acorn": "^6.0.1",
-+ "acorn-walk": "^6.0.1"
-+ },
-+ "dependencies": {
-+ "acorn": {
-+ "version": "6.4.1",
-+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
-+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "acorn-walk": {
-+ "version": "6.2.0",
-+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
-+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
-+ "dev": true
-+ },
-+ "ajv": {
-+ "version": "6.12.2",
-+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-+ "requires": {
-+ "fast-deep-equal": "^3.1.1",
-+ "fast-json-stable-stringify": "^2.0.0",
-+ "json-schema-traverse": "^0.4.1",
-+ "uri-js": "^4.2.2"
-+ }
-+ },
-+ "alphanum-sort": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
-+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
-+ "dev": true
-+ },
-+ "ansi-regex": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-+ "dev": true
-+ },
-+ "ansi-styles": {
-+ "version": "3.2.1",
-+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-+ "dev": true,
-+ "requires": {
-+ "color-convert": "^1.9.0"
-+ }
-+ },
-+ "ansi-to-html": {
-+ "version": "0.6.14",
-+ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz",
-+ "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==",
-+ "dev": true,
-+ "requires": {
-+ "entities": "^1.1.2"
-+ },
-+ "dependencies": {
-+ "entities": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "anymatch": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-+ "dev": true,
-+ "requires": {
-+ "micromatch": "^3.1.4",
-+ "normalize-path": "^2.1.1"
-+ },
-+ "dependencies": {
-+ "normalize-path": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-+ "dev": true,
-+ "requires": {
-+ "remove-trailing-separator": "^1.0.1"
-+ }
-+ }
-+ }
-+ },
-+ "argparse": {
-+ "version": "1.0.10",
-+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-+ "dev": true,
-+ "requires": {
-+ "sprintf-js": "~1.0.2"
-+ }
-+ },
-+ "arr-diff": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
-+ "dev": true
-+ },
-+ "arr-flatten": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
-+ "dev": true
-+ },
-+ "arr-union": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
-+ "dev": true
-+ },
-+ "array-equal": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-+ "dev": true
-+ },
-+ "array-unique": {
-+ "version": "0.3.2",
-+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
-+ "dev": true
-+ },
-+ "asn1": {
-+ "version": "0.2.4",
-+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
-+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
-+ "requires": {
-+ "safer-buffer": "~2.1.0"
-+ }
-+ },
-+ "asn1.js": {
-+ "version": "4.10.1",
-+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.0.0",
-+ "inherits": "^2.0.1",
-+ "minimalistic-assert": "^1.0.0"
-+ }
-+ },
-+ "assert": {
-+ "version": "1.5.0",
-+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
-+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
-+ "dev": true,
-+ "requires": {
-+ "object-assign": "^4.1.1",
-+ "util": "0.10.3"
-+ },
-+ "dependencies": {
-+ "inherits": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
-+ "dev": true
-+ },
-+ "util": {
-+ "version": "0.10.3",
-+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
-+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "2.0.1"
-+ }
-+ }
-+ }
-+ },
-+ "assert-plus": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-+ },
-+ "assign-symbols": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
-+ "dev": true
-+ },
-+ "async-each": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
-+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
-+ "dev": true
-+ },
-+ "async-limiter": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
-+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
-+ "dev": true
-+ },
-+ "asynckit": {
-+ "version": "0.4.0",
-+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-+ },
-+ "atob": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-+ "dev": true
-+ },
-+ "aws-sign2": {
-+ "version": "0.7.0",
-+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
-+ },
-+ "aws4": {
-+ "version": "1.9.1",
-+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-+ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
-+ },
-+ "babel-plugin-dynamic-import-node": {
-+ "version": "2.3.3",
-+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-+ "dev": true,
-+ "requires": {
-+ "object.assign": "^4.1.0"
-+ }
-+ },
-+ "babel-runtime": {
-+ "version": "6.26.0",
-+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-+ "dev": true,
-+ "requires": {
-+ "core-js": "^2.4.0",
-+ "regenerator-runtime": "^0.11.0"
-+ },
-+ "dependencies": {
-+ "regenerator-runtime": {
-+ "version": "0.11.1",
-+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "babel-types": {
-+ "version": "6.26.0",
-+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
-+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
-+ "dev": true,
-+ "requires": {
-+ "babel-runtime": "^6.26.0",
-+ "esutils": "^2.0.2",
-+ "lodash": "^4.17.4",
-+ "to-fast-properties": "^1.0.3"
-+ },
-+ "dependencies": {
-+ "to-fast-properties": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
-+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "babylon-walk": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
-+ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=",
-+ "dev": true,
-+ "requires": {
-+ "babel-runtime": "^6.11.6",
-+ "babel-types": "^6.15.0",
-+ "lodash.clone": "^4.5.0"
-+ }
-+ },
- "balanced-match": {
- "version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-+ "dev": true
-+ },
-+ "base": {
-+ "version": "0.11.2",
-+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-+ "dev": true,
-+ "requires": {
-+ "cache-base": "^1.0.1",
-+ "class-utils": "^0.3.5",
-+ "component-emitter": "^1.2.1",
-+ "define-property": "^1.0.0",
-+ "isobject": "^3.0.1",
-+ "mixin-deep": "^1.2.0",
-+ "pascalcase": "^0.1.1"
-+ },
-+ "dependencies": {
-+ "define-property": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^1.0.0"
-+ }
-+ },
-+ "is-accessor-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-data-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-descriptor": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-+ "dev": true,
-+ "requires": {
-+ "is-accessor-descriptor": "^1.0.0",
-+ "is-data-descriptor": "^1.0.0",
-+ "kind-of": "^6.0.2"
-+ }
-+ }
-+ }
-+ },
-+ "base64-js": {
-+ "version": "1.3.1",
-+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
-+ "dev": true
-+ },
-+ "bcrypt-pbkdf": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-+ "requires": {
-+ "tweetnacl": "^0.14.3"
-+ }
-+ },
-+ "binary-extensions": {
-+ "version": "1.13.1",
-+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
-+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
-+ "dev": true
-+ },
-+ "bindings": {
-+ "version": "1.5.0",
-+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
-+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-+ "dev": true,
-+ "requires": {
-+ "file-uri-to-path": "1.0.0"
-+ }
-+ },
-+ "bn.js": {
-+ "version": "4.11.8",
-+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
-+ "dev": true
-+ },
-+ "boolbase": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
-+ "dev": true
-+ },
-+ "brace-expansion": {
-+ "version": "1.1.11",
-+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-+ "dev": true,
-+ "requires": {
-+ "balanced-match": "^1.0.0",
-+ "concat-map": "0.0.1"
-+ }
-+ },
-+ "braces": {
-+ "version": "2.3.2",
-+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-+ "dev": true,
-+ "requires": {
-+ "arr-flatten": "^1.1.0",
-+ "array-unique": "^0.3.2",
-+ "extend-shallow": "^2.0.1",
-+ "fill-range": "^4.0.0",
-+ "isobject": "^3.0.1",
-+ "repeat-element": "^1.1.2",
-+ "snapdragon": "^0.8.1",
-+ "snapdragon-node": "^2.0.1",
-+ "split-string": "^3.0.2",
-+ "to-regex": "^3.0.1"
-+ },
-+ "dependencies": {
-+ "extend-shallow": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-+ "dev": true,
-+ "requires": {
-+ "is-extendable": "^0.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "brfs": {
-+ "version": "1.6.1",
-+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
-+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
-+ "dev": true,
-+ "requires": {
-+ "quote-stream": "^1.0.1",
-+ "resolve": "^1.1.5",
-+ "static-module": "^2.2.0",
-+ "through2": "^2.0.0"
-+ }
-+ },
-+ "brorand": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
-+ "dev": true
-+ },
-+ "browser-process-hrtime": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-+ "dev": true
-+ },
-+ "browserify-aes": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
-+ "dev": true,
-+ "requires": {
-+ "buffer-xor": "^1.0.3",
-+ "cipher-base": "^1.0.0",
-+ "create-hash": "^1.1.0",
-+ "evp_bytestokey": "^1.0.3",
-+ "inherits": "^2.0.1",
-+ "safe-buffer": "^5.0.1"
-+ }
-+ },
-+ "browserify-cipher": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
-+ "dev": true,
-+ "requires": {
-+ "browserify-aes": "^1.0.4",
-+ "browserify-des": "^1.0.0",
-+ "evp_bytestokey": "^1.0.0"
-+ }
-+ },
-+ "browserify-des": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
-+ "dev": true,
-+ "requires": {
-+ "cipher-base": "^1.0.1",
-+ "des.js": "^1.0.0",
-+ "inherits": "^2.0.1",
-+ "safe-buffer": "^5.1.2"
-+ }
-+ },
-+ "browserify-rsa": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
-+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.1.0",
-+ "randombytes": "^2.0.1"
-+ }
-+ },
-+ "browserify-sign": {
-+ "version": "4.0.4",
-+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
-+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.1.1",
-+ "browserify-rsa": "^4.0.0",
-+ "create-hash": "^1.1.0",
-+ "create-hmac": "^1.1.2",
-+ "elliptic": "^6.0.0",
-+ "inherits": "^2.0.1",
-+ "parse-asn1": "^5.0.0"
-+ }
-+ },
-+ "browserify-zlib": {
-+ "version": "0.2.0",
-+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
-+ "dev": true,
-+ "requires": {
-+ "pako": "~1.0.5"
-+ },
-+ "dependencies": {
-+ "pako": {
-+ "version": "1.0.11",
-+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "browserslist": {
-+ "version": "4.12.0",
-+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz",
-+ "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==",
-+ "dev": true,
-+ "requires": {
-+ "caniuse-lite": "^1.0.30001043",
-+ "electron-to-chromium": "^1.3.413",
-+ "node-releases": "^1.1.53",
-+ "pkg-up": "^2.0.0"
-+ }
-+ },
-+ "buffer": {
-+ "version": "4.9.2",
-+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
-+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
-+ "dev": true,
-+ "requires": {
-+ "base64-js": "^1.0.2",
-+ "ieee754": "^1.1.4",
-+ "isarray": "^1.0.0"
-+ }
-+ },
-+ "buffer-equal": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
-+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
-+ "dev": true
-+ },
-+ "buffer-from": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-+ "dev": true
-+ },
-+ "buffer-xor": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
-+ "dev": true
-+ },
-+ "builtin-status-codes": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
-+ "dev": true
-+ },
-+ "cache-base": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-+ "dev": true,
-+ "requires": {
-+ "collection-visit": "^1.0.0",
-+ "component-emitter": "^1.2.1",
-+ "get-value": "^2.0.6",
-+ "has-value": "^1.0.0",
-+ "isobject": "^3.0.1",
-+ "set-value": "^2.0.0",
-+ "to-object-path": "^0.3.0",
-+ "union-value": "^1.0.0",
-+ "unset-value": "^1.0.0"
-+ }
-+ },
-+ "call-me-maybe": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
-+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
-+ "dev": true
-+ },
-+ "caller-callsite": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
-+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
-+ "dev": true,
-+ "requires": {
-+ "callsites": "^2.0.0"
-+ }
-+ },
-+ "caller-path": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
-+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
-+ "dev": true,
-+ "requires": {
-+ "caller-callsite": "^2.0.0"
-+ }
-+ },
-+ "callsites": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
-+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
-+ "dev": true
-+ },
-+ "camelcase": {
-+ "version": "5.3.1",
-+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-+ "dev": true
-+ },
-+ "caniuse-api": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
-+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
-+ "dev": true,
-+ "requires": {
-+ "browserslist": "^4.0.0",
-+ "caniuse-lite": "^1.0.0",
-+ "lodash.memoize": "^4.1.2",
-+ "lodash.uniq": "^4.5.0"
-+ }
-+ },
-+ "caniuse-lite": {
-+ "version": "1.0.30001048",
-+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz",
-+ "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==",
-+ "dev": true
-+ },
-+ "caseless": {
-+ "version": "0.12.0",
-+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
-+ },
-+ "chalk": {
-+ "version": "2.4.2",
-+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-+ "dev": true,
-+ "requires": {
-+ "ansi-styles": "^3.2.1",
-+ "escape-string-regexp": "^1.0.5",
-+ "supports-color": "^5.3.0"
-+ },
-+ "dependencies": {
-+ "supports-color": {
-+ "version": "5.5.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^3.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "chokidar": {
-+ "version": "2.1.8",
-+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
-+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-+ "dev": true,
-+ "requires": {
-+ "anymatch": "^2.0.0",
-+ "async-each": "^1.0.1",
-+ "braces": "^2.3.2",
-+ "fsevents": "^1.2.7",
-+ "glob-parent": "^3.1.0",
-+ "inherits": "^2.0.3",
-+ "is-binary-path": "^1.0.0",
-+ "is-glob": "^4.0.0",
-+ "normalize-path": "^3.0.0",
-+ "path-is-absolute": "^1.0.0",
-+ "readdirp": "^2.2.1",
-+ "upath": "^1.1.1"
-+ },
-+ "dependencies": {
-+ "fsevents": {
-+ "version": "1.2.12",
-+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
-+ "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "bindings": "^1.5.0",
-+ "nan": "^2.12.1",
-+ "node-pre-gyp": "*"
-+ },
-+ "dependencies": {
-+ "abbrev": {
-+ "version": "1.1.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "ansi-regex": {
-+ "version": "2.1.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "aproba": {
-+ "version": "1.2.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "are-we-there-yet": {
-+ "version": "1.1.5",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "delegates": "^1.0.0",
-+ "readable-stream": "^2.0.6"
-+ }
-+ },
-+ "balanced-match": {
-+ "version": "1.0.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "brace-expansion": {
-+ "version": "1.1.11",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "balanced-match": "^1.0.0",
-+ "concat-map": "0.0.1"
-+ }
-+ },
-+ "chownr": {
-+ "version": "1.1.4",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "code-point-at": {
-+ "version": "1.1.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "concat-map": {
-+ "version": "0.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "console-control-strings": {
-+ "version": "1.1.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "core-util-is": {
-+ "version": "1.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "debug": {
-+ "version": "3.2.6",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "ms": "^2.1.1"
-+ }
-+ },
-+ "deep-extend": {
-+ "version": "0.6.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "delegates": {
-+ "version": "1.0.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "detect-libc": {
-+ "version": "1.0.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "fs-minipass": {
-+ "version": "1.2.7",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "minipass": "^2.6.0"
-+ }
-+ },
-+ "fs.realpath": {
-+ "version": "1.0.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "gauge": {
-+ "version": "2.7.4",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "aproba": "^1.0.3",
-+ "console-control-strings": "^1.0.0",
-+ "has-unicode": "^2.0.0",
-+ "object-assign": "^4.1.0",
-+ "signal-exit": "^3.0.0",
-+ "string-width": "^1.0.1",
-+ "strip-ansi": "^3.0.1",
-+ "wide-align": "^1.1.0"
-+ }
-+ },
-+ "glob": {
-+ "version": "7.1.6",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "fs.realpath": "^1.0.0",
-+ "inflight": "^1.0.4",
-+ "inherits": "2",
-+ "minimatch": "^3.0.4",
-+ "once": "^1.3.0",
-+ "path-is-absolute": "^1.0.0"
-+ }
-+ },
-+ "has-unicode": {
-+ "version": "2.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "iconv-lite": {
-+ "version": "0.4.24",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "safer-buffer": ">= 2.1.2 < 3"
-+ }
-+ },
-+ "ignore-walk": {
-+ "version": "3.0.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "minimatch": "^3.0.4"
-+ }
-+ },
-+ "inflight": {
-+ "version": "1.0.6",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "once": "^1.3.0",
-+ "wrappy": "1"
-+ }
-+ },
-+ "inherits": {
-+ "version": "2.0.4",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "ini": {
-+ "version": "1.3.5",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "is-fullwidth-code-point": {
-+ "version": "1.0.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "number-is-nan": "^1.0.0"
-+ }
-+ },
-+ "isarray": {
-+ "version": "1.0.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "minimatch": {
-+ "version": "3.0.4",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "brace-expansion": "^1.1.7"
-+ }
-+ },
-+ "minimist": {
-+ "version": "1.2.5",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "minipass": {
-+ "version": "2.9.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "safe-buffer": "^5.1.2",
-+ "yallist": "^3.0.0"
-+ }
-+ },
-+ "minizlib": {
-+ "version": "1.3.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "minipass": "^2.9.0"
-+ }
-+ },
-+ "mkdirp": {
-+ "version": "0.5.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "minimist": "^1.2.5"
-+ }
-+ },
-+ "ms": {
-+ "version": "2.1.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "needle": {
-+ "version": "2.3.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "debug": "^3.2.6",
-+ "iconv-lite": "^0.4.4",
-+ "sax": "^1.2.4"
-+ }
-+ },
-+ "node-pre-gyp": {
-+ "version": "0.14.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "detect-libc": "^1.0.2",
-+ "mkdirp": "^0.5.1",
-+ "needle": "^2.2.1",
-+ "nopt": "^4.0.1",
-+ "npm-packlist": "^1.1.6",
-+ "npmlog": "^4.0.2",
-+ "rc": "^1.2.7",
-+ "rimraf": "^2.6.1",
-+ "semver": "^5.3.0",
-+ "tar": "^4.4.2"
-+ }
-+ },
-+ "nopt": {
-+ "version": "4.0.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "abbrev": "1",
-+ "osenv": "^0.1.4"
-+ }
-+ },
-+ "npm-bundled": {
-+ "version": "1.1.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "npm-normalize-package-bin": "^1.0.1"
-+ }
-+ },
-+ "npm-normalize-package-bin": {
-+ "version": "1.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "npm-packlist": {
-+ "version": "1.4.8",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "ignore-walk": "^3.0.1",
-+ "npm-bundled": "^1.0.1",
-+ "npm-normalize-package-bin": "^1.0.1"
-+ }
-+ },
-+ "npmlog": {
-+ "version": "4.1.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "are-we-there-yet": "~1.1.2",
-+ "console-control-strings": "~1.1.0",
-+ "gauge": "~2.7.3",
-+ "set-blocking": "~2.0.0"
-+ }
-+ },
-+ "number-is-nan": {
-+ "version": "1.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "object-assign": {
-+ "version": "4.1.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "once": {
-+ "version": "1.4.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "wrappy": "1"
-+ }
-+ },
-+ "os-homedir": {
-+ "version": "1.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "os-tmpdir": {
-+ "version": "1.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "osenv": {
-+ "version": "0.1.5",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "os-homedir": "^1.0.0",
-+ "os-tmpdir": "^1.0.0"
-+ }
-+ },
-+ "path-is-absolute": {
-+ "version": "1.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "process-nextick-args": {
-+ "version": "2.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "rc": {
-+ "version": "1.2.8",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "deep-extend": "^0.6.0",
-+ "ini": "~1.3.0",
-+ "minimist": "^1.2.0",
-+ "strip-json-comments": "~2.0.1"
-+ }
-+ },
-+ "readable-stream": {
-+ "version": "2.3.7",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "core-util-is": "~1.0.0",
-+ "inherits": "~2.0.3",
-+ "isarray": "~1.0.0",
-+ "process-nextick-args": "~2.0.0",
-+ "safe-buffer": "~5.1.1",
-+ "string_decoder": "~1.1.1",
-+ "util-deprecate": "~1.0.1"
-+ }
-+ },
-+ "rimraf": {
-+ "version": "2.7.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "glob": "^7.1.3"
-+ }
-+ },
-+ "safe-buffer": {
-+ "version": "5.1.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "safer-buffer": {
-+ "version": "2.1.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "sax": {
-+ "version": "1.2.4",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "semver": {
-+ "version": "5.7.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "set-blocking": {
-+ "version": "2.0.0",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "signal-exit": {
-+ "version": "3.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "string-width": {
-+ "version": "1.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "code-point-at": "^1.0.0",
-+ "is-fullwidth-code-point": "^1.0.0",
-+ "strip-ansi": "^3.0.0"
-+ }
-+ },
-+ "string_decoder": {
-+ "version": "1.1.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "safe-buffer": "~5.1.0"
-+ }
-+ },
-+ "strip-ansi": {
-+ "version": "3.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "ansi-regex": "^2.0.0"
-+ }
-+ },
-+ "strip-json-comments": {
-+ "version": "2.0.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "tar": {
-+ "version": "4.4.13",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "chownr": "^1.1.1",
-+ "fs-minipass": "^1.2.5",
-+ "minipass": "^2.8.6",
-+ "minizlib": "^1.2.1",
-+ "mkdirp": "^0.5.0",
-+ "safe-buffer": "^5.1.2",
-+ "yallist": "^3.0.3"
-+ }
-+ },
-+ "util-deprecate": {
-+ "version": "1.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "wide-align": {
-+ "version": "1.1.3",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true,
-+ "requires": {
-+ "string-width": "^1.0.2 || 2"
-+ }
-+ },
-+ "wrappy": {
-+ "version": "1.0.2",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ },
-+ "yallist": {
-+ "version": "3.1.1",
-+ "bundled": true,
-+ "dev": true,
-+ "optional": true
-+ }
-+ }
-+ }
-+ }
-+ },
-+ "cipher-base": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "^2.0.1",
-+ "safe-buffer": "^5.0.1"
-+ }
-+ },
-+ "class-utils": {
-+ "version": "0.3.6",
-+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-+ "dev": true,
-+ "requires": {
-+ "arr-union": "^3.1.0",
-+ "define-property": "^0.2.5",
-+ "isobject": "^3.0.0",
-+ "static-extend": "^0.1.1"
-+ },
-+ "dependencies": {
-+ "define-property": {
-+ "version": "0.2.5",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^0.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "cli-cursor": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
-+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
-+ "dev": true,
-+ "requires": {
-+ "restore-cursor": "^2.0.0"
-+ }
-+ },
-+ "cli-spinners": {
-+ "version": "1.3.1",
-+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
-+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
-+ "dev": true
-+ },
-+ "cliui": {
-+ "version": "5.0.0",
-+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-+ "dev": true,
-+ "requires": {
-+ "string-width": "^3.1.0",
-+ "strip-ansi": "^5.2.0",
-+ "wrap-ansi": "^5.1.0"
-+ },
-+ "dependencies": {
-+ "ansi-regex": {
-+ "version": "4.1.0",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-+ "dev": true
-+ },
-+ "strip-ansi": {
-+ "version": "5.2.0",
-+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-+ "dev": true,
-+ "requires": {
-+ "ansi-regex": "^4.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "clone": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-+ "dev": true
-+ },
-+ "clones": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz",
-+ "integrity": "sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==",
-+ "dev": true
-+ },
-+ "coa": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
-+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
-+ "dev": true,
-+ "requires": {
-+ "@types/q": "^1.5.1",
-+ "chalk": "^2.4.1",
-+ "q": "^1.1.2"
-+ }
-+ },
-+ "collection-visit": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-+ "dev": true,
-+ "requires": {
-+ "map-visit": "^1.0.0",
-+ "object-visit": "^1.0.0"
-+ }
-+ },
-+ "color": {
-+ "version": "3.1.2",
-+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
-+ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
-+ "dev": true,
-+ "requires": {
-+ "color-convert": "^1.9.1",
-+ "color-string": "^1.5.2"
-+ }
-+ },
-+ "color-convert": {
-+ "version": "1.9.3",
-+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-+ "dev": true,
-+ "requires": {
-+ "color-name": "1.1.3"
-+ }
-+ },
-+ "color-name": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-+ "dev": true
-+ },
-+ "color-string": {
-+ "version": "1.5.3",
-+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
-+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
-+ "dev": true,
-+ "requires": {
-+ "color-name": "^1.0.0",
-+ "simple-swizzle": "^0.2.2"
-+ }
-+ },
-+ "combined-stream": {
-+ "version": "1.0.8",
-+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-+ "requires": {
-+ "delayed-stream": "~1.0.0"
-+ }
-+ },
-+ "command-exists": {
-+ "version": "1.2.9",
-+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
-+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
-+ "dev": true
-+ },
-+ "commander": {
-+ "version": "2.20.3",
-+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-+ "dev": true
-+ },
-+ "component-emitter": {
-+ "version": "1.3.0",
-+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
-+ "dev": true
-+ },
-+ "concat-map": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-+ "dev": true
-+ },
-+ "concat-stream": {
-+ "version": "1.6.2",
-+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-+ "dev": true,
-+ "requires": {
-+ "buffer-from": "^1.0.0",
-+ "inherits": "^2.0.3",
-+ "readable-stream": "^2.2.2",
-+ "typedarray": "^0.0.6"
-+ }
-+ },
-+ "config-chain": {
-+ "version": "1.1.12",
-+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
-+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
-+ "dev": true,
-+ "requires": {
-+ "ini": "^1.3.4",
-+ "proto-list": "~1.2.1"
-+ }
-+ },
-+ "console-browserify": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
-+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
-+ "dev": true
-+ },
-+ "constants-browserify": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
-+ "dev": true
-+ },
-+ "convert-source-map": {
-+ "version": "1.7.0",
-+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
-+ "dev": true,
-+ "requires": {
-+ "safe-buffer": "~5.1.1"
-+ }
-+ },
-+ "copy-descriptor": {
-+ "version": "0.1.1",
-+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
-+ "dev": true
-+ },
-+ "core-js": {
-+ "version": "2.6.11",
-+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
-+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
-+ "dev": true
-+ },
-+ "core-util-is": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-+ },
-+ "cosmiconfig": {
-+ "version": "5.2.1",
-+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
-+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
-+ "dev": true,
-+ "requires": {
-+ "import-fresh": "^2.0.0",
-+ "is-directory": "^0.3.1",
-+ "js-yaml": "^3.13.1",
-+ "parse-json": "^4.0.0"
-+ }
-+ },
-+ "create-ecdh": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.1.0",
-+ "elliptic": "^6.0.0"
-+ }
-+ },
-+ "create-hash": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
-+ "dev": true,
-+ "requires": {
-+ "cipher-base": "^1.0.1",
-+ "inherits": "^2.0.1",
-+ "md5.js": "^1.3.4",
-+ "ripemd160": "^2.0.1",
-+ "sha.js": "^2.4.0"
-+ }
-+ },
-+ "create-hmac": {
-+ "version": "1.1.7",
-+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
-+ "dev": true,
-+ "requires": {
-+ "cipher-base": "^1.0.3",
-+ "create-hash": "^1.1.0",
-+ "inherits": "^2.0.1",
-+ "ripemd160": "^2.0.0",
-+ "safe-buffer": "^5.0.1",
-+ "sha.js": "^2.4.8"
-+ }
-+ },
-+ "cross-spawn": {
-+ "version": "6.0.5",
-+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-+ "dev": true,
-+ "requires": {
-+ "nice-try": "^1.0.4",
-+ "path-key": "^2.0.1",
-+ "semver": "^5.5.0",
-+ "shebang-command": "^1.2.0",
-+ "which": "^1.2.9"
-+ }
-+ },
-+ "crypto-browserify": {
-+ "version": "3.12.0",
-+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
-+ "dev": true,
-+ "requires": {
-+ "browserify-cipher": "^1.0.0",
-+ "browserify-sign": "^4.0.0",
-+ "create-ecdh": "^4.0.0",
-+ "create-hash": "^1.1.0",
-+ "create-hmac": "^1.1.0",
-+ "diffie-hellman": "^5.0.0",
-+ "inherits": "^2.0.1",
-+ "pbkdf2": "^3.0.3",
-+ "public-encrypt": "^4.0.0",
-+ "randombytes": "^2.0.0",
-+ "randomfill": "^1.0.3"
-+ }
-+ },
-+ "css-color-names": {
-+ "version": "0.0.4",
-+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
-+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
-+ "dev": true
-+ },
-+ "css-declaration-sorter": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
-+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.1",
-+ "timsort": "^0.3.0"
-+ }
-+ },
-+ "css-modules-loader-core": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz",
-+ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=",
-+ "dev": true,
-+ "requires": {
-+ "icss-replace-symbols": "1.1.0",
-+ "postcss": "6.0.1",
-+ "postcss-modules-extract-imports": "1.1.0",
-+ "postcss-modules-local-by-default": "1.2.0",
-+ "postcss-modules-scope": "1.1.0",
-+ "postcss-modules-values": "1.3.0"
-+ },
-+ "dependencies": {
-+ "ansi-regex": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-+ "dev": true
-+ },
-+ "ansi-styles": {
-+ "version": "2.2.1",
-+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-+ "dev": true
-+ },
-+ "chalk": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-+ "dev": true,
-+ "requires": {
-+ "ansi-styles": "^2.2.1",
-+ "escape-string-regexp": "^1.0.2",
-+ "has-ansi": "^2.0.0",
-+ "strip-ansi": "^3.0.0",
-+ "supports-color": "^2.0.0"
-+ },
-+ "dependencies": {
-+ "supports-color": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "has-flag": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
-+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-+ "dev": true
-+ },
-+ "postcss": {
-+ "version": "6.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
-+ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^1.1.3",
-+ "source-map": "^0.5.6",
-+ "supports-color": "^3.2.3"
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ },
-+ "strip-ansi": {
-+ "version": "3.0.1",
-+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-+ "dev": true,
-+ "requires": {
-+ "ansi-regex": "^2.0.0"
-+ }
-+ },
-+ "supports-color": {
-+ "version": "3.2.3",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
-+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^1.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "css-select": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
-+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
-+ "dev": true,
-+ "requires": {
-+ "boolbase": "^1.0.0",
-+ "css-what": "^3.2.1",
-+ "domutils": "^1.7.0",
-+ "nth-check": "^1.0.2"
-+ }
-+ },
-+ "css-select-base-adapter": {
-+ "version": "0.1.1",
-+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
-+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
-+ "dev": true
-+ },
-+ "css-selector-tokenizer": {
-+ "version": "0.7.2",
-+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz",
-+ "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==",
-+ "dev": true,
-+ "requires": {
-+ "cssesc": "^3.0.0",
-+ "fastparse": "^1.1.2",
-+ "regexpu-core": "^4.6.0"
-+ }
-+ },
-+ "css-tree": {
-+ "version": "1.0.0-alpha.37",
-+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
-+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
-+ "dev": true,
-+ "requires": {
-+ "mdn-data": "2.0.4",
-+ "source-map": "^0.6.1"
-+ }
-+ },
-+ "css-what": {
-+ "version": "3.2.1",
-+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz",
-+ "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==",
-+ "dev": true
-+ },
-+ "cssesc": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-+ "dev": true
-+ },
-+ "cssnano": {
-+ "version": "4.1.10",
-+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
-+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
-+ "dev": true,
-+ "requires": {
-+ "cosmiconfig": "^5.0.0",
-+ "cssnano-preset-default": "^4.0.7",
-+ "is-resolvable": "^1.0.0",
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "cssnano-preset-default": {
-+ "version": "4.0.7",
-+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
-+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
-+ "dev": true,
-+ "requires": {
-+ "css-declaration-sorter": "^4.0.1",
-+ "cssnano-util-raw-cache": "^4.0.1",
-+ "postcss": "^7.0.0",
-+ "postcss-calc": "^7.0.1",
-+ "postcss-colormin": "^4.0.3",
-+ "postcss-convert-values": "^4.0.1",
-+ "postcss-discard-comments": "^4.0.2",
-+ "postcss-discard-duplicates": "^4.0.2",
-+ "postcss-discard-empty": "^4.0.1",
-+ "postcss-discard-overridden": "^4.0.1",
-+ "postcss-merge-longhand": "^4.0.11",
-+ "postcss-merge-rules": "^4.0.3",
-+ "postcss-minify-font-values": "^4.0.2",
-+ "postcss-minify-gradients": "^4.0.2",
-+ "postcss-minify-params": "^4.0.2",
-+ "postcss-minify-selectors": "^4.0.2",
-+ "postcss-normalize-charset": "^4.0.1",
-+ "postcss-normalize-display-values": "^4.0.2",
-+ "postcss-normalize-positions": "^4.0.2",
-+ "postcss-normalize-repeat-style": "^4.0.2",
-+ "postcss-normalize-string": "^4.0.2",
-+ "postcss-normalize-timing-functions": "^4.0.2",
-+ "postcss-normalize-unicode": "^4.0.1",
-+ "postcss-normalize-url": "^4.0.1",
-+ "postcss-normalize-whitespace": "^4.0.2",
-+ "postcss-ordered-values": "^4.1.2",
-+ "postcss-reduce-initial": "^4.0.3",
-+ "postcss-reduce-transforms": "^4.0.2",
-+ "postcss-svgo": "^4.0.2",
-+ "postcss-unique-selectors": "^4.0.1"
-+ }
-+ },
-+ "cssnano-util-get-arguments": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
-+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
-+ "dev": true
-+ },
-+ "cssnano-util-get-match": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
-+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
-+ "dev": true
-+ },
-+ "cssnano-util-raw-cache": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
-+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "cssnano-util-same-parent": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
-+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
-+ "dev": true
-+ },
-+ "csso": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
-+ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
-+ "dev": true,
-+ "requires": {
-+ "css-tree": "1.0.0-alpha.39"
-+ },
-+ "dependencies": {
-+ "css-tree": {
-+ "version": "1.0.0-alpha.39",
-+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
-+ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
-+ "dev": true,
-+ "requires": {
-+ "mdn-data": "2.0.6",
-+ "source-map": "^0.6.1"
-+ }
-+ },
-+ "mdn-data": {
-+ "version": "2.0.6",
-+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
-+ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "cssom": {
-+ "version": "0.3.8",
-+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-+ "dev": true
-+ },
-+ "cssstyle": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
-+ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
-+ "dev": true,
-+ "requires": {
-+ "cssom": "0.3.x"
-+ }
-+ },
-+ "dashdash": {
-+ "version": "1.14.1",
-+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-+ "requires": {
-+ "assert-plus": "^1.0.0"
-+ }
-+ },
-+ "data-urls": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
-+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
-+ "dev": true,
-+ "requires": {
-+ "abab": "^2.0.0",
-+ "whatwg-mimetype": "^2.2.0",
-+ "whatwg-url": "^7.0.0"
-+ }
-+ },
-+ "deasync": {
-+ "version": "0.1.19",
-+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz",
-+ "integrity": "sha512-oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg==",
-+ "dev": true,
-+ "requires": {
-+ "bindings": "^1.5.0",
-+ "node-addon-api": "^1.7.1"
-+ }
-+ },
-+ "debug": {
-+ "version": "4.1.1",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-+ "dev": true,
-+ "requires": {
-+ "ms": "^2.1.1"
-+ }
-+ },
-+ "decamelize": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-+ "dev": true
-+ },
-+ "decode-uri-component": {
-+ "version": "0.2.0",
-+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
-+ "dev": true
-+ },
-+ "deep-is": {
-+ "version": "0.1.3",
-+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-+ "dev": true
-+ },
-+ "defaults": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
-+ "dev": true,
-+ "requires": {
-+ "clone": "^1.0.2"
-+ },
-+ "dependencies": {
-+ "clone": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "define-properties": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-+ "dev": true,
-+ "requires": {
-+ "object-keys": "^1.0.12"
-+ }
-+ },
-+ "define-property": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^1.0.2",
-+ "isobject": "^3.0.1"
-+ },
-+ "dependencies": {
-+ "is-accessor-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-data-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-descriptor": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-+ "dev": true,
-+ "requires": {
-+ "is-accessor-descriptor": "^1.0.0",
-+ "is-data-descriptor": "^1.0.0",
-+ "kind-of": "^6.0.2"
-+ }
-+ }
-+ }
-+ },
-+ "delayed-stream": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-+ },
-+ "depd": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
-+ "dev": true
-+ },
-+ "des.js": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
-+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "^2.0.1",
-+ "minimalistic-assert": "^1.0.0"
-+ }
-+ },
-+ "destroy": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
-+ "dev": true
-+ },
-+ "diffie-hellman": {
-+ "version": "5.0.3",
-+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.1.0",
-+ "miller-rabin": "^4.0.0",
-+ "randombytes": "^2.0.0"
-+ }
-+ },
-+ "dom-serializer": {
-+ "version": "0.2.2",
-+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
-+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
-+ "dev": true,
-+ "requires": {
-+ "domelementtype": "^2.0.1",
-+ "entities": "^2.0.0"
-+ },
-+ "dependencies": {
-+ "domelementtype": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
-+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "domain-browser": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
-+ "dev": true
-+ },
-+ "domelementtype": {
-+ "version": "1.3.1",
-+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-+ "dev": true
-+ },
-+ "domexception": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
-+ "dev": true,
-+ "requires": {
-+ "webidl-conversions": "^4.0.2"
-+ }
-+ },
-+ "domhandler": {
-+ "version": "2.4.2",
-+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
-+ "dev": true,
-+ "requires": {
-+ "domelementtype": "1"
-+ }
-+ },
-+ "domutils": {
-+ "version": "1.7.0",
-+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
-+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
-+ "dev": true,
-+ "requires": {
-+ "dom-serializer": "0",
-+ "domelementtype": "1"
-+ }
-+ },
-+ "dot-prop": {
-+ "version": "5.2.0",
-+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
-+ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
-+ "dev": true,
-+ "requires": {
-+ "is-obj": "^2.0.0"
-+ }
-+ },
-+ "dotenv": {
-+ "version": "5.0.1",
-+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
-+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
-+ "dev": true
-+ },
-+ "dotenv-expand": {
-+ "version": "4.2.0",
-+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
-+ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
-+ "dev": true
-+ },
-+ "duplexer2": {
-+ "version": "0.1.4",
-+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
-+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
-+ "dev": true,
-+ "requires": {
-+ "readable-stream": "^2.0.2"
-+ }
-+ },
-+ "ecc-jsbn": {
-+ "version": "0.1.2",
-+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
-+ "requires": {
-+ "jsbn": "~0.1.0",
-+ "safer-buffer": "^2.1.0"
-+ }
-+ },
-+ "editorconfig": {
-+ "version": "0.15.3",
-+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
-+ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
-+ "dev": true,
-+ "requires": {
-+ "commander": "^2.19.0",
-+ "lru-cache": "^4.1.5",
-+ "semver": "^5.6.0",
-+ "sigmund": "^1.0.1"
-+ }
-+ },
-+ "ee-first": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
-+ "dev": true
-+ },
-+ "electron-to-chromium": {
-+ "version": "1.3.418",
-+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz",
-+ "integrity": "sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==",
-+ "dev": true
-+ },
-+ "elliptic": {
-+ "version": "6.5.2",
-+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
-+ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.4.0",
-+ "brorand": "^1.0.1",
-+ "hash.js": "^1.0.0",
-+ "hmac-drbg": "^1.0.0",
-+ "inherits": "^2.0.1",
-+ "minimalistic-assert": "^1.0.0",
-+ "minimalistic-crypto-utils": "^1.0.0"
-+ }
-+ },
-+ "elm-hot": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz",
-+ "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==",
-+ "dev": true
-+ },
-+ "emoji-regex": {
-+ "version": "7.0.3",
-+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-+ "dev": true
-+ },
-+ "encodeurl": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
-+ "dev": true
-+ },
-+ "entities": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
-+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
-+ "dev": true
-+ },
-+ "error-ex": {
-+ "version": "1.3.2",
-+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-+ "dev": true,
-+ "requires": {
-+ "is-arrayish": "^0.2.1"
-+ }
-+ },
-+ "es-abstract": {
-+ "version": "1.17.5",
-+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
-+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
-+ "dev": true,
-+ "requires": {
-+ "es-to-primitive": "^1.2.1",
-+ "function-bind": "^1.1.1",
-+ "has": "^1.0.3",
-+ "has-symbols": "^1.0.1",
-+ "is-callable": "^1.1.5",
-+ "is-regex": "^1.0.5",
-+ "object-inspect": "^1.7.0",
-+ "object-keys": "^1.1.1",
-+ "object.assign": "^4.1.0",
-+ "string.prototype.trimleft": "^2.1.1",
-+ "string.prototype.trimright": "^2.1.1"
-+ }
-+ },
-+ "es-to-primitive": {
-+ "version": "1.2.1",
-+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-+ "dev": true,
-+ "requires": {
-+ "is-callable": "^1.1.4",
-+ "is-date-object": "^1.0.1",
-+ "is-symbol": "^1.0.2"
-+ }
-+ },
-+ "escape-html": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
-+ "dev": true
-+ },
-+ "escape-string-regexp": {
-+ "version": "1.0.5",
-+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-+ "dev": true
-+ },
-+ "escodegen": {
-+ "version": "1.9.1",
-+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
-+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
-+ "dev": true,
-+ "requires": {
-+ "esprima": "^3.1.3",
-+ "estraverse": "^4.2.0",
-+ "esutils": "^2.0.2",
-+ "optionator": "^0.8.1",
-+ "source-map": "~0.6.1"
-+ },
-+ "dependencies": {
-+ "esprima": {
-+ "version": "3.1.3",
-+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "esprima": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-+ "dev": true
-+ },
-+ "estraverse": {
-+ "version": "4.3.0",
-+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-+ "dev": true
-+ },
-+ "esutils": {
-+ "version": "2.0.3",
-+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-+ "dev": true
-+ },
-+ "etag": {
-+ "version": "1.8.1",
-+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
-+ "dev": true
-+ },
-+ "events": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
-+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
-+ "dev": true
-+ },
-+ "evp_bytestokey": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
-+ "dev": true,
-+ "requires": {
-+ "md5.js": "^1.3.4",
-+ "safe-buffer": "^5.1.1"
-+ }
-+ },
-+ "expand-brackets": {
-+ "version": "2.1.4",
-+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-+ "dev": true,
-+ "requires": {
-+ "debug": "^2.3.3",
-+ "define-property": "^0.2.5",
-+ "extend-shallow": "^2.0.1",
-+ "posix-character-classes": "^0.1.0",
-+ "regex-not": "^1.0.0",
-+ "snapdragon": "^0.8.1",
-+ "to-regex": "^3.0.1"
-+ },
-+ "dependencies": {
-+ "debug": {
-+ "version": "2.6.9",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-+ "dev": true,
-+ "requires": {
-+ "ms": "2.0.0"
-+ }
-+ },
-+ "define-property": {
-+ "version": "0.2.5",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^0.1.0"
-+ }
-+ },
-+ "extend-shallow": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-+ "dev": true,
-+ "requires": {
-+ "is-extendable": "^0.1.0"
-+ }
-+ },
-+ "ms": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "extend": {
-+ "version": "3.0.2",
-+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
-+ },
-+ "extend-shallow": {
-+ "version": "3.0.2",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-+ "dev": true,
-+ "requires": {
-+ "assign-symbols": "^1.0.0",
-+ "is-extendable": "^1.0.1"
-+ },
-+ "dependencies": {
-+ "is-extendable": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-+ "dev": true,
-+ "requires": {
-+ "is-plain-object": "^2.0.4"
-+ }
-+ }
-+ }
-+ },
-+ "extglob": {
-+ "version": "2.0.4",
-+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-+ "dev": true,
-+ "requires": {
-+ "array-unique": "^0.3.2",
-+ "define-property": "^1.0.0",
-+ "expand-brackets": "^2.1.4",
-+ "extend-shallow": "^2.0.1",
-+ "fragment-cache": "^0.2.1",
-+ "regex-not": "^1.0.0",
-+ "snapdragon": "^0.8.1",
-+ "to-regex": "^3.0.1"
-+ },
-+ "dependencies": {
-+ "define-property": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^1.0.0"
-+ }
-+ },
-+ "extend-shallow": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-+ "dev": true,
-+ "requires": {
-+ "is-extendable": "^0.1.0"
-+ }
-+ },
-+ "is-accessor-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-data-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-descriptor": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-+ "dev": true,
-+ "requires": {
-+ "is-accessor-descriptor": "^1.0.0",
-+ "is-data-descriptor": "^1.0.0",
-+ "kind-of": "^6.0.2"
-+ }
-+ }
-+ }
-+ },
-+ "extsprintf": {
-+ "version": "1.3.0",
-+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
-+ },
-+ "falafel": {
-+ "version": "2.2.4",
-+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz",
-+ "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==",
-+ "dev": true,
-+ "requires": {
-+ "acorn": "^7.1.1",
-+ "foreach": "^2.0.5",
-+ "isarray": "^2.0.1",
-+ "object-keys": "^1.0.6"
-+ },
-+ "dependencies": {
-+ "isarray": {
-+ "version": "2.0.5",
-+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "fast-deep-equal": {
-+ "version": "3.1.1",
-+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
-+ },
-+ "fast-glob": {
-+ "version": "2.2.7",
-+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
-+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
-+ "dev": true,
-+ "requires": {
-+ "@mrmlnc/readdir-enhanced": "^2.2.1",
-+ "@nodelib/fs.stat": "^1.1.2",
-+ "glob-parent": "^3.1.0",
-+ "is-glob": "^4.0.0",
-+ "merge2": "^1.2.3",
-+ "micromatch": "^3.1.10"
-+ }
-+ },
-+ "fast-json-stable-stringify": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
-+ },
-+ "fast-levenshtein": {
-+ "version": "2.0.6",
-+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-+ "dev": true
-+ },
-+ "fastparse": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
-+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
-+ "dev": true
-+ },
-+ "file-uri-to-path": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-+ "dev": true
-+ },
-+ "filesize": {
-+ "version": "3.6.1",
-+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
-+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
-+ "dev": true
-+ },
-+ "fill-range": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-+ "dev": true,
-+ "requires": {
-+ "extend-shallow": "^2.0.1",
-+ "is-number": "^3.0.0",
-+ "repeat-string": "^1.6.1",
-+ "to-regex-range": "^2.1.0"
-+ },
-+ "dependencies": {
-+ "extend-shallow": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-+ "dev": true,
-+ "requires": {
-+ "is-extendable": "^0.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "find-elm-dependencies": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz",
-+ "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==",
-+ "dev": true,
-+ "requires": {
-+ "firstline": "1.2.0",
-+ "lodash": "4.17.15"
-+ }
-+ },
-+ "find-up": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-+ "dev": true,
-+ "requires": {
-+ "locate-path": "^2.0.0"
-+ }
-+ },
-+ "firstline": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz",
-+ "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=",
-+ "dev": true
-+ },
-+ "for-in": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-+ "dev": true
-+ },
-+ "foreach": {
-+ "version": "2.0.5",
-+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
-+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
-+ "dev": true
-+ },
-+ "forever-agent": {
-+ "version": "0.6.1",
-+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
-+ },
-+ "form-data": {
-+ "version": "2.3.3",
-+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-+ "requires": {
-+ "asynckit": "^0.4.0",
-+ "combined-stream": "^1.0.6",
-+ "mime-types": "^2.1.12"
-+ }
-+ },
-+ "fragment-cache": {
-+ "version": "0.2.1",
-+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-+ "dev": true,
-+ "requires": {
-+ "map-cache": "^0.2.2"
-+ }
-+ },
-+ "fresh": {
-+ "version": "0.5.2",
-+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
-+ "dev": true
-+ },
-+ "fs.realpath": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-+ "dev": true
-+ },
-+ "function-bind": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-+ "dev": true
-+ },
-+ "get-caller-file": {
-+ "version": "2.0.5",
-+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-+ "dev": true
-+ },
-+ "get-port": {
-+ "version": "3.2.0",
-+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
-+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
-+ "dev": true
-+ },
-+ "get-value": {
-+ "version": "2.0.6",
-+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
-+ "dev": true
-+ },
-+ "getpass": {
-+ "version": "0.1.7",
-+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-+ "requires": {
-+ "assert-plus": "^1.0.0"
-+ }
-+ },
-+ "glob": {
-+ "version": "7.1.4",
-+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-+ "dev": true,
-+ "requires": {
-+ "fs.realpath": "^1.0.0",
-+ "inflight": "^1.0.4",
-+ "inherits": "2",
-+ "minimatch": "^3.0.4",
-+ "once": "^1.3.0",
-+ "path-is-absolute": "^1.0.0"
-+ }
-+ },
-+ "glob-parent": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-+ "dev": true,
-+ "requires": {
-+ "is-glob": "^3.1.0",
-+ "path-dirname": "^1.0.0"
-+ },
-+ "dependencies": {
-+ "is-glob": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-+ "dev": true,
-+ "requires": {
-+ "is-extglob": "^2.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "glob-to-regexp": {
-+ "version": "0.3.0",
-+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
-+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
-+ "dev": true
-+ },
-+ "globals": {
-+ "version": "11.12.0",
-+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-+ "dev": true
-+ },
-+ "graceful-fs": {
-+ "version": "4.2.3",
-+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-+ "dev": true
-+ },
-+ "grapheme-breaker": {
-+ "version": "0.3.2",
-+ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz",
-+ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=",
-+ "dev": true,
-+ "requires": {
-+ "brfs": "^1.2.0",
-+ "unicode-trie": "^0.3.1"
-+ }
-+ },
-+ "har-schema": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
-+ },
-+ "har-validator": {
-+ "version": "5.1.3",
-+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-+ "requires": {
-+ "ajv": "^6.5.5",
-+ "har-schema": "^2.0.0"
-+ }
-+ },
-+ "has": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-+ "dev": true,
-+ "requires": {
-+ "function-bind": "^1.1.1"
-+ }
-+ },
-+ "has-ansi": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-+ "dev": true,
-+ "requires": {
-+ "ansi-regex": "^2.0.0"
-+ },
-+ "dependencies": {
-+ "ansi-regex": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "has-flag": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-+ "dev": true
-+ },
-+ "has-symbols": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
-+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
-+ "dev": true
-+ },
-+ "has-value": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-+ "dev": true,
-+ "requires": {
-+ "get-value": "^2.0.6",
-+ "has-values": "^1.0.0",
-+ "isobject": "^3.0.0"
-+ }
-+ },
-+ "has-values": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-+ "dev": true,
-+ "requires": {
-+ "is-number": "^3.0.0",
-+ "kind-of": "^4.0.0"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "hash-base": {
-+ "version": "3.0.4",
-+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
-+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "^2.0.1",
-+ "safe-buffer": "^5.0.1"
-+ }
-+ },
-+ "hash.js": {
-+ "version": "1.1.7",
-+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "^2.0.3",
-+ "minimalistic-assert": "^1.0.1"
-+ }
-+ },
-+ "hex-color-regex": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
-+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
-+ "dev": true
-+ },
-+ "hmac-drbg": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-+ "dev": true,
-+ "requires": {
-+ "hash.js": "^1.0.3",
-+ "minimalistic-assert": "^1.0.0",
-+ "minimalistic-crypto-utils": "^1.0.1"
-+ }
-+ },
-+ "hsl-regex": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
-+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
-+ "dev": true
-+ },
-+ "hsla-regex": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
-+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
-+ "dev": true
-+ },
-+ "html-comment-regex": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
-+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
-+ "dev": true
-+ },
-+ "html-encoding-sniffer": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
-+ "dev": true,
-+ "requires": {
-+ "whatwg-encoding": "^1.0.1"
-+ }
-+ },
-+ "html-tags": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz",
-+ "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=",
-+ "dev": true
-+ },
-+ "htmlnano": {
-+ "version": "0.2.5",
-+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz",
-+ "integrity": "sha512-X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano": "^4.1.10",
-+ "normalize-html-whitespace": "^1.0.0",
-+ "posthtml": "^0.12.0",
-+ "posthtml-render": "^1.1.5",
-+ "purgecss": "^1.4.0",
-+ "svgo": "^1.3.2",
-+ "terser": "^4.3.9",
-+ "uncss": "^0.17.2"
-+ },
-+ "dependencies": {
-+ "posthtml": {
-+ "version": "0.12.3",
-+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz",
-+ "integrity": "sha512-Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==",
-+ "dev": true,
-+ "requires": {
-+ "posthtml-parser": "^0.4.2",
-+ "posthtml-render": "^1.2.2"
-+ }
-+ },
-+ "terser": {
-+ "version": "4.6.12",
-+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz",
-+ "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==",
-+ "dev": true,
-+ "requires": {
-+ "commander": "^2.20.0",
-+ "source-map": "~0.6.1",
-+ "source-map-support": "~0.5.12"
-+ }
-+ }
-+ }
-+ },
-+ "htmlparser2": {
-+ "version": "3.10.1",
-+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
-+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
-+ "dev": true,
-+ "requires": {
-+ "domelementtype": "^1.3.1",
-+ "domhandler": "^2.3.0",
-+ "domutils": "^1.5.1",
-+ "entities": "^1.1.1",
-+ "inherits": "^2.0.1",
-+ "readable-stream": "^3.1.1"
-+ },
-+ "dependencies": {
-+ "entities": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
-+ "dev": true
-+ },
-+ "readable-stream": {
-+ "version": "3.6.0",
-+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "^2.0.3",
-+ "string_decoder": "^1.1.1",
-+ "util-deprecate": "^1.0.1"
-+ }
-+ }
-+ }
-+ },
-+ "http-errors": {
-+ "version": "1.7.3",
-+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
-+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
-+ "dev": true,
-+ "requires": {
-+ "depd": "~1.1.2",
-+ "inherits": "2.0.4",
-+ "setprototypeof": "1.1.1",
-+ "statuses": ">= 1.5.0 < 2",
-+ "toidentifier": "1.0.0"
-+ }
-+ },
-+ "http-signature": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-+ "requires": {
-+ "assert-plus": "^1.0.0",
-+ "jsprim": "^1.2.2",
-+ "sshpk": "^1.7.0"
-+ }
-+ },
-+ "https-browserify": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-+ "dev": true
-+ },
-+ "iconv-lite": {
-+ "version": "0.4.24",
-+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-+ "dev": true,
-+ "requires": {
-+ "safer-buffer": ">= 2.1.2 < 3"
-+ }
-+ },
-+ "icss-replace-symbols": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
-+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
-+ "dev": true
-+ },
-+ "ieee754": {
-+ "version": "1.1.13",
-+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
-+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
-+ "dev": true
-+ },
-+ "import-fresh": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
-+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-+ "dev": true,
-+ "requires": {
-+ "caller-path": "^2.0.0",
-+ "resolve-from": "^3.0.0"
-+ }
-+ },
-+ "indexes-of": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
-+ "dev": true
-+ },
-+ "inflight": {
-+ "version": "1.0.6",
-+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-+ "dev": true,
-+ "requires": {
-+ "once": "^1.3.0",
-+ "wrappy": "1"
-+ }
-+ },
-+ "inherits": {
-+ "version": "2.0.4",
-+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-+ "dev": true
-+ },
-+ "ini": {
-+ "version": "1.3.5",
-+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
-+ "dev": true
-+ },
-+ "invariant": {
-+ "version": "2.2.4",
-+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-+ "dev": true,
-+ "requires": {
-+ "loose-envify": "^1.0.0"
-+ }
-+ },
-+ "is-absolute-url": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
-+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
-+ "dev": true
-+ },
-+ "is-accessor-descriptor": {
-+ "version": "0.1.6",
-+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^3.0.2"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "3.2.2",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "is-arrayish": {
-+ "version": "0.2.1",
-+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-+ "dev": true
-+ },
-+ "is-binary-path": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
-+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-+ "dev": true,
-+ "requires": {
-+ "binary-extensions": "^1.0.0"
-+ }
-+ },
-+ "is-buffer": {
-+ "version": "1.1.6",
-+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-+ "dev": true
-+ },
-+ "is-callable": {
-+ "version": "1.1.5",
-+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
-+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
-+ "dev": true
-+ },
-+ "is-color-stop": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
-+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
-+ "dev": true,
-+ "requires": {
-+ "css-color-names": "^0.0.4",
-+ "hex-color-regex": "^1.1.0",
-+ "hsl-regex": "^1.0.0",
-+ "hsla-regex": "^1.0.0",
-+ "rgb-regex": "^1.0.1",
-+ "rgba-regex": "^1.0.0"
-+ }
-+ },
-+ "is-data-descriptor": {
-+ "version": "0.1.4",
-+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^3.0.2"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "3.2.2",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "is-date-object": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
-+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
-+ "dev": true
-+ },
-+ "is-descriptor": {
-+ "version": "0.1.6",
-+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
-+ "dev": true,
-+ "requires": {
-+ "is-accessor-descriptor": "^0.1.6",
-+ "is-data-descriptor": "^0.1.4",
-+ "kind-of": "^5.0.0"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "5.1.0",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "is-directory": {
-+ "version": "0.3.1",
-+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
-+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
-+ "dev": true
-+ },
-+ "is-extendable": {
-+ "version": "0.1.1",
-+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-+ "dev": true
-+ },
-+ "is-extglob": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-+ "dev": true
-+ },
-+ "is-fullwidth-code-point": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-+ "dev": true
-+ },
-+ "is-glob": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-+ "dev": true,
-+ "requires": {
-+ "is-extglob": "^2.1.1"
-+ }
-+ },
-+ "is-html": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz",
-+ "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=",
-+ "dev": true,
-+ "requires": {
-+ "html-tags": "^1.0.0"
-+ }
-+ },
-+ "is-number": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^3.0.2"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "3.2.2",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "is-obj": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
-+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
-+ "dev": true
-+ },
-+ "is-plain-object": {
-+ "version": "2.0.4",
-+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-+ "dev": true,
-+ "requires": {
-+ "isobject": "^3.0.1"
-+ }
-+ },
-+ "is-regex": {
-+ "version": "1.0.5",
-+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
-+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
-+ "dev": true,
-+ "requires": {
-+ "has": "^1.0.3"
-+ }
-+ },
-+ "is-resolvable": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
-+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
-+ "dev": true
-+ },
-+ "is-svg": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
-+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
-+ "dev": true,
-+ "requires": {
-+ "html-comment-regex": "^1.1.0"
-+ }
-+ },
-+ "is-symbol": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-+ "dev": true,
-+ "requires": {
-+ "has-symbols": "^1.0.1"
-+ }
-+ },
-+ "is-typedarray": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
-+ },
-+ "is-url": {
-+ "version": "1.2.4",
-+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
-+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
-+ "dev": true
-+ },
-+ "is-windows": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-+ "dev": true
-+ },
-+ "is-wsl": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
-+ "dev": true
-+ },
-+ "isarray": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-+ "dev": true
-+ },
-+ "isexe": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-+ "dev": true
-+ },
-+ "isobject": {
-+ "version": "3.0.1",
-+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-+ "dev": true
-+ },
-+ "isstream": {
-+ "version": "0.1.2",
-+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
-+ },
-+ "js-beautify": {
-+ "version": "1.11.0",
-+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz",
-+ "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==",
-+ "dev": true,
-+ "requires": {
-+ "config-chain": "^1.1.12",
-+ "editorconfig": "^0.15.3",
-+ "glob": "^7.1.3",
-+ "mkdirp": "~1.0.3",
-+ "nopt": "^4.0.3"
-+ },
-+ "dependencies": {
-+ "mkdirp": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "js-levenshtein": {
-+ "version": "1.1.6",
-+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
-+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
-+ "dev": true
-+ },
-+ "js-tokens": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-+ "dev": true
-+ },
-+ "js-yaml": {
-+ "version": "3.13.1",
-+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
-+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
-+ "dev": true,
-+ "requires": {
-+ "argparse": "^1.0.7",
-+ "esprima": "^4.0.0"
-+ }
-+ },
-+ "jsbn": {
-+ "version": "0.1.1",
-+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
-+ },
-+ "jsdom": {
-+ "version": "14.1.0",
-+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz",
-+ "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==",
-+ "dev": true,
-+ "requires": {
-+ "abab": "^2.0.0",
-+ "acorn": "^6.0.4",
-+ "acorn-globals": "^4.3.0",
-+ "array-equal": "^1.0.0",
-+ "cssom": "^0.3.4",
-+ "cssstyle": "^1.1.1",
-+ "data-urls": "^1.1.0",
-+ "domexception": "^1.0.1",
-+ "escodegen": "^1.11.0",
-+ "html-encoding-sniffer": "^1.0.2",
-+ "nwsapi": "^2.1.3",
-+ "parse5": "5.1.0",
-+ "pn": "^1.1.0",
-+ "request": "^2.88.0",
-+ "request-promise-native": "^1.0.5",
-+ "saxes": "^3.1.9",
-+ "symbol-tree": "^3.2.2",
-+ "tough-cookie": "^2.5.0",
-+ "w3c-hr-time": "^1.0.1",
-+ "w3c-xmlserializer": "^1.1.2",
-+ "webidl-conversions": "^4.0.2",
-+ "whatwg-encoding": "^1.0.5",
-+ "whatwg-mimetype": "^2.3.0",
-+ "whatwg-url": "^7.0.0",
-+ "ws": "^6.1.2",
-+ "xml-name-validator": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "acorn": {
-+ "version": "6.4.1",
-+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
-+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
-+ "dev": true
-+ },
-+ "escodegen": {
-+ "version": "1.14.1",
-+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
-+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
-+ "dev": true,
-+ "requires": {
-+ "esprima": "^4.0.1",
-+ "estraverse": "^4.2.0",
-+ "esutils": "^2.0.2",
-+ "optionator": "^0.8.1",
-+ "source-map": "~0.6.1"
-+ }
-+ },
-+ "ws": {
-+ "version": "6.2.1",
-+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
-+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
-+ "dev": true,
-+ "requires": {
-+ "async-limiter": "~1.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "jsesc": {
-+ "version": "2.5.2",
-+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-+ "dev": true
-+ },
-+ "json-parse-better-errors": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-+ "dev": true
-+ },
-+ "json-schema": {
-+ "version": "0.2.3",
-+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
-+ },
-+ "json-schema-traverse": {
-+ "version": "0.4.1",
-+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-+ },
-+ "json-stringify-safe": {
-+ "version": "5.0.1",
-+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
-+ },
-+ "json5": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-+ "dev": true,
-+ "requires": {
-+ "minimist": "^1.2.0"
-+ }
-+ },
-+ "jsprim": {
-+ "version": "1.4.1",
-+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-+ "requires": {
-+ "assert-plus": "1.0.0",
-+ "extsprintf": "1.3.0",
-+ "json-schema": "0.2.3",
-+ "verror": "1.10.0"
-+ }
-+ },
-+ "kind-of": {
-+ "version": "6.0.3",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-+ "dev": true
-+ },
-+ "levn": {
-+ "version": "0.3.0",
-+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-+ "dev": true,
-+ "requires": {
-+ "prelude-ls": "~1.1.2",
-+ "type-check": "~0.3.2"
-+ }
-+ },
-+ "locate-path": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-+ "dev": true,
-+ "requires": {
-+ "p-locate": "^2.0.0",
-+ "path-exists": "^3.0.0"
-+ }
-+ },
-+ "lodash": {
-+ "version": "4.17.15",
-+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
-+ "dev": true
-+ },
-+ "lodash.clone": {
-+ "version": "4.5.0",
-+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
-+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
-+ "dev": true
-+ },
-+ "lodash.memoize": {
-+ "version": "4.1.2",
-+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
-+ "dev": true
-+ },
-+ "lodash.sortby": {
-+ "version": "4.7.0",
-+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
-+ "dev": true
-+ },
-+ "lodash.uniq": {
-+ "version": "4.5.0",
-+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
-+ "dev": true
-+ },
-+ "log-symbols": {
-+ "version": "2.2.0",
-+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
-+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.0.1"
-+ }
-+ },
-+ "loose-envify": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-+ "dev": true,
-+ "requires": {
-+ "js-tokens": "^3.0.0 || ^4.0.0"
-+ }
-+ },
-+ "lru-cache": {
-+ "version": "4.1.5",
-+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-+ "dev": true,
-+ "requires": {
-+ "pseudomap": "^1.0.2",
-+ "yallist": "^2.1.2"
-+ }
-+ },
-+ "magic-string": {
-+ "version": "0.22.5",
-+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
-+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
-+ "dev": true,
-+ "requires": {
-+ "vlq": "^0.2.2"
-+ }
-+ },
-+ "map-cache": {
-+ "version": "0.2.2",
-+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
-+ "dev": true
-+ },
-+ "map-visit": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-+ "dev": true,
-+ "requires": {
-+ "object-visit": "^1.0.0"
-+ }
-+ },
-+ "md5.js": {
-+ "version": "1.3.5",
-+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
-+ "dev": true,
-+ "requires": {
-+ "hash-base": "^3.0.0",
-+ "inherits": "^2.0.1",
-+ "safe-buffer": "^5.1.2"
-+ }
-+ },
-+ "mdn-data": {
-+ "version": "2.0.4",
-+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
-+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
-+ "dev": true
-+ },
-+ "merge-source-map": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
-+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
-+ "dev": true,
-+ "requires": {
-+ "source-map": "^0.5.6"
-+ },
-+ "dependencies": {
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "merge2": {
-+ "version": "1.3.0",
-+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
-+ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
-+ "dev": true
-+ },
-+ "micromatch": {
-+ "version": "3.1.10",
-+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-+ "dev": true,
-+ "requires": {
-+ "arr-diff": "^4.0.0",
-+ "array-unique": "^0.3.2",
-+ "braces": "^2.3.1",
-+ "define-property": "^2.0.2",
-+ "extend-shallow": "^3.0.2",
-+ "extglob": "^2.0.4",
-+ "fragment-cache": "^0.2.1",
-+ "kind-of": "^6.0.2",
-+ "nanomatch": "^1.2.9",
-+ "object.pick": "^1.3.0",
-+ "regex-not": "^1.0.0",
-+ "snapdragon": "^0.8.1",
-+ "to-regex": "^3.0.2"
-+ }
-+ },
-+ "miller-rabin": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.0.0",
-+ "brorand": "^1.0.1"
-+ }
-+ },
-+ "mime": {
-+ "version": "1.6.0",
-+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-+ "dev": true
-+ },
-+ "mime-db": {
-+ "version": "1.44.0",
-+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-+ },
-+ "mime-types": {
-+ "version": "2.1.27",
-+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-+ "requires": {
-+ "mime-db": "1.44.0"
-+ }
-+ },
-+ "mimic-fn": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
-+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
-+ "dev": true
-+ },
-+ "minimalistic-assert": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-+ "dev": true
-+ },
-+ "minimalistic-crypto-utils": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
-+ "dev": true
-+ },
-+ "minimatch": {
-+ "version": "3.0.4",
-+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-+ "dev": true,
-+ "requires": {
-+ "brace-expansion": "^1.1.7"
-+ }
-+ },
-+ "minimist": {
-+ "version": "1.2.5",
-+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
-+ "dev": true
-+ },
-+ "mixin-deep": {
-+ "version": "1.3.2",
-+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
-+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
-+ "dev": true,
-+ "requires": {
-+ "for-in": "^1.0.2",
-+ "is-extendable": "^1.0.1"
-+ },
-+ "dependencies": {
-+ "is-extendable": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-+ "dev": true,
-+ "requires": {
-+ "is-plain-object": "^2.0.4"
-+ }
-+ }
-+ }
-+ },
-+ "mkdirp": {
-+ "version": "0.5.5",
-+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-+ "dev": true,
-+ "requires": {
-+ "minimist": "^1.2.5"
-+ }
-+ },
-+ "ms": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-+ "dev": true
-+ },
-+ "nan": {
-+ "version": "2.14.1",
-+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
-+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
-+ "dev": true,
-+ "optional": true
-+ },
-+ "nanomatch": {
-+ "version": "1.2.13",
-+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
-+ "dev": true,
-+ "requires": {
-+ "arr-diff": "^4.0.0",
-+ "array-unique": "^0.3.2",
-+ "define-property": "^2.0.2",
-+ "extend-shallow": "^3.0.2",
-+ "fragment-cache": "^0.2.1",
-+ "is-windows": "^1.0.2",
-+ "kind-of": "^6.0.2",
-+ "object.pick": "^1.3.0",
-+ "regex-not": "^1.0.0",
-+ "snapdragon": "^0.8.1",
-+ "to-regex": "^3.0.1"
-+ }
-+ },
-+ "nice-try": {
-+ "version": "1.0.5",
-+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-+ "dev": true
-+ },
-+ "node-addon-api": {
-+ "version": "1.7.1",
-+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz",
-+ "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==",
-+ "dev": true
-+ },
-+ "node-elm-compiler": {
-+ "version": "5.0.4",
-+ "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz",
-+ "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==",
-+ "dev": true,
-+ "requires": {
-+ "cross-spawn": "6.0.5",
-+ "find-elm-dependencies": "2.0.2",
-+ "lodash": "4.17.15",
-+ "temp": "^0.9.0"
-+ }
-+ },
-+ "node-forge": {
-+ "version": "0.7.6",
-+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
-+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
-+ "dev": true
-+ },
-+ "node-libs-browser": {
-+ "version": "2.2.1",
-+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
-+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
-+ "dev": true,
-+ "requires": {
-+ "assert": "^1.1.1",
-+ "browserify-zlib": "^0.2.0",
-+ "buffer": "^4.3.0",
-+ "console-browserify": "^1.1.0",
-+ "constants-browserify": "^1.0.0",
-+ "crypto-browserify": "^3.11.0",
-+ "domain-browser": "^1.1.1",
-+ "events": "^3.0.0",
-+ "https-browserify": "^1.0.0",
-+ "os-browserify": "^0.3.0",
-+ "path-browserify": "0.0.1",
-+ "process": "^0.11.10",
-+ "punycode": "^1.2.4",
-+ "querystring-es3": "^0.2.0",
-+ "readable-stream": "^2.3.3",
-+ "stream-browserify": "^2.0.1",
-+ "stream-http": "^2.7.2",
-+ "string_decoder": "^1.0.0",
-+ "timers-browserify": "^2.0.4",
-+ "tty-browserify": "0.0.0",
-+ "url": "^0.11.0",
-+ "util": "^0.11.0",
-+ "vm-browserify": "^1.0.1"
-+ },
-+ "dependencies": {
-+ "punycode": {
-+ "version": "1.4.1",
-+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "node-releases": {
-+ "version": "1.1.53",
-+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
-+ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
-+ "dev": true
-+ },
-+ "nopt": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
-+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
-+ "dev": true,
-+ "requires": {
-+ "abbrev": "1",
-+ "osenv": "^0.1.4"
-+ }
-+ },
-+ "normalize-html-whitespace": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz",
-+ "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==",
-+ "dev": true
-+ },
-+ "normalize-path": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-+ "dev": true
-+ },
-+ "normalize-url": {
-+ "version": "3.3.0",
-+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
-+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
-+ "dev": true
-+ },
-+ "nth-check": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
-+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
-+ "dev": true,
-+ "requires": {
-+ "boolbase": "~1.0.0"
-+ }
-+ },
-+ "nwsapi": {
-+ "version": "2.2.0",
-+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
-+ "dev": true
-+ },
-+ "oauth-sign": {
-+ "version": "0.9.0",
-+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
-+ },
-+ "object-assign": {
-+ "version": "4.1.1",
-+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-+ "dev": true
-+ },
-+ "object-copy": {
-+ "version": "0.1.0",
-+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-+ "dev": true,
-+ "requires": {
-+ "copy-descriptor": "^0.1.0",
-+ "define-property": "^0.2.5",
-+ "kind-of": "^3.0.3"
-+ },
-+ "dependencies": {
-+ "define-property": {
-+ "version": "0.2.5",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^0.1.0"
-+ }
-+ },
-+ "kind-of": {
-+ "version": "3.2.2",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "object-inspect": {
-+ "version": "1.7.0",
-+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
-+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
-+ "dev": true
-+ },
-+ "object-keys": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-+ "dev": true
-+ },
-+ "object-visit": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-+ "dev": true,
-+ "requires": {
-+ "isobject": "^3.0.0"
-+ }
-+ },
-+ "object.assign": {
-+ "version": "4.1.0",
-+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.2",
-+ "function-bind": "^1.1.1",
-+ "has-symbols": "^1.0.0",
-+ "object-keys": "^1.0.11"
-+ }
-+ },
-+ "object.getownpropertydescriptors": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
-+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.0-next.1"
-+ }
-+ },
-+ "object.pick": {
-+ "version": "1.3.0",
-+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-+ "dev": true,
-+ "requires": {
-+ "isobject": "^3.0.1"
-+ }
-+ },
-+ "object.values": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
-+ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.0-next.1",
-+ "function-bind": "^1.1.1",
-+ "has": "^1.0.3"
-+ }
-+ },
-+ "on-finished": {
-+ "version": "2.3.0",
-+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-+ "dev": true,
-+ "requires": {
-+ "ee-first": "1.1.1"
-+ }
-+ },
-+ "once": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-+ "dev": true,
-+ "requires": {
-+ "wrappy": "1"
-+ }
-+ },
-+ "onetime": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
-+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
-+ "dev": true,
-+ "requires": {
-+ "mimic-fn": "^1.0.0"
-+ }
-+ },
-+ "opn": {
-+ "version": "5.5.0",
-+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
-+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
-+ "dev": true,
-+ "requires": {
-+ "is-wsl": "^1.1.0"
-+ }
-+ },
-+ "optionator": {
-+ "version": "0.8.3",
-+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
-+ "dev": true,
-+ "requires": {
-+ "deep-is": "~0.1.3",
-+ "fast-levenshtein": "~2.0.6",
-+ "levn": "~0.3.0",
-+ "prelude-ls": "~1.1.2",
-+ "type-check": "~0.3.2",
-+ "word-wrap": "~1.2.3"
-+ }
-+ },
-+ "ora": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
-+ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.3.1",
-+ "cli-cursor": "^2.1.0",
-+ "cli-spinners": "^1.1.0",
-+ "log-symbols": "^2.2.0",
-+ "strip-ansi": "^4.0.0",
-+ "wcwidth": "^1.0.1"
-+ }
-+ },
-+ "os-browserify": {
-+ "version": "0.3.0",
-+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
-+ "dev": true
-+ },
-+ "os-homedir": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-+ "dev": true
-+ },
-+ "os-tmpdir": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-+ "dev": true
-+ },
-+ "osenv": {
-+ "version": "0.1.5",
-+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-+ "dev": true,
-+ "requires": {
-+ "os-homedir": "^1.0.0",
-+ "os-tmpdir": "^1.0.0"
-+ }
-+ },
-+ "p-limit": {
-+ "version": "1.3.0",
-+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-+ "dev": true,
-+ "requires": {
-+ "p-try": "^1.0.0"
-+ }
-+ },
-+ "p-locate": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-+ "dev": true,
-+ "requires": {
-+ "p-limit": "^1.1.0"
-+ }
-+ },
-+ "p-try": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-+ "dev": true
-+ },
-+ "pako": {
-+ "version": "0.2.9",
-+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
-+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
-+ "dev": true
-+ },
-+ "parcel-bundler": {
-+ "version": "1.12.3",
-+ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz",
-+ "integrity": "sha512-8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/code-frame": "^7.0.0 <7.4.0",
-+ "@babel/core": "^7.0.0 <7.4.0",
-+ "@babel/generator": "^7.0.0 <7.4.0",
-+ "@babel/parser": "^7.0.0 <7.4.0",
-+ "@babel/plugin-transform-flow-strip-types": "^7.0.0 <7.4.0",
-+ "@babel/plugin-transform-modules-commonjs": "^7.0.0 <7.4.0",
-+ "@babel/plugin-transform-react-jsx": "^7.0.0 <7.4.0",
-+ "@babel/preset-env": "^7.0.0 <7.4.0",
-+ "@babel/runtime": "^7.0.0 <7.4.0",
-+ "@babel/template": "^7.0.0 <7.4.0",
-+ "@babel/traverse": "^7.0.0 <7.4.0",
-+ "@babel/types": "^7.0.0 <7.4.0",
-+ "@iarna/toml": "^2.2.0",
-+ "@parcel/fs": "^1.11.0",
-+ "@parcel/logger": "^1.11.0",
-+ "@parcel/utils": "^1.11.0",
-+ "@parcel/watcher": "^1.12.0",
-+ "@parcel/workers": "^1.11.0",
-+ "ansi-to-html": "^0.6.4",
-+ "babylon-walk": "^1.0.2",
-+ "browserslist": "^4.1.0",
-+ "chalk": "^2.1.0",
-+ "clone": "^2.1.1",
-+ "command-exists": "^1.2.6",
-+ "commander": "^2.11.0",
-+ "cross-spawn": "^6.0.4",
-+ "css-modules-loader-core": "^1.1.0",
-+ "cssnano": "^4.0.0",
-+ "deasync": "^0.1.14",
-+ "dotenv": "^5.0.0",
-+ "dotenv-expand": "^4.2.0",
-+ "fast-glob": "^2.2.2",
-+ "filesize": "^3.6.0",
-+ "get-port": "^3.2.0",
-+ "htmlnano": "^0.2.2",
-+ "is-glob": "^4.0.0",
-+ "is-url": "^1.2.2",
-+ "js-yaml": "^3.10.0",
-+ "json5": "^1.0.1",
-+ "micromatch": "^3.0.4",
-+ "mkdirp": "^0.5.1",
-+ "node-forge": "^0.7.1",
-+ "node-libs-browser": "^2.0.0",
-+ "opn": "^5.1.0",
-+ "postcss": "^7.0.11",
-+ "postcss-value-parser": "^3.3.1",
-+ "posthtml": "^0.11.2",
-+ "posthtml-parser": "^0.4.0",
-+ "posthtml-render": "^1.1.3",
-+ "resolve": "^1.4.0",
-+ "semver": "^5.4.1",
-+ "serialize-to-js": "^1.1.1",
-+ "serve-static": "^1.12.4",
-+ "source-map": "0.6.1",
-+ "terser": "^3.7.3",
-+ "v8-compile-cache": "^2.0.0",
-+ "ws": "^5.1.1"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "parse-asn1": {
-+ "version": "5.1.5",
-+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
-+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
-+ "dev": true,
-+ "requires": {
-+ "asn1.js": "^4.0.0",
-+ "browserify-aes": "^1.0.0",
-+ "create-hash": "^1.1.0",
-+ "evp_bytestokey": "^1.0.0",
-+ "pbkdf2": "^3.0.3",
-+ "safe-buffer": "^5.1.1"
-+ }
-+ },
-+ "parse-json": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-+ "dev": true,
-+ "requires": {
-+ "error-ex": "^1.3.1",
-+ "json-parse-better-errors": "^1.0.1"
-+ }
-+ },
-+ "parse5": {
-+ "version": "5.1.0",
-+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
-+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
-+ "dev": true
-+ },
-+ "parseurl": {
-+ "version": "1.3.3",
-+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-+ "dev": true
-+ },
-+ "pascalcase": {
-+ "version": "0.1.1",
-+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
-+ "dev": true
-+ },
-+ "path-browserify": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
-+ "dev": true
-+ },
-+ "path-dirname": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-+ "dev": true
-+ },
-+ "path-exists": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-+ "dev": true
-+ },
-+ "path-is-absolute": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-+ "dev": true
-+ },
-+ "path-key": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-+ "dev": true
-+ },
-+ "path-parse": {
-+ "version": "1.0.6",
-+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-+ "dev": true
-+ },
-+ "pbkdf2": {
-+ "version": "3.0.17",
-+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
-+ "dev": true,
-+ "requires": {
-+ "create-hash": "^1.1.2",
-+ "create-hmac": "^1.1.4",
-+ "ripemd160": "^2.0.1",
-+ "safe-buffer": "^5.0.1",
-+ "sha.js": "^2.4.8"
-+ }
-+ },
-+ "performance-now": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-+ },
-+ "physical-cpu-count": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz",
-+ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=",
-+ "dev": true
-+ },
-+ "pkg-up": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
-+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
-+ "dev": true,
-+ "requires": {
-+ "find-up": "^2.1.0"
-+ }
-+ },
-+ "pn": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
-+ "dev": true
-+ },
-+ "posix-character-classes": {
-+ "version": "0.1.1",
-+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
-+ "dev": true
-+ },
-+ "postcss": {
-+ "version": "7.0.27",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
-+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.4.2",
-+ "source-map": "^0.6.1",
-+ "supports-color": "^6.1.0"
-+ }
-+ },
-+ "postcss-calc": {
-+ "version": "7.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz",
-+ "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.27",
-+ "postcss-selector-parser": "^6.0.2",
-+ "postcss-value-parser": "^4.0.2"
-+ }
-+ },
-+ "postcss-colormin": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
-+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
-+ "dev": true,
-+ "requires": {
-+ "browserslist": "^4.0.0",
-+ "color": "^3.0.0",
-+ "has": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-convert-values": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
-+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-discard-comments": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
-+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "postcss-discard-duplicates": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
-+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "postcss-discard-empty": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
-+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "postcss-discard-overridden": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
-+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "postcss-merge-longhand": {
-+ "version": "4.0.11",
-+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
-+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
-+ "dev": true,
-+ "requires": {
-+ "css-color-names": "0.0.4",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0",
-+ "stylehacks": "^4.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-merge-rules": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
-+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
-+ "dev": true,
-+ "requires": {
-+ "browserslist": "^4.0.0",
-+ "caniuse-api": "^3.0.0",
-+ "cssnano-util-same-parent": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-selector-parser": "^3.0.0",
-+ "vendors": "^1.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-selector-parser": {
-+ "version": "3.1.2",
-+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-+ "dev": true,
-+ "requires": {
-+ "dot-prop": "^5.2.0",
-+ "indexes-of": "^1.0.1",
-+ "uniq": "^1.0.1"
-+ }
-+ }
-+ }
-+ },
-+ "postcss-minify-font-values": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
-+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-minify-gradients": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
-+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-arguments": "^4.0.0",
-+ "is-color-stop": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-minify-params": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
-+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
-+ "dev": true,
-+ "requires": {
-+ "alphanum-sort": "^1.0.0",
-+ "browserslist": "^4.0.0",
-+ "cssnano-util-get-arguments": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0",
-+ "uniqs": "^2.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-minify-selectors": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
-+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
-+ "dev": true,
-+ "requires": {
-+ "alphanum-sort": "^1.0.0",
-+ "has": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-selector-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-selector-parser": {
-+ "version": "3.1.2",
-+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-+ "dev": true,
-+ "requires": {
-+ "dot-prop": "^5.2.0",
-+ "indexes-of": "^1.0.1",
-+ "uniq": "^1.0.1"
-+ }
-+ }
-+ }
-+ },
-+ "postcss-modules-extract-imports": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
-+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^6.0.1"
-+ },
-+ "dependencies": {
-+ "postcss": {
-+ "version": "6.0.23",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
-+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.4.1",
-+ "source-map": "^0.6.1",
-+ "supports-color": "^5.4.0"
-+ }
-+ },
-+ "supports-color": {
-+ "version": "5.5.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^3.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "postcss-modules-local-by-default": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
-+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
-+ "dev": true,
-+ "requires": {
-+ "css-selector-tokenizer": "^0.7.0",
-+ "postcss": "^6.0.1"
-+ },
-+ "dependencies": {
-+ "postcss": {
-+ "version": "6.0.23",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
-+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.4.1",
-+ "source-map": "^0.6.1",
-+ "supports-color": "^5.4.0"
-+ }
-+ },
-+ "supports-color": {
-+ "version": "5.5.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^3.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "postcss-modules-scope": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
-+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
-+ "dev": true,
-+ "requires": {
-+ "css-selector-tokenizer": "^0.7.0",
-+ "postcss": "^6.0.1"
-+ },
-+ "dependencies": {
-+ "postcss": {
-+ "version": "6.0.23",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
-+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.4.1",
-+ "source-map": "^0.6.1",
-+ "supports-color": "^5.4.0"
-+ }
-+ },
-+ "supports-color": {
-+ "version": "5.5.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^3.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "postcss-modules-values": {
-+ "version": "1.3.0",
-+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
-+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
-+ "dev": true,
-+ "requires": {
-+ "icss-replace-symbols": "^1.1.0",
-+ "postcss": "^6.0.1"
-+ },
-+ "dependencies": {
-+ "postcss": {
-+ "version": "6.0.23",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
-+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.4.1",
-+ "source-map": "^0.6.1",
-+ "supports-color": "^5.4.0"
-+ }
-+ },
-+ "supports-color": {
-+ "version": "5.5.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^3.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "postcss-normalize-charset": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
-+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "postcss-normalize-display-values": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
-+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-match": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-positions": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
-+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-arguments": "^4.0.0",
-+ "has": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-repeat-style": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
-+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-arguments": "^4.0.0",
-+ "cssnano-util-get-match": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-string": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
-+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
-+ "dev": true,
-+ "requires": {
-+ "has": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-timing-functions": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
-+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-match": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-unicode": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
-+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
-+ "dev": true,
-+ "requires": {
-+ "browserslist": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-url": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
-+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
-+ "dev": true,
-+ "requires": {
-+ "is-absolute-url": "^2.0.0",
-+ "normalize-url": "^3.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-normalize-whitespace": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
-+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
-+ "dev": true,
-+ "requires": {
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-ordered-values": {
-+ "version": "4.1.2",
-+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
-+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-arguments": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-reduce-initial": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
-+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
-+ "dev": true,
-+ "requires": {
-+ "browserslist": "^4.0.0",
-+ "caniuse-api": "^3.0.0",
-+ "has": "^1.0.0",
-+ "postcss": "^7.0.0"
-+ }
-+ },
-+ "postcss-reduce-transforms": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
-+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
-+ "dev": true,
-+ "requires": {
-+ "cssnano-util-get-match": "^4.0.0",
-+ "has": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-selector-parser": {
-+ "version": "6.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
-+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
-+ "dev": true,
-+ "requires": {
-+ "cssesc": "^3.0.0",
-+ "indexes-of": "^1.0.1",
-+ "uniq": "^1.0.1"
-+ }
-+ },
-+ "postcss-svgo": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
-+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
-+ "dev": true,
-+ "requires": {
-+ "is-svg": "^3.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-value-parser": "^3.0.0",
-+ "svgo": "^1.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-value-parser": {
-+ "version": "3.3.1",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "postcss-unique-selectors": {
-+ "version": "4.0.1",
-+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
-+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
-+ "dev": true,
-+ "requires": {
-+ "alphanum-sort": "^1.0.0",
-+ "postcss": "^7.0.0",
-+ "uniqs": "^2.0.0"
-+ }
-+ },
-+ "postcss-value-parser": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
-+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==",
-+ "dev": true
-+ },
-+ "posthtml": {
-+ "version": "0.11.6",
-+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz",
-+ "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==",
-+ "dev": true,
-+ "requires": {
-+ "posthtml-parser": "^0.4.1",
-+ "posthtml-render": "^1.1.5"
-+ }
-+ },
-+ "posthtml-parser": {
-+ "version": "0.4.2",
-+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz",
-+ "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==",
-+ "dev": true,
-+ "requires": {
-+ "htmlparser2": "^3.9.2"
-+ }
-+ },
-+ "posthtml-render": {
-+ "version": "1.2.2",
-+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz",
-+ "integrity": "sha512-MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==",
-+ "dev": true
-+ },
-+ "prelude-ls": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-+ "dev": true
-+ },
-+ "private": {
-+ "version": "0.1.8",
-+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
-+ "dev": true
-+ },
-+ "process": {
-+ "version": "0.11.10",
-+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
-+ "dev": true
-+ },
-+ "process-nextick-args": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-+ "dev": true
-+ },
-+ "proto-list": {
-+ "version": "1.2.4",
-+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
-+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
-+ "dev": true
-+ },
-+ "pseudomap": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-+ "dev": true
-+ },
-+ "psl": {
-+ "version": "1.8.0",
-+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
-+ },
-+ "public-encrypt": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
-+ "dev": true,
-+ "requires": {
-+ "bn.js": "^4.1.0",
-+ "browserify-rsa": "^4.0.0",
-+ "create-hash": "^1.1.0",
-+ "parse-asn1": "^5.0.0",
-+ "randombytes": "^2.0.1",
-+ "safe-buffer": "^5.1.2"
-+ }
-+ },
-+ "punycode": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-+ },
-+ "purgecss": {
-+ "version": "1.4.2",
-+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz",
-+ "integrity": "sha512-hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==",
-+ "dev": true,
-+ "requires": {
-+ "glob": "^7.1.3",
-+ "postcss": "^7.0.14",
-+ "postcss-selector-parser": "^6.0.0",
-+ "yargs": "^14.0.0"
-+ }
-+ },
-+ "q": {
-+ "version": "1.5.1",
-+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
-+ "dev": true
-+ },
-+ "qs": {
-+ "version": "6.5.2",
-+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
-+ },
-+ "querystring": {
-+ "version": "0.2.0",
-+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-+ "dev": true
-+ },
-+ "querystring-es3": {
-+ "version": "0.2.1",
-+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
-+ "dev": true
-+ },
-+ "quote-stream": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
-+ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
-+ "dev": true,
-+ "requires": {
-+ "buffer-equal": "0.0.1",
-+ "minimist": "^1.1.3",
-+ "through2": "^2.0.0"
-+ }
-+ },
-+ "randombytes": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-+ "dev": true,
-+ "requires": {
-+ "safe-buffer": "^5.1.0"
-+ }
-+ },
-+ "randomfill": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
-+ "dev": true,
-+ "requires": {
-+ "randombytes": "^2.0.5",
-+ "safe-buffer": "^5.1.0"
-+ }
-+ },
-+ "range-parser": {
-+ "version": "1.2.1",
-+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-+ "dev": true
-+ },
-+ "readable-stream": {
-+ "version": "2.3.7",
-+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-+ "dev": true,
-+ "requires": {
-+ "core-util-is": "~1.0.0",
-+ "inherits": "~2.0.3",
-+ "isarray": "~1.0.0",
-+ "process-nextick-args": "~2.0.0",
-+ "safe-buffer": "~5.1.1",
-+ "string_decoder": "~1.1.1",
-+ "util-deprecate": "~1.0.1"
-+ }
-+ },
-+ "readdirp": {
-+ "version": "2.2.1",
-+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
-+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-+ "dev": true,
-+ "requires": {
-+ "graceful-fs": "^4.1.11",
-+ "micromatch": "^3.1.10",
-+ "readable-stream": "^2.0.2"
-+ }
-+ },
-+ "regenerate": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
-+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
-+ "dev": true
-+ },
-+ "regenerate-unicode-properties": {
-+ "version": "8.2.0",
-+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
-+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
-+ "dev": true,
-+ "requires": {
-+ "regenerate": "^1.4.0"
-+ }
-+ },
-+ "regenerator-runtime": {
-+ "version": "0.13.5",
-+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
-+ "dev": true
-+ },
-+ "regenerator-transform": {
-+ "version": "0.14.4",
-+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
-+ "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==",
-+ "dev": true,
-+ "requires": {
-+ "@babel/runtime": "^7.8.4",
-+ "private": "^0.1.8"
-+ },
-+ "dependencies": {
-+ "@babel/runtime": {
-+ "version": "7.9.2",
-+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
-+ "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
-+ "dev": true,
-+ "requires": {
-+ "regenerator-runtime": "^0.13.4"
-+ }
-+ }
-+ }
-+ },
-+ "regex-not": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-+ "dev": true,
-+ "requires": {
-+ "extend-shallow": "^3.0.2",
-+ "safe-regex": "^1.1.0"
-+ }
-+ },
-+ "regexpu-core": {
-+ "version": "4.7.0",
-+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
-+ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
-+ "dev": true,
-+ "requires": {
-+ "regenerate": "^1.4.0",
-+ "regenerate-unicode-properties": "^8.2.0",
-+ "regjsgen": "^0.5.1",
-+ "regjsparser": "^0.6.4",
-+ "unicode-match-property-ecmascript": "^1.0.4",
-+ "unicode-match-property-value-ecmascript": "^1.2.0"
-+ }
-+ },
-+ "regjsgen": {
-+ "version": "0.5.1",
-+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
-+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
-+ "dev": true
-+ },
-+ "regjsparser": {
-+ "version": "0.6.4",
-+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
-+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
-+ "dev": true,
-+ "requires": {
-+ "jsesc": "~0.5.0"
-+ },
-+ "dependencies": {
-+ "jsesc": {
-+ "version": "0.5.0",
-+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "remove-trailing-separator": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-+ "dev": true
-+ },
-+ "repeat-element": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
-+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
-+ "dev": true
-+ },
-+ "repeat-string": {
-+ "version": "1.6.1",
-+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-+ "dev": true
-+ },
-+ "request": {
-+ "version": "2.88.2",
-+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-+ "requires": {
-+ "aws-sign2": "~0.7.0",
-+ "aws4": "^1.8.0",
-+ "caseless": "~0.12.0",
-+ "combined-stream": "~1.0.6",
-+ "extend": "~3.0.2",
-+ "forever-agent": "~0.6.1",
-+ "form-data": "~2.3.2",
-+ "har-validator": "~5.1.3",
-+ "http-signature": "~1.2.0",
-+ "is-typedarray": "~1.0.0",
-+ "isstream": "~0.1.2",
-+ "json-stringify-safe": "~5.0.1",
-+ "mime-types": "~2.1.19",
-+ "oauth-sign": "~0.9.0",
-+ "performance-now": "^2.1.0",
-+ "qs": "~6.5.2",
-+ "safe-buffer": "^5.1.2",
-+ "tough-cookie": "~2.5.0",
-+ "tunnel-agent": "^0.6.0",
-+ "uuid": "^3.3.2"
-+ }
-+ },
-+ "request-promise-core": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
-+ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
-+ "dev": true,
-+ "requires": {
-+ "lodash": "^4.17.15"
-+ }
-+ },
-+ "request-promise-native": {
-+ "version": "1.0.8",
-+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
-+ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
-+ "dev": true,
-+ "requires": {
-+ "request-promise-core": "1.1.3",
-+ "stealthy-require": "^1.1.1",
-+ "tough-cookie": "^2.3.3"
-+ }
-+ },
-+ "require-directory": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-+ "dev": true
-+ },
-+ "require-main-filename": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-+ "dev": true
-+ },
-+ "resolve": {
-+ "version": "1.17.0",
-+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
-+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
-+ "dev": true,
-+ "requires": {
-+ "path-parse": "^1.0.6"
-+ }
-+ },
-+ "resolve-from": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-+ "dev": true
-+ },
-+ "resolve-url": {
-+ "version": "0.2.1",
-+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-+ "dev": true
-+ },
-+ "restore-cursor": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
-+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
-+ "dev": true,
-+ "requires": {
-+ "onetime": "^2.0.0",
-+ "signal-exit": "^3.0.2"
-+ }
-+ },
-+ "ret": {
-+ "version": "0.1.15",
-+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
-+ "dev": true
-+ },
-+ "rgb-regex": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
-+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
-+ "dev": true
-+ },
-+ "rgba-regex": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
-+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
-+ "dev": true
-+ },
-+ "rimraf": {
-+ "version": "2.6.3",
-+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-+ "dev": true,
-+ "requires": {
-+ "glob": "^7.1.3"
-+ }
-+ },
-+ "ripemd160": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
-+ "dev": true,
-+ "requires": {
-+ "hash-base": "^3.0.0",
-+ "inherits": "^2.0.1"
-+ }
-+ },
-+ "safe-buffer": {
-+ "version": "5.1.2",
-+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-+ },
-+ "safe-regex": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-+ "dev": true,
-+ "requires": {
-+ "ret": "~0.1.10"
-+ }
-+ },
-+ "safer-buffer": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-+ },
-+ "safer-eval": {
-+ "version": "1.3.6",
-+ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz",
-+ "integrity": "sha512-DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw==",
-+ "dev": true,
-+ "requires": {
-+ "clones": "^1.2.0"
-+ }
-+ },
-+ "sax": {
-+ "version": "1.2.4",
-+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-+ "dev": true
-+ },
-+ "saxes": {
-+ "version": "3.1.11",
-+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
-+ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
-+ "dev": true,
-+ "requires": {
-+ "xmlchars": "^2.1.1"
-+ }
-+ },
-+ "semver": {
-+ "version": "5.7.1",
-+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-+ "dev": true
-+ },
-+ "send": {
-+ "version": "0.17.1",
-+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-+ "dev": true,
-+ "requires": {
-+ "debug": "2.6.9",
-+ "depd": "~1.1.2",
-+ "destroy": "~1.0.4",
-+ "encodeurl": "~1.0.2",
-+ "escape-html": "~1.0.3",
-+ "etag": "~1.8.1",
-+ "fresh": "0.5.2",
-+ "http-errors": "~1.7.2",
-+ "mime": "1.6.0",
-+ "ms": "2.1.1",
-+ "on-finished": "~2.3.0",
-+ "range-parser": "~1.2.1",
-+ "statuses": "~1.5.0"
-+ },
-+ "dependencies": {
-+ "debug": {
-+ "version": "2.6.9",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-+ "dev": true,
-+ "requires": {
-+ "ms": "2.0.0"
-+ },
-+ "dependencies": {
-+ "ms": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "ms": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "serialize-to-js": {
-+ "version": "1.2.2",
-+ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz",
-+ "integrity": "sha512-mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==",
-+ "dev": true,
-+ "requires": {
-+ "js-beautify": "^1.8.9",
-+ "safer-eval": "^1.3.0"
-+ }
-+ },
-+ "serve-static": {
-+ "version": "1.14.1",
-+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-+ "dev": true,
-+ "requires": {
-+ "encodeurl": "~1.0.2",
-+ "escape-html": "~1.0.3",
-+ "parseurl": "~1.3.3",
-+ "send": "0.17.1"
-+ }
-+ },
-+ "set-blocking": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-+ "dev": true
-+ },
-+ "set-value": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
-+ "dev": true,
-+ "requires": {
-+ "extend-shallow": "^2.0.1",
-+ "is-extendable": "^0.1.1",
-+ "is-plain-object": "^2.0.3",
-+ "split-string": "^3.0.1"
-+ },
-+ "dependencies": {
-+ "extend-shallow": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-+ "dev": true,
-+ "requires": {
-+ "is-extendable": "^0.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "setimmediate": {
-+ "version": "1.0.5",
-+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
-+ "dev": true
-+ },
-+ "setprototypeof": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
-+ "dev": true
-+ },
-+ "sha.js": {
-+ "version": "2.4.11",
-+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "^2.0.1",
-+ "safe-buffer": "^5.0.1"
-+ }
-+ },
-+ "shallow-copy": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
-+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
-+ "dev": true
-+ },
-+ "shebang-command": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-+ "dev": true,
-+ "requires": {
-+ "shebang-regex": "^1.0.0"
-+ }
-+ },
-+ "shebang-regex": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-+ "dev": true
-+ },
-+ "sigmund": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
-+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
-+ "dev": true
-+ },
-+ "signal-exit": {
-+ "version": "3.0.3",
-+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
-+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
-+ "dev": true
-+ },
-+ "simple-swizzle": {
-+ "version": "0.2.2",
-+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
-+ "dev": true,
-+ "requires": {
-+ "is-arrayish": "^0.3.1"
-+ },
-+ "dependencies": {
-+ "is-arrayish": {
-+ "version": "0.3.2",
-+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "snapdragon": {
-+ "version": "0.8.2",
-+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-+ "dev": true,
-+ "requires": {
-+ "base": "^0.11.1",
-+ "debug": "^2.2.0",
-+ "define-property": "^0.2.5",
-+ "extend-shallow": "^2.0.1",
-+ "map-cache": "^0.2.2",
-+ "source-map": "^0.5.6",
-+ "source-map-resolve": "^0.5.0",
-+ "use": "^3.1.0"
-+ },
-+ "dependencies": {
-+ "debug": {
-+ "version": "2.6.9",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-+ "dev": true,
-+ "requires": {
-+ "ms": "2.0.0"
-+ }
-+ },
-+ "define-property": {
-+ "version": "0.2.5",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^0.1.0"
-+ }
-+ },
-+ "extend-shallow": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-+ "dev": true,
-+ "requires": {
-+ "is-extendable": "^0.1.0"
-+ }
-+ },
-+ "ms": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-+ "dev": true
-+ },
-+ "source-map": {
-+ "version": "0.5.7",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "snapdragon-node": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-+ "dev": true,
-+ "requires": {
-+ "define-property": "^1.0.0",
-+ "isobject": "^3.0.0",
-+ "snapdragon-util": "^3.0.1"
-+ },
-+ "dependencies": {
-+ "define-property": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^1.0.0"
-+ }
-+ },
-+ "is-accessor-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-data-descriptor": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^6.0.0"
-+ }
-+ },
-+ "is-descriptor": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-+ "dev": true,
-+ "requires": {
-+ "is-accessor-descriptor": "^1.0.0",
-+ "is-data-descriptor": "^1.0.0",
-+ "kind-of": "^6.0.2"
-+ }
-+ }
-+ }
-+ },
-+ "snapdragon-util": {
-+ "version": "3.0.1",
-+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^3.2.0"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "3.2.2",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "source-map": {
-+ "version": "0.6.1",
-+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-+ "dev": true
-+ },
-+ "source-map-resolve": {
-+ "version": "0.5.3",
-+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
-+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
-+ "dev": true,
-+ "requires": {
-+ "atob": "^2.1.2",
-+ "decode-uri-component": "^0.2.0",
-+ "resolve-url": "^0.2.1",
-+ "source-map-url": "^0.4.0",
-+ "urix": "^0.1.0"
-+ }
-+ },
-+ "source-map-support": {
-+ "version": "0.5.19",
-+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-+ "dev": true,
-+ "requires": {
-+ "buffer-from": "^1.0.0",
-+ "source-map": "^0.6.0"
-+ }
-+ },
-+ "source-map-url": {
-+ "version": "0.4.0",
-+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-+ "dev": true
-+ },
-+ "split-string": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-+ "dev": true,
-+ "requires": {
-+ "extend-shallow": "^3.0.0"
-+ }
-+ },
-+ "sprintf-js": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
-+ "dev": true
-+ },
-+ "sshpk": {
-+ "version": "1.16.1",
-+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
-+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
-+ "requires": {
-+ "asn1": "~0.2.3",
-+ "assert-plus": "^1.0.0",
-+ "bcrypt-pbkdf": "^1.0.0",
-+ "dashdash": "^1.12.0",
-+ "ecc-jsbn": "~0.1.1",
-+ "getpass": "^0.1.1",
-+ "jsbn": "~0.1.0",
-+ "safer-buffer": "^2.0.2",
-+ "tweetnacl": "~0.14.0"
-+ }
-+ },
-+ "stable": {
-+ "version": "0.1.8",
-+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
-+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
-+ "dev": true
-+ },
-+ "static-eval": {
-+ "version": "2.0.5",
-+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz",
-+ "integrity": "sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==",
-+ "dev": true,
-+ "requires": {
-+ "escodegen": "^1.11.1"
-+ },
-+ "dependencies": {
-+ "escodegen": {
-+ "version": "1.14.1",
-+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
-+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
-+ "dev": true,
-+ "requires": {
-+ "esprima": "^4.0.1",
-+ "estraverse": "^4.2.0",
-+ "esutils": "^2.0.2",
-+ "optionator": "^0.8.1",
-+ "source-map": "~0.6.1"
-+ }
-+ }
-+ }
-+ },
-+ "static-extend": {
-+ "version": "0.1.2",
-+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-+ "dev": true,
-+ "requires": {
-+ "define-property": "^0.2.5",
-+ "object-copy": "^0.1.0"
-+ },
-+ "dependencies": {
-+ "define-property": {
-+ "version": "0.2.5",
-+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-+ "dev": true,
-+ "requires": {
-+ "is-descriptor": "^0.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "static-module": {
-+ "version": "2.2.5",
-+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
-+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
-+ "dev": true,
-+ "requires": {
-+ "concat-stream": "~1.6.0",
-+ "convert-source-map": "^1.5.1",
-+ "duplexer2": "~0.1.4",
-+ "escodegen": "~1.9.0",
-+ "falafel": "^2.1.0",
-+ "has": "^1.0.1",
-+ "magic-string": "^0.22.4",
-+ "merge-source-map": "1.0.4",
-+ "object-inspect": "~1.4.0",
-+ "quote-stream": "~1.0.2",
-+ "readable-stream": "~2.3.3",
-+ "shallow-copy": "~0.0.1",
-+ "static-eval": "^2.0.0",
-+ "through2": "~2.0.3"
-+ },
-+ "dependencies": {
-+ "object-inspect": {
-+ "version": "1.4.1",
-+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
-+ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "statuses": {
-+ "version": "1.5.0",
-+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
-+ "dev": true
-+ },
-+ "stealthy-require": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
-+ "dev": true
-+ },
-+ "stream-browserify": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
-+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
-+ "dev": true,
-+ "requires": {
-+ "inherits": "~2.0.1",
-+ "readable-stream": "^2.0.2"
-+ }
-+ },
-+ "stream-http": {
-+ "version": "2.8.3",
-+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
-+ "dev": true,
-+ "requires": {
-+ "builtin-status-codes": "^3.0.0",
-+ "inherits": "^2.0.1",
-+ "readable-stream": "^2.3.6",
-+ "to-arraybuffer": "^1.0.0",
-+ "xtend": "^4.0.0"
-+ }
-+ },
-+ "string-width": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-+ "dev": true,
-+ "requires": {
-+ "emoji-regex": "^7.0.1",
-+ "is-fullwidth-code-point": "^2.0.0",
-+ "strip-ansi": "^5.1.0"
-+ },
-+ "dependencies": {
-+ "ansi-regex": {
-+ "version": "4.1.0",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-+ "dev": true
-+ },
-+ "strip-ansi": {
-+ "version": "5.2.0",
-+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-+ "dev": true,
-+ "requires": {
-+ "ansi-regex": "^4.1.0"
-+ }
-+ }
-+ }
-+ },
-+ "string.prototype.trimend": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
-+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.5"
-+ }
-+ },
-+ "string.prototype.trimleft": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
-+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.5",
-+ "string.prototype.trimstart": "^1.0.0"
-+ }
-+ },
-+ "string.prototype.trimright": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
-+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.5",
-+ "string.prototype.trimend": "^1.0.0"
-+ }
-+ },
-+ "string.prototype.trimstart": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
-+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.5"
-+ }
-+ },
-+ "string_decoder": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-+ "dev": true,
-+ "requires": {
-+ "safe-buffer": "~5.1.0"
-+ }
-+ },
-+ "strip-ansi": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-+ "dev": true,
-+ "requires": {
-+ "ansi-regex": "^3.0.0"
-+ }
-+ },
-+ "stylehacks": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
-+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
-+ "dev": true,
-+ "requires": {
-+ "browserslist": "^4.0.0",
-+ "postcss": "^7.0.0",
-+ "postcss-selector-parser": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "postcss-selector-parser": {
-+ "version": "3.1.2",
-+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-+ "dev": true,
-+ "requires": {
-+ "dot-prop": "^5.2.0",
-+ "indexes-of": "^1.0.1",
-+ "uniq": "^1.0.1"
-+ }
-+ }
-+ }
-+ },
-+ "supports-color": {
-+ "version": "6.1.0",
-+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-+ "dev": true,
-+ "requires": {
-+ "has-flag": "^3.0.0"
-+ }
-+ },
-+ "svgo": {
-+ "version": "1.3.2",
-+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
-+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
-+ "dev": true,
-+ "requires": {
-+ "chalk": "^2.4.1",
-+ "coa": "^2.0.2",
-+ "css-select": "^2.0.0",
-+ "css-select-base-adapter": "^0.1.1",
-+ "css-tree": "1.0.0-alpha.37",
-+ "csso": "^4.0.2",
-+ "js-yaml": "^3.13.1",
-+ "mkdirp": "~0.5.1",
-+ "object.values": "^1.1.0",
-+ "sax": "~1.2.4",
-+ "stable": "^0.1.8",
-+ "unquote": "~1.1.1",
-+ "util.promisify": "~1.0.0"
-+ }
-+ },
-+ "symbol-tree": {
-+ "version": "3.2.4",
-+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-+ "dev": true
-+ },
-+ "temp": {
-+ "version": "0.9.0",
-+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz",
-+ "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==",
-+ "dev": true,
-+ "requires": {
-+ "rimraf": "~2.6.2"
-+ }
-+ },
-+ "terser": {
-+ "version": "3.17.0",
-+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
-+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
-+ "dev": true,
-+ "requires": {
-+ "commander": "^2.19.0",
-+ "source-map": "~0.6.1",
-+ "source-map-support": "~0.5.10"
-+ }
-+ },
-+ "through2": {
-+ "version": "2.0.5",
-+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-+ "dev": true,
-+ "requires": {
-+ "readable-stream": "~2.3.6",
-+ "xtend": "~4.0.1"
-+ }
-+ },
-+ "timers-browserify": {
-+ "version": "2.0.11",
-+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
-+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
-+ "dev": true,
-+ "requires": {
-+ "setimmediate": "^1.0.4"
-+ }
-+ },
-+ "timsort": {
-+ "version": "0.3.0",
-+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
-+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
-+ "dev": true
-+ },
-+ "tiny-inflate": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
-+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
-+ "dev": true
-+ },
-+ "to-arraybuffer": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
-+ "dev": true
-+ },
-+ "to-fast-properties": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-+ "dev": true
-+ },
-+ "to-object-path": {
-+ "version": "0.3.0",
-+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-+ "dev": true,
-+ "requires": {
-+ "kind-of": "^3.0.2"
-+ },
-+ "dependencies": {
-+ "kind-of": {
-+ "version": "3.2.2",
-+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-+ "dev": true,
-+ "requires": {
-+ "is-buffer": "^1.1.5"
-+ }
-+ }
-+ }
-+ },
-+ "to-regex": {
-+ "version": "3.0.2",
-+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-+ "dev": true,
-+ "requires": {
-+ "define-property": "^2.0.2",
-+ "extend-shallow": "^3.0.2",
-+ "regex-not": "^1.0.2",
-+ "safe-regex": "^1.1.0"
-+ }
-+ },
-+ "to-regex-range": {
-+ "version": "2.1.1",
-+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-+ "dev": true,
-+ "requires": {
-+ "is-number": "^3.0.0",
-+ "repeat-string": "^1.6.1"
-+ }
-+ },
-+ "toidentifier": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true
- },
-- "brace-expansion": {
-- "version": "1.1.11",
-- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-+ "tough-cookie": {
-+ "version": "2.5.0",
-+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-+ "requires": {
-+ "psl": "^1.1.28",
-+ "punycode": "^2.1.1"
-+ }
-+ },
-+ "tr46": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
- "dev": true,
- "requires": {
-- "balanced-match": "^1.0.0",
-- "concat-map": "0.0.1"
-+ "punycode": "^2.1.0"
- }
- },
-- "concat-map": {
-- "version": "0.0.1",
-- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-+ "trim-right": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
-+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
- "dev": true
- },
-- "cross-spawn": {
-- "version": "6.0.5",
-- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-+ "tty-browserify": {
-+ "version": "0.0.0",
-+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
-+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
-+ "dev": true
-+ },
-+ "tunnel-agent": {
-+ "version": "0.6.0",
-+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-+ "requires": {
-+ "safe-buffer": "^5.0.1"
-+ }
-+ },
-+ "tweetnacl": {
-+ "version": "0.14.5",
-+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
-+ },
-+ "type-check": {
-+ "version": "0.3.2",
-+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
-- "nice-try": "^1.0.4",
-- "path-key": "^2.0.1",
-- "semver": "^5.5.0",
-- "shebang-command": "^1.2.0",
-- "which": "^1.2.9"
-+ "prelude-ls": "~1.1.2"
- }
- },
-- "elm-hot": {
-- "version": "1.1.1",
-- "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz",
-- "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==",
-+ "typedarray": {
-+ "version": "0.0.6",
-+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
-- "find-elm-dependencies": {
-- "version": "2.0.2",
-- "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz",
-- "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==",
-+ "uncss": {
-+ "version": "0.17.3",
-+ "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz",
-+ "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==",
- "dev": true,
- "requires": {
-- "firstline": "1.2.0",
-- "lodash": "4.17.15"
-+ "commander": "^2.20.0",
-+ "glob": "^7.1.4",
-+ "is-absolute-url": "^3.0.1",
-+ "is-html": "^1.1.0",
-+ "jsdom": "^14.1.0",
-+ "lodash": "^4.17.15",
-+ "postcss": "^7.0.17",
-+ "postcss-selector-parser": "6.0.2",
-+ "request": "^2.88.0"
-+ },
-+ "dependencies": {
-+ "is-absolute-url": {
-+ "version": "3.0.3",
-+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
-+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
-+ "dev": true
-+ }
- }
- },
-- "firstline": {
-+ "unicode-canonical-property-names-ecmascript": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
-+ "dev": true
-+ },
-+ "unicode-match-property-ecmascript": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
-+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
-+ "dev": true,
-+ "requires": {
-+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
-+ "unicode-property-aliases-ecmascript": "^1.0.4"
-+ }
-+ },
-+ "unicode-match-property-value-ecmascript": {
- "version": "1.2.0",
-- "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz",
-- "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=",
-+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
-+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
- "dev": true
- },
-- "fs.realpath": {
-- "version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-+ "unicode-property-aliases-ecmascript": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
-+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
- "dev": true
- },
-- "glob": {
-- "version": "7.1.4",
-- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-+ "unicode-trie": {
-+ "version": "0.3.1",
-+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
-+ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
- "dev": true,
- "requires": {
-- "fs.realpath": "^1.0.0",
-- "inflight": "^1.0.4",
-- "inherits": "2",
-- "minimatch": "^3.0.4",
-- "once": "^1.3.0",
-- "path-is-absolute": "^1.0.0"
-+ "pako": "^0.2.5",
-+ "tiny-inflate": "^1.0.0"
- }
- },
-- "inflight": {
-- "version": "1.0.6",
-- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-+ "union-value": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
-- "once": "^1.3.0",
-- "wrappy": "1"
-+ "arr-union": "^3.1.0",
-+ "get-value": "^2.0.6",
-+ "is-extendable": "^0.1.1",
-+ "set-value": "^2.0.1"
- }
- },
-- "inherits": {
-- "version": "2.0.4",
-- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-+ "uniq": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
-- "isexe": {
-+ "uniqs": {
- "version": "2.0.0",
-- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
-+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
- "dev": true
- },
-- "lodash": {
-- "version": "4.17.15",
-- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
-+ "unquote": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
-+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
- "dev": true
- },
-- "minimatch": {
-- "version": "3.0.4",
-- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-+ "unset-value": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
-- "brace-expansion": "^1.1.7"
-+ "has-value": "^0.3.1",
-+ "isobject": "^3.0.0"
-+ },
-+ "dependencies": {
-+ "has-value": {
-+ "version": "0.3.1",
-+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-+ "dev": true,
-+ "requires": {
-+ "get-value": "^2.0.3",
-+ "has-values": "^0.1.4",
-+ "isobject": "^2.0.0"
-+ },
-+ "dependencies": {
-+ "isobject": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-+ "dev": true,
-+ "requires": {
-+ "isarray": "1.0.0"
-+ }
-+ }
-+ }
-+ },
-+ "has-values": {
-+ "version": "0.1.4",
-+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
-+ "dev": true
-+ }
- }
- },
-- "nice-try": {
-- "version": "1.0.5",
-- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-+ "upath": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
-+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true
- },
-- "node-elm-compiler": {
-- "version": "5.0.4",
-- "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz",
-- "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==",
-+ "uri-js": {
-+ "version": "4.2.2",
-+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
-+ "requires": {
-+ "punycode": "^2.1.0"
-+ }
-+ },
-+ "urix": {
-+ "version": "0.1.0",
-+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
-+ "dev": true
-+ },
-+ "url": {
-+ "version": "0.11.0",
-+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
-- "cross-spawn": "6.0.5",
-- "find-elm-dependencies": "2.0.2",
-- "lodash": "4.17.15",
-- "temp": "^0.9.0"
-+ "punycode": "1.3.2",
-+ "querystring": "0.2.0"
-+ },
-+ "dependencies": {
-+ "punycode": {
-+ "version": "1.3.2",
-+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-+ "dev": true
-+ }
- }
- },
-- "once": {
-- "version": "1.4.0",
-- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-+ "use": {
-+ "version": "3.1.1",
-+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
-+ "dev": true
-+ },
-+ "util": {
-+ "version": "0.11.1",
-+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
-+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dev": true,
- "requires": {
-- "wrappy": "1"
-+ "inherits": "2.0.3"
-+ },
-+ "dependencies": {
-+ "inherits": {
-+ "version": "2.0.3",
-+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-+ "dev": true
-+ }
- }
- },
-- "path-is-absolute": {
-+ "util-deprecate": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-+ "dev": true
-+ },
-+ "util.promisify": {
- "version": "1.0.1",
-- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
-+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
-+ "dev": true,
-+ "requires": {
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.17.2",
-+ "has-symbols": "^1.0.1",
-+ "object.getownpropertydescriptors": "^2.1.0"
-+ }
-+ },
-+ "uuid": {
-+ "version": "3.4.0",
-+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
-+ },
-+ "v8-compile-cache": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
-+ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
- "dev": true
- },
-- "path-key": {
-- "version": "2.0.1",
-- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-+ "vendors": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
-+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
- "dev": true
- },
-- "rimraf": {
-- "version": "2.6.3",
-- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-+ "verror": {
-+ "version": "1.10.0",
-+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-+ "requires": {
-+ "assert-plus": "^1.0.0",
-+ "core-util-is": "1.0.2",
-+ "extsprintf": "^1.2.0"
-+ }
-+ },
-+ "vlq": {
-+ "version": "0.2.3",
-+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
-+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
-+ "dev": true
-+ },
-+ "vm-browserify": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
-+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
-+ "dev": true
-+ },
-+ "w3c-hr-time": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
-- "glob": "^7.1.3"
-+ "browser-process-hrtime": "^1.0.0"
- }
- },
-- "semver": {
-- "version": "5.7.1",
-- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-+ "w3c-xmlserializer": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
-+ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
-+ "dev": true,
-+ "requires": {
-+ "domexception": "^1.0.1",
-+ "webidl-conversions": "^4.0.2",
-+ "xml-name-validator": "^3.0.0"
-+ }
-+ },
-+ "wcwidth": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
-+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
-+ "dev": true,
-+ "requires": {
-+ "defaults": "^1.0.3"
-+ }
-+ },
-+ "webidl-conversions": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true
- },
-- "shebang-command": {
-- "version": "1.2.0",
-- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-+ "whatwg-encoding": {
-+ "version": "1.0.5",
-+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
-- "shebang-regex": "^1.0.0"
-+ "iconv-lite": "0.4.24"
- }
- },
-- "shebang-regex": {
-- "version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-+ "whatwg-mimetype": {
-+ "version": "2.3.0",
-+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
-- "temp": {
-- "version": "0.9.0",
-- "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz",
-- "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==",
-+ "whatwg-url": {
-+ "version": "7.1.0",
-+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dev": true,
- "requires": {
-- "rimraf": "~2.6.2"
-+ "lodash.sortby": "^4.7.0",
-+ "tr46": "^1.0.1",
-+ "webidl-conversions": "^4.0.2"
- }
- },
- "which": {
-@@ -205,11 +7972,164 @@
- "isexe": "^2.0.0"
- }
- },
-+ "which-module": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-+ "dev": true
-+ },
-+ "word-wrap": {
-+ "version": "1.2.3",
-+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-+ "dev": true
-+ },
-+ "wrap-ansi": {
-+ "version": "5.1.0",
-+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-+ "dev": true,
-+ "requires": {
-+ "ansi-styles": "^3.2.0",
-+ "string-width": "^3.0.0",
-+ "strip-ansi": "^5.0.0"
-+ },
-+ "dependencies": {
-+ "ansi-regex": {
-+ "version": "4.1.0",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-+ "dev": true
-+ },
-+ "strip-ansi": {
-+ "version": "5.2.0",
-+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-+ "dev": true,
-+ "requires": {
-+ "ansi-regex": "^4.1.0"
-+ }
-+ }
-+ }
-+ },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
-+ },
-+ "ws": {
-+ "version": "5.2.2",
-+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
-+ "dev": true,
-+ "requires": {
-+ "async-limiter": "~1.0.0"
-+ }
-+ },
-+ "xml-name-validator": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-+ "dev": true
-+ },
-+ "xmlchars": {
-+ "version": "2.2.0",
-+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
-+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
-+ "dev": true
-+ },
-+ "xtend": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-+ "dev": true
-+ },
-+ "y18n": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-+ "dev": true
-+ },
-+ "yallist": {
-+ "version": "2.1.2",
-+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-+ "dev": true
-+ },
-+ "yargs": {
-+ "version": "14.2.3",
-+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
-+ "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
-+ "dev": true,
-+ "requires": {
-+ "cliui": "^5.0.0",
-+ "decamelize": "^1.2.0",
-+ "find-up": "^3.0.0",
-+ "get-caller-file": "^2.0.1",
-+ "require-directory": "^2.1.1",
-+ "require-main-filename": "^2.0.0",
-+ "set-blocking": "^2.0.0",
-+ "string-width": "^3.0.0",
-+ "which-module": "^2.0.0",
-+ "y18n": "^4.0.0",
-+ "yargs-parser": "^15.0.1"
-+ },
-+ "dependencies": {
-+ "find-up": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-+ "dev": true,
-+ "requires": {
-+ "locate-path": "^3.0.0"
-+ }
-+ },
-+ "locate-path": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-+ "dev": true,
-+ "requires": {
-+ "p-locate": "^3.0.0",
-+ "path-exists": "^3.0.0"
-+ }
-+ },
-+ "p-limit": {
-+ "version": "2.3.0",
-+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-+ "dev": true,
-+ "requires": {
-+ "p-try": "^2.0.0"
-+ }
-+ },
-+ "p-locate": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-+ "dev": true,
-+ "requires": {
-+ "p-limit": "^2.0.0"
-+ }
-+ },
-+ "p-try": {
-+ "version": "2.2.0",
-+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-+ "dev": true
-+ }
-+ }
-+ },
-+ "yargs-parser": {
-+ "version": "15.0.1",
-+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
-+ "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
-+ "dev": true,
-+ "requires": {
-+ "camelcase": "^5.0.0",
-+ "decamelize": "^1.2.0"
-+ }
- }
- }
- }
-diff --git a/src/Api.elm b/src/Api.elm
-index 82e5f6c..bd8c516 100644
---- a/src/Api.elm
-+++ b/src/Api.elm
-@@ -36,7 +36,7 @@ init url =
- { url | host = "api.codenamesgreen.com", path = "", query = Nothing, fragment = Nothing }
-
- _ ->
-- { url | host = "api." ++ url.host, path = "", query = Nothing, fragment = Nothing }
-+ { url | host = url.host, path = "/api", query = Nothing, fragment = Nothing }
- in
- { baseUrl = baseUrl }
-
-@@ -80,7 +80,7 @@ type alias Index =
-
- endpointUrl : Url.Url -> String -> String
- endpointUrl baseUrl path =
-- { baseUrl | path = path }
-+ { baseUrl | path = baseUrl.path ++ path }
- |> Url.toString
-
-
diff --git a/modules/private/websites/tools/games/codenames/default.nix b/modules/private/websites/tools/games/codenames/default.nix
deleted file mode 100644
index 25eb62d..0000000
--- a/modules/private/websites/tools/games/codenames/default.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ config, lib, pkgs, ... }:
-let
- greenapid = pkgs.callPackage ./greenapid.nix {};
- frontend = pkgs.callPackage ./frontend.nix { nodeEnv = pkgs.callPackage pkgs.mylibs.nodeEnv {}; };
- wordlists = pkgs.runCommand "wordlists" {} ''
- mkdir -p $out
- cp -r ${./wordlists} $out/wordlists
- '';
- cfg = config.myServices.websites.games.codenames;
-in
-{
- options.myServices.websites.games.codenames.enable = lib.mkEnableOption "Enable Codenames game";
- config = lib.mkIf cfg.enable {
- systemd.services.codenames_api = {
- description = "Api for codenames game";
- wantedBy = [ "multi-user.target" ];
- script = "${greenapid}/bin/greenapid";
- postStart = ''
- sleep 5;
- chown :wwwrun /run/codenamesgreen/socket.sock
- chmod g+w /run/codenamesgreen/socket.sock
- '';
- serviceConfig = {
- User = "codenames";
- DynamicUser = true;
- SupplementaryGroups = [ "wwwrun" ];
- Type = "simple";
- RuntimeDirectory = "codenamesgreen";
- WorkingDirectory = builtins.toString wordlists;
- };
- };
-
- services.websites.env.tools.vhostConfs.games_codenames = {
- certName = "games";
- certMainHost = "games.immae.eu";
- hosts = [ "codenames.games.immae.eu" ];
- root = frontend;
- extraConfig = [
- ''
- ProxyPass /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/
- ProxyPassReverse /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/
-
-
- FallbackResource index.html
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/games/codenames/deps.nix b/modules/private/websites/tools/games/codenames/deps.nix
deleted file mode 100644
index fddec2e..0000000
--- a/modules/private/websites/tools/games/codenames/deps.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-[
- {
- goPackagePath = "github.com/jbowens/dictionary";
- fetch = {
- type = "git";
- url = "https://github.com/jbowens/dictionary";
- rev = "229cf68df1a675e7a2462c4028d7df4abfd98854";
- sha256 = "0gyg3xcx4xqx6w8id2dq5s280mdfhs6yc9flg2jbj8jff040s28w";
- };
- }
-]
diff --git a/modules/private/websites/tools/games/codenames/elm-srcs.nix b/modules/private/websites/tools/games/codenames/elm-srcs.nix
deleted file mode 100644
index 031e7ff..0000000
--- a/modules/private/websites/tools/games/codenames/elm-srcs.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-
- "elm/json" = {
- sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh";
- version = "1.1.3";
- };
-
- "perzanko/elm-loading" = {
- sha256 = "0fs7ly4jib4gwhh157g91hgjryqja096i6jhbsq7qb4k4r3c5l80";
- version = "2.0.4";
- };
-
- "elm/html" = {
- sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
- version = "1.0.0";
- };
-
- "elm/browser" = {
- sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka";
- version = "1.0.1";
- };
-
- "elm/core" = {
- sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as";
- version = "1.0.2";
- };
-
- "elm/url" = {
- sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
- version = "1.0.0";
- };
-
- "elm/http" = {
- sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1";
- version = "2.0.0";
- };
-
- "elm/bytes" = {
- sha256 = "02ywbf52akvxclpxwj9n04jydajcbsbcbsnjs53yjc5lwck3abwj";
- version = "1.0.8";
- };
-
- "elm/file" = {
- sha256 = "1rljcb41dl97myidyjih2yliyzddkr2m7n74x7gg46rcw4jl0ny8";
- version = "1.0.5";
- };
-
- "rtfeldman/elm-hex" = {
- sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d";
- version = "1.0.0";
- };
-
- "rtfeldman/elm-css" = {
- sha256 = "0nxiyxyw3kw55whkpwhrcgc0dr6a8zlm2nqvsaqdw6mzkykg0ba6";
- version = "16.1.0";
- };
-
- "elm/time" = {
- sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
- version = "1.0.0";
- };
-
- "elm/virtual-dom" = {
- sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg";
- version = "1.0.2";
- };
-
- "elm-explorations/test" = {
- sha256 = "0rpynrm9irgzyynd1bws0xspww5lnwv7w7998750jb8kcrw39h0n";
- version = "1.0.0";
- };
-
- "elm/random" = {
- sha256 = "138n2455wdjwa657w6sjq18wx2r0k60ibpc4frhbqr50sncxrfdl";
- version = "1.0.0";
- };
-}
diff --git a/modules/private/websites/tools/games/codenames/frontend.nix b/modules/private/websites/tools/games/codenames/frontend.nix
deleted file mode 100644
index 0f29070..0000000
--- a/modules/private/websites/tools/games/codenames/frontend.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ callPackage, runCommand, nodejs, utillinux, nodeEnv, nodePackages, elmPackages }:
-let
- codenamesgreen_packages = callPackage ./node-packages.nix { inherit nodeEnv; };
-in
-runCommand "frontend" {
- buildInputs = [
- nodejs utillinux nodePackages.parcel-bundler elmPackages.elm
- ];
-} ''
- cp -a ${codenamesgreen_packages.package}/lib/node_modules/codenamesgreen .
- chmod -R u+w codenamesgreen
- cd codenamesgreen
- ${elmPackages.fetchElmDeps {
- elmPackages = import ./elm-srcs.nix;
- registryDat = ./registry.dat;
- elmVersion = elmPackages.elm.version;
- }}
- npx parcel build src/index.html
- cp -a dist $out
- cp -R src/images $out
- cp src/robots.txt $out
-''
diff --git a/modules/private/websites/tools/games/codenames/greenapid.nix b/modules/private/websites/tools/games/codenames/greenapid.nix
deleted file mode 100644
index 52bda3b..0000000
--- a/modules/private/websites/tools/games/codenames/greenapid.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{ buildGoPackage, fetchFromGitHub, socket ? "/run/codenamesgreen/socket.sock" }:
-buildGoPackage rec {
- pname = "greenapid";
- version = "master-6d014d0";
-
- goPackagePath = "github.com/jbowens/codenamesgreen";
- subPackages = [ "cmd/greenapid" ];
-
- src = fetchFromGitHub {
- owner = "jbowens";
- repo = "codenamesgreen";
- rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b";
- sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0";
- };
-
- patches = [ ./greenapid.patch ];
- goDeps = ./deps.nix;
-}
diff --git a/modules/private/websites/tools/games/codenames/greenapid.patch b/modules/private/websites/tools/games/codenames/greenapid.patch
deleted file mode 100644
index 21a9fad..0000000
--- a/modules/private/websites/tools/games/codenames/greenapid.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff --git a/cmd/greenapid/main.go b/cmd/greenapid/main.go
-index 86499e9..1589323 100644
---- a/cmd/greenapid/main.go
-+++ b/cmd/greenapid/main.go
-@@ -1,6 +1,7 @@
- package main
-
- import (
-+ "net"
- "net/http"
-
- "github.com/jbowens/codenamesgreen/gameapi"
-@@ -13,6 +14,12 @@ func main() {
- }
-
- h := gameapi.Handler(wordLists)
-- err = http.ListenAndServe(":8080", h)
-+ server := &http.Server{Handler: h}
-+ ln, err := net.Listen("unix", "/run/codenamesgreen/socket.sock")
-+ if err != nil {
-+ panic(err)
-+ }
-+
-+ err = server.Serve(ln)
- panic(err)
- }
-diff --git a/gameapi/handler.go b/gameapi/handler.go
-index d67cf94..108e7e1 100644
---- a/gameapi/handler.go
-+++ b/gameapi/handler.go
-@@ -101,7 +101,7 @@ func (h *handler) handleIndex(rw http.ResponseWriter, req *http.Request) {
- for {
- w1 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))])
- w2 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))])
-- id := fmt.Sprintf("%s-%s", w1, w2)
-+ id = fmt.Sprintf("%s-%s", w1, w2)
- if _, ok := h.games[id]; !ok {
- break
- }
diff --git a/modules/private/websites/tools/games/codenames/node-packages.nix b/modules/private/websites/tools/games/codenames/node-packages.nix
deleted file mode 100644
index 02595c5..0000000
--- a/modules/private/websites/tools/games/codenames/node-packages.nix
+++ /dev/null
@@ -1,7621 +0,0 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
-
-{nodeEnv, fetchurl, fetchgit, fetchFromGitHub, runCommand, globalBuildInputs ? []}:
-
-let
- sources = {
- "@babel/code-frame-7.0.0" = {
- name = "_at_babel_slash_code-frame";
- packageName = "@babel/code-frame";
- version = "7.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz";
- sha512 = "OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==";
- };
- };
- "@babel/code-frame-7.8.3" = {
- name = "_at_babel_slash_code-frame";
- packageName = "@babel/code-frame";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz";
- sha512 = "a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==";
- };
- };
- "@babel/core-7.3.4" = {
- name = "_at_babel_slash_core";
- packageName = "@babel/core";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz";
- sha512 = "jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==";
- };
- };
- "@babel/generator-7.3.4" = {
- name = "_at_babel_slash_generator";
- packageName = "@babel/generator";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz";
- sha512 = "8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==";
- };
- };
- "@babel/generator-7.9.5" = {
- name = "_at_babel_slash_generator";
- packageName = "@babel/generator";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz";
- sha512 = "GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==";
- };
- };
- "@babel/helper-annotate-as-pure-7.8.3" = {
- name = "_at_babel_slash_helper-annotate-as-pure";
- packageName = "@babel/helper-annotate-as-pure";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz";
- sha512 = "6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==";
- };
- };
- "@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" = {
- name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor";
- packageName = "@babel/helper-builder-binary-assignment-operator-visitor";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz";
- sha512 = "5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==";
- };
- };
- "@babel/helper-builder-react-jsx-7.9.0" = {
- name = "_at_babel_slash_helper-builder-react-jsx";
- packageName = "@babel/helper-builder-react-jsx";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz";
- sha512 = "weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==";
- };
- };
- "@babel/helper-create-regexp-features-plugin-7.8.8" = {
- name = "_at_babel_slash_helper-create-regexp-features-plugin";
- packageName = "@babel/helper-create-regexp-features-plugin";
- version = "7.8.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz";
- sha512 = "LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==";
- };
- };
- "@babel/helper-define-map-7.8.3" = {
- name = "_at_babel_slash_helper-define-map";
- packageName = "@babel/helper-define-map";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz";
- sha512 = "PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==";
- };
- };
- "@babel/helper-explode-assignable-expression-7.8.3" = {
- name = "_at_babel_slash_helper-explode-assignable-expression";
- packageName = "@babel/helper-explode-assignable-expression";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz";
- sha512 = "N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==";
- };
- };
- "@babel/helper-function-name-7.9.5" = {
- name = "_at_babel_slash_helper-function-name";
- packageName = "@babel/helper-function-name";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz";
- sha512 = "JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==";
- };
- };
- "@babel/helper-get-function-arity-7.8.3" = {
- name = "_at_babel_slash_helper-get-function-arity";
- packageName = "@babel/helper-get-function-arity";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz";
- sha512 = "FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==";
- };
- };
- "@babel/helper-hoist-variables-7.8.3" = {
- name = "_at_babel_slash_helper-hoist-variables";
- packageName = "@babel/helper-hoist-variables";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz";
- sha512 = "ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==";
- };
- };
- "@babel/helper-member-expression-to-functions-7.8.3" = {
- name = "_at_babel_slash_helper-member-expression-to-functions";
- packageName = "@babel/helper-member-expression-to-functions";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz";
- sha512 = "fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==";
- };
- };
- "@babel/helper-module-imports-7.8.3" = {
- name = "_at_babel_slash_helper-module-imports";
- packageName = "@babel/helper-module-imports";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz";
- sha512 = "R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==";
- };
- };
- "@babel/helper-module-transforms-7.9.0" = {
- name = "_at_babel_slash_helper-module-transforms";
- packageName = "@babel/helper-module-transforms";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz";
- sha512 = "0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==";
- };
- };
- "@babel/helper-optimise-call-expression-7.8.3" = {
- name = "_at_babel_slash_helper-optimise-call-expression";
- packageName = "@babel/helper-optimise-call-expression";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz";
- sha512 = "Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==";
- };
- };
- "@babel/helper-plugin-utils-7.8.3" = {
- name = "_at_babel_slash_helper-plugin-utils";
- packageName = "@babel/helper-plugin-utils";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz";
- sha512 = "j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==";
- };
- };
- "@babel/helper-regex-7.8.3" = {
- name = "_at_babel_slash_helper-regex";
- packageName = "@babel/helper-regex";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz";
- sha512 = "BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==";
- };
- };
- "@babel/helper-remap-async-to-generator-7.8.3" = {
- name = "_at_babel_slash_helper-remap-async-to-generator";
- packageName = "@babel/helper-remap-async-to-generator";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz";
- sha512 = "kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==";
- };
- };
- "@babel/helper-replace-supers-7.8.6" = {
- name = "_at_babel_slash_helper-replace-supers";
- packageName = "@babel/helper-replace-supers";
- version = "7.8.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz";
- sha512 = "PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==";
- };
- };
- "@babel/helper-simple-access-7.8.3" = {
- name = "_at_babel_slash_helper-simple-access";
- packageName = "@babel/helper-simple-access";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz";
- sha512 = "VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==";
- };
- };
- "@babel/helper-split-export-declaration-7.8.3" = {
- name = "_at_babel_slash_helper-split-export-declaration";
- packageName = "@babel/helper-split-export-declaration";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz";
- sha512 = "3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==";
- };
- };
- "@babel/helper-validator-identifier-7.9.5" = {
- name = "_at_babel_slash_helper-validator-identifier";
- packageName = "@babel/helper-validator-identifier";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz";
- sha512 = "/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==";
- };
- };
- "@babel/helper-wrap-function-7.8.3" = {
- name = "_at_babel_slash_helper-wrap-function";
- packageName = "@babel/helper-wrap-function";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz";
- sha512 = "LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==";
- };
- };
- "@babel/helpers-7.9.2" = {
- name = "_at_babel_slash_helpers";
- packageName = "@babel/helpers";
- version = "7.9.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz";
- sha512 = "JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==";
- };
- };
- "@babel/highlight-7.9.0" = {
- name = "_at_babel_slash_highlight";
- packageName = "@babel/highlight";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz";
- sha512 = "lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==";
- };
- };
- "@babel/parser-7.3.4" = {
- name = "_at_babel_slash_parser";
- packageName = "@babel/parser";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz";
- sha512 = "tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==";
- };
- };
- "@babel/parser-7.9.4" = {
- name = "_at_babel_slash_parser";
- packageName = "@babel/parser";
- version = "7.9.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz";
- sha512 = "bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==";
- };
- };
- "@babel/plugin-proposal-async-generator-functions-7.8.3" = {
- name = "_at_babel_slash_plugin-proposal-async-generator-functions";
- packageName = "@babel/plugin-proposal-async-generator-functions";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz";
- sha512 = "NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==";
- };
- };
- "@babel/plugin-proposal-json-strings-7.8.3" = {
- name = "_at_babel_slash_plugin-proposal-json-strings";
- packageName = "@babel/plugin-proposal-json-strings";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz";
- sha512 = "KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==";
- };
- };
- "@babel/plugin-proposal-object-rest-spread-7.9.5" = {
- name = "_at_babel_slash_plugin-proposal-object-rest-spread";
- packageName = "@babel/plugin-proposal-object-rest-spread";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz";
- sha512 = "VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==";
- };
- };
- "@babel/plugin-proposal-optional-catch-binding-7.8.3" = {
- name = "_at_babel_slash_plugin-proposal-optional-catch-binding";
- packageName = "@babel/plugin-proposal-optional-catch-binding";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz";
- sha512 = "0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==";
- };
- };
- "@babel/plugin-proposal-unicode-property-regex-7.8.8" = {
- name = "_at_babel_slash_plugin-proposal-unicode-property-regex";
- packageName = "@babel/plugin-proposal-unicode-property-regex";
- version = "7.8.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz";
- sha512 = "EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==";
- };
- };
- "@babel/plugin-syntax-async-generators-7.8.4" = {
- name = "_at_babel_slash_plugin-syntax-async-generators";
- packageName = "@babel/plugin-syntax-async-generators";
- version = "7.8.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz";
- sha512 = "tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==";
- };
- };
- "@babel/plugin-syntax-flow-7.8.3" = {
- name = "_at_babel_slash_plugin-syntax-flow";
- packageName = "@babel/plugin-syntax-flow";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz";
- sha512 = "innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==";
- };
- };
- "@babel/plugin-syntax-json-strings-7.8.3" = {
- name = "_at_babel_slash_plugin-syntax-json-strings";
- packageName = "@babel/plugin-syntax-json-strings";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz";
- sha512 = "lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==";
- };
- };
- "@babel/plugin-syntax-jsx-7.8.3" = {
- name = "_at_babel_slash_plugin-syntax-jsx";
- packageName = "@babel/plugin-syntax-jsx";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz";
- sha512 = "WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==";
- };
- };
- "@babel/plugin-syntax-object-rest-spread-7.8.3" = {
- name = "_at_babel_slash_plugin-syntax-object-rest-spread";
- packageName = "@babel/plugin-syntax-object-rest-spread";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz";
- sha512 = "XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==";
- };
- };
- "@babel/plugin-syntax-optional-catch-binding-7.8.3" = {
- name = "_at_babel_slash_plugin-syntax-optional-catch-binding";
- packageName = "@babel/plugin-syntax-optional-catch-binding";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz";
- sha512 = "6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==";
- };
- };
- "@babel/plugin-transform-arrow-functions-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-arrow-functions";
- packageName = "@babel/plugin-transform-arrow-functions";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz";
- sha512 = "0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==";
- };
- };
- "@babel/plugin-transform-async-to-generator-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-async-to-generator";
- packageName = "@babel/plugin-transform-async-to-generator";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz";
- sha512 = "imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==";
- };
- };
- "@babel/plugin-transform-block-scoped-functions-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-block-scoped-functions";
- packageName = "@babel/plugin-transform-block-scoped-functions";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz";
- sha512 = "vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==";
- };
- };
- "@babel/plugin-transform-block-scoping-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-block-scoping";
- packageName = "@babel/plugin-transform-block-scoping";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz";
- sha512 = "pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==";
- };
- };
- "@babel/plugin-transform-classes-7.9.5" = {
- name = "_at_babel_slash_plugin-transform-classes";
- packageName = "@babel/plugin-transform-classes";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz";
- sha512 = "x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==";
- };
- };
- "@babel/plugin-transform-computed-properties-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-computed-properties";
- packageName = "@babel/plugin-transform-computed-properties";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz";
- sha512 = "O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==";
- };
- };
- "@babel/plugin-transform-destructuring-7.9.5" = {
- name = "_at_babel_slash_plugin-transform-destructuring";
- packageName = "@babel/plugin-transform-destructuring";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz";
- sha512 = "j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==";
- };
- };
- "@babel/plugin-transform-dotall-regex-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-dotall-regex";
- packageName = "@babel/plugin-transform-dotall-regex";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz";
- sha512 = "kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==";
- };
- };
- "@babel/plugin-transform-duplicate-keys-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-duplicate-keys";
- packageName = "@babel/plugin-transform-duplicate-keys";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz";
- sha512 = "s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==";
- };
- };
- "@babel/plugin-transform-exponentiation-operator-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-exponentiation-operator";
- packageName = "@babel/plugin-transform-exponentiation-operator";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz";
- sha512 = "zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==";
- };
- };
- "@babel/plugin-transform-flow-strip-types-7.3.4" = {
- name = "_at_babel_slash_plugin-transform-flow-strip-types";
- packageName = "@babel/plugin-transform-flow-strip-types";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz";
- sha512 = "PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==";
- };
- };
- "@babel/plugin-transform-for-of-7.9.0" = {
- name = "_at_babel_slash_plugin-transform-for-of";
- packageName = "@babel/plugin-transform-for-of";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz";
- sha512 = "lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==";
- };
- };
- "@babel/plugin-transform-function-name-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-function-name";
- packageName = "@babel/plugin-transform-function-name";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz";
- sha512 = "rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==";
- };
- };
- "@babel/plugin-transform-literals-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-literals";
- packageName = "@babel/plugin-transform-literals";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz";
- sha512 = "3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==";
- };
- };
- "@babel/plugin-transform-modules-amd-7.9.0" = {
- name = "_at_babel_slash_plugin-transform-modules-amd";
- packageName = "@babel/plugin-transform-modules-amd";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz";
- sha512 = "vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==";
- };
- };
- "@babel/plugin-transform-modules-commonjs-7.2.0" = {
- name = "_at_babel_slash_plugin-transform-modules-commonjs";
- packageName = "@babel/plugin-transform-modules-commonjs";
- version = "7.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz";
- sha512 = "V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==";
- };
- };
- "@babel/plugin-transform-modules-systemjs-7.9.0" = {
- name = "_at_babel_slash_plugin-transform-modules-systemjs";
- packageName = "@babel/plugin-transform-modules-systemjs";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz";
- sha512 = "FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==";
- };
- };
- "@babel/plugin-transform-modules-umd-7.9.0" = {
- name = "_at_babel_slash_plugin-transform-modules-umd";
- packageName = "@babel/plugin-transform-modules-umd";
- version = "7.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz";
- sha512 = "uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==";
- };
- };
- "@babel/plugin-transform-named-capturing-groups-regex-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex";
- packageName = "@babel/plugin-transform-named-capturing-groups-regex";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz";
- sha512 = "f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==";
- };
- };
- "@babel/plugin-transform-new-target-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-new-target";
- packageName = "@babel/plugin-transform-new-target";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz";
- sha512 = "QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==";
- };
- };
- "@babel/plugin-transform-object-super-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-object-super";
- packageName = "@babel/plugin-transform-object-super";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz";
- sha512 = "57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==";
- };
- };
- "@babel/plugin-transform-parameters-7.9.5" = {
- name = "_at_babel_slash_plugin-transform-parameters";
- packageName = "@babel/plugin-transform-parameters";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz";
- sha512 = "0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==";
- };
- };
- "@babel/plugin-transform-react-jsx-7.3.0" = {
- name = "_at_babel_slash_plugin-transform-react-jsx";
- packageName = "@babel/plugin-transform-react-jsx";
- version = "7.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz";
- sha512 = "a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==";
- };
- };
- "@babel/plugin-transform-regenerator-7.8.7" = {
- name = "_at_babel_slash_plugin-transform-regenerator";
- packageName = "@babel/plugin-transform-regenerator";
- version = "7.8.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz";
- sha512 = "TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==";
- };
- };
- "@babel/plugin-transform-shorthand-properties-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-shorthand-properties";
- packageName = "@babel/plugin-transform-shorthand-properties";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz";
- sha512 = "I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==";
- };
- };
- "@babel/plugin-transform-spread-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-spread";
- packageName = "@babel/plugin-transform-spread";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz";
- sha512 = "CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==";
- };
- };
- "@babel/plugin-transform-sticky-regex-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-sticky-regex";
- packageName = "@babel/plugin-transform-sticky-regex";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz";
- sha512 = "9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==";
- };
- };
- "@babel/plugin-transform-template-literals-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-template-literals";
- packageName = "@babel/plugin-transform-template-literals";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz";
- sha512 = "820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==";
- };
- };
- "@babel/plugin-transform-typeof-symbol-7.8.4" = {
- name = "_at_babel_slash_plugin-transform-typeof-symbol";
- packageName = "@babel/plugin-transform-typeof-symbol";
- version = "7.8.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz";
- sha512 = "2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==";
- };
- };
- "@babel/plugin-transform-unicode-regex-7.8.3" = {
- name = "_at_babel_slash_plugin-transform-unicode-regex";
- packageName = "@babel/plugin-transform-unicode-regex";
- version = "7.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz";
- sha512 = "+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==";
- };
- };
- "@babel/preset-env-7.3.4" = {
- name = "_at_babel_slash_preset-env";
- packageName = "@babel/preset-env";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz";
- sha512 = "2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==";
- };
- };
- "@babel/runtime-7.3.4" = {
- name = "_at_babel_slash_runtime";
- packageName = "@babel/runtime";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz";
- sha512 = "IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==";
- };
- };
- "@babel/runtime-7.9.2" = {
- name = "_at_babel_slash_runtime";
- packageName = "@babel/runtime";
- version = "7.9.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz";
- sha512 = "NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==";
- };
- };
- "@babel/template-7.2.2" = {
- name = "_at_babel_slash_template";
- packageName = "@babel/template";
- version = "7.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz";
- sha512 = "zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==";
- };
- };
- "@babel/template-7.8.6" = {
- name = "_at_babel_slash_template";
- packageName = "@babel/template";
- version = "7.8.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz";
- sha512 = "zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==";
- };
- };
- "@babel/traverse-7.3.4" = {
- name = "_at_babel_slash_traverse";
- packageName = "@babel/traverse";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz";
- sha512 = "TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==";
- };
- };
- "@babel/traverse-7.9.5" = {
- name = "_at_babel_slash_traverse";
- packageName = "@babel/traverse";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz";
- sha512 = "c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==";
- };
- };
- "@babel/types-7.3.4" = {
- name = "_at_babel_slash_types";
- packageName = "@babel/types";
- version = "7.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz";
- sha512 = "WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==";
- };
- };
- "@babel/types-7.9.5" = {
- name = "_at_babel_slash_types";
- packageName = "@babel/types";
- version = "7.9.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz";
- sha512 = "XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==";
- };
- };
- "@iarna/toml-2.2.5" = {
- name = "_at_iarna_slash_toml";
- packageName = "@iarna/toml";
- version = "2.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz";
- sha512 = "trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==";
- };
- };
- "@mrmlnc/readdir-enhanced-2.2.1" = {
- name = "_at_mrmlnc_slash_readdir-enhanced";
- packageName = "@mrmlnc/readdir-enhanced";
- version = "2.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz";
- sha512 = "bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==";
- };
- };
- "@nodelib/fs.stat-1.1.3" = {
- name = "_at_nodelib_slash_fs.stat";
- packageName = "@nodelib/fs.stat";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz";
- sha512 = "shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==";
- };
- };
- "@parcel/fs-1.11.0" = {
- name = "_at_parcel_slash_fs";
- packageName = "@parcel/fs";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz";
- sha512 = "86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==";
- };
- };
- "@parcel/logger-1.11.1" = {
- name = "_at_parcel_slash_logger";
- packageName = "@parcel/logger";
- version = "1.11.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz";
- sha512 = "9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==";
- };
- };
- "@parcel/utils-1.11.0" = {
- name = "_at_parcel_slash_utils";
- packageName = "@parcel/utils";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz";
- sha512 = "cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==";
- };
- };
- "@parcel/watcher-1.12.1" = {
- name = "_at_parcel_slash_watcher";
- packageName = "@parcel/watcher";
- version = "1.12.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz";
- sha512 = "od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==";
- };
- };
- "@parcel/workers-1.11.0" = {
- name = "_at_parcel_slash_workers";
- packageName = "@parcel/workers";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz";
- sha512 = "USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==";
- };
- };
- "@types/q-1.5.2" = {
- name = "_at_types_slash_q";
- packageName = "@types/q";
- version = "1.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz";
- sha512 = "ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==";
- };
- };
- "abab-2.0.3" = {
- name = "abab";
- packageName = "abab";
- version = "2.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz";
- sha512 = "tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==";
- };
- };
- "abbrev-1.1.1" = {
- name = "abbrev";
- packageName = "abbrev";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
- sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
- };
- };
- "acorn-6.4.1" = {
- name = "acorn";
- packageName = "acorn";
- version = "6.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz";
- sha512 = "ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==";
- };
- };
- "acorn-7.1.1" = {
- name = "acorn";
- packageName = "acorn";
- version = "7.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz";
- sha512 = "add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==";
- };
- };
- "acorn-globals-4.3.4" = {
- name = "acorn-globals";
- packageName = "acorn-globals";
- version = "4.3.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz";
- sha512 = "clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==";
- };
- };
- "acorn-walk-6.2.0" = {
- name = "acorn-walk";
- packageName = "acorn-walk";
- version = "6.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz";
- sha512 = "7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==";
- };
- };
- "ajv-6.12.2" = {
- name = "ajv";
- packageName = "ajv";
- version = "6.12.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz";
- sha512 = "k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==";
- };
- };
- "alphanum-sort-1.0.2" = {
- name = "alphanum-sort";
- packageName = "alphanum-sort";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz";
- sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3";
- };
- };
- "ansi-regex-2.1.1" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
- sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
- };
- };
- "ansi-regex-3.0.0" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
- sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
- };
- };
- "ansi-regex-4.1.0" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "4.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
- sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
- };
- };
- "ansi-styles-2.2.1" = {
- name = "ansi-styles";
- packageName = "ansi-styles";
- version = "2.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
- sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
- };
- };
- "ansi-styles-3.2.1" = {
- name = "ansi-styles";
- packageName = "ansi-styles";
- version = "3.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
- sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
- };
- };
- "ansi-to-html-0.6.14" = {
- name = "ansi-to-html";
- packageName = "ansi-to-html";
- version = "0.6.14";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz";
- sha512 = "7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==";
- };
- };
- "anymatch-2.0.0" = {
- name = "anymatch";
- packageName = "anymatch";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz";
- sha512 = "5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==";
- };
- };
- "argparse-1.0.10" = {
- name = "argparse";
- packageName = "argparse";
- version = "1.0.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
- sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
- };
- };
- "arr-diff-4.0.0" = {
- name = "arr-diff";
- packageName = "arr-diff";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz";
- sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
- };
- };
- "arr-flatten-1.1.0" = {
- name = "arr-flatten";
- packageName = "arr-flatten";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz";
- sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==";
- };
- };
- "arr-union-3.1.0" = {
- name = "arr-union";
- packageName = "arr-union";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz";
- sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
- };
- };
- "array-equal-1.0.0" = {
- name = "array-equal";
- packageName = "array-equal";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz";
- sha1 = "8c2a5ef2472fd9ea742b04c77a75093ba2757c93";
- };
- };
- "array-unique-0.3.2" = {
- name = "array-unique";
- packageName = "array-unique";
- version = "0.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz";
- sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
- };
- };
- "asn1-0.2.4" = {
- name = "asn1";
- packageName = "asn1";
- version = "0.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
- sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
- };
- };
- "asn1.js-4.10.1" = {
- name = "asn1.js";
- packageName = "asn1.js";
- version = "4.10.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz";
- sha512 = "p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==";
- };
- };
- "assert-1.5.0" = {
- name = "assert";
- packageName = "assert";
- version = "1.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz";
- sha512 = "EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==";
- };
- };
- "assert-plus-1.0.0" = {
- name = "assert-plus";
- packageName = "assert-plus";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
- sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
- };
- };
- "assign-symbols-1.0.0" = {
- name = "assign-symbols";
- packageName = "assign-symbols";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz";
- sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
- };
- };
- "async-each-1.0.3" = {
- name = "async-each";
- packageName = "async-each";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz";
- sha512 = "z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==";
- };
- };
- "async-limiter-1.0.1" = {
- name = "async-limiter";
- packageName = "async-limiter";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz";
- sha512 = "csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==";
- };
- };
- "asynckit-0.4.0" = {
- name = "asynckit";
- packageName = "asynckit";
- version = "0.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
- sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
- };
- };
- "atob-2.1.2" = {
- name = "atob";
- packageName = "atob";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz";
- sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==";
- };
- };
- "aws-sign2-0.7.0" = {
- name = "aws-sign2";
- packageName = "aws-sign2";
- version = "0.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
- sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
- };
- };
- "aws4-1.9.1" = {
- name = "aws4";
- packageName = "aws4";
- version = "1.9.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz";
- sha512 = "wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==";
- };
- };
- "babel-plugin-dynamic-import-node-2.3.3" = {
- name = "babel-plugin-dynamic-import-node";
- packageName = "babel-plugin-dynamic-import-node";
- version = "2.3.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz";
- sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==";
- };
- };
- "babel-runtime-6.26.0" = {
- name = "babel-runtime";
- packageName = "babel-runtime";
- version = "6.26.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
- sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
- };
- };
- "babel-types-6.26.0" = {
- name = "babel-types";
- packageName = "babel-types";
- version = "6.26.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz";
- sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497";
- };
- };
- "babylon-walk-1.0.2" = {
- name = "babylon-walk";
- packageName = "babylon-walk";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz";
- sha1 = "3b15a5ddbb482a78b4ce9c01c8ba181702d9d6ce";
- };
- };
- "balanced-match-1.0.0" = {
- name = "balanced-match";
- packageName = "balanced-match";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
- sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
- };
- };
- "base-0.11.2" = {
- name = "base";
- packageName = "base";
- version = "0.11.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz";
- sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==";
- };
- };
- "base64-js-1.3.1" = {
- name = "base64-js";
- packageName = "base64-js";
- version = "1.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz";
- sha512 = "mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==";
- };
- };
- "bcrypt-pbkdf-1.0.2" = {
- name = "bcrypt-pbkdf";
- packageName = "bcrypt-pbkdf";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
- sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
- };
- };
- "binary-extensions-1.13.1" = {
- name = "binary-extensions";
- packageName = "binary-extensions";
- version = "1.13.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz";
- sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==";
- };
- };
- "bindings-1.5.0" = {
- name = "bindings";
- packageName = "bindings";
- version = "1.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz";
- sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==";
- };
- };
- "bn.js-4.11.8" = {
- name = "bn.js";
- packageName = "bn.js";
- version = "4.11.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz";
- sha512 = "ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==";
- };
- };
- "boolbase-1.0.0" = {
- name = "boolbase";
- packageName = "boolbase";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz";
- sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
- };
- };
- "brace-expansion-1.1.11" = {
- name = "brace-expansion";
- packageName = "brace-expansion";
- version = "1.1.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
- sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
- };
- };
- "braces-2.3.2" = {
- name = "braces";
- packageName = "braces";
- version = "2.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz";
- sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==";
- };
- };
- "brfs-1.6.1" = {
- name = "brfs";
- packageName = "brfs";
- version = "1.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz";
- sha512 = "OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==";
- };
- };
- "brorand-1.1.0" = {
- name = "brorand";
- packageName = "brorand";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz";
- sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f";
- };
- };
- "browser-process-hrtime-1.0.0" = {
- name = "browser-process-hrtime";
- packageName = "browser-process-hrtime";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz";
- sha512 = "9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==";
- };
- };
- "browserify-aes-1.2.0" = {
- name = "browserify-aes";
- packageName = "browserify-aes";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz";
- sha512 = "+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==";
- };
- };
- "browserify-cipher-1.0.1" = {
- name = "browserify-cipher";
- packageName = "browserify-cipher";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz";
- sha512 = "sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==";
- };
- };
- "browserify-des-1.0.2" = {
- name = "browserify-des";
- packageName = "browserify-des";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz";
- sha512 = "BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==";
- };
- };
- "browserify-rsa-4.0.1" = {
- name = "browserify-rsa";
- packageName = "browserify-rsa";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz";
- sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524";
- };
- };
- "browserify-sign-4.0.4" = {
- name = "browserify-sign";
- packageName = "browserify-sign";
- version = "4.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz";
- sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298";
- };
- };
- "browserify-zlib-0.2.0" = {
- name = "browserify-zlib";
- packageName = "browserify-zlib";
- version = "0.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz";
- sha512 = "Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==";
- };
- };
- "browserslist-4.12.0" = {
- name = "browserslist";
- packageName = "browserslist";
- version = "4.12.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz";
- sha512 = "UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==";
- };
- };
- "buffer-4.9.2" = {
- name = "buffer";
- packageName = "buffer";
- version = "4.9.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz";
- sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==";
- };
- };
- "buffer-equal-0.0.1" = {
- name = "buffer-equal";
- packageName = "buffer-equal";
- version = "0.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz";
- sha1 = "91bc74b11ea405bc916bc6aa908faafa5b4aac4b";
- };
- };
- "buffer-from-1.1.1" = {
- name = "buffer-from";
- packageName = "buffer-from";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
- sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
- };
- };
- "buffer-xor-1.0.3" = {
- name = "buffer-xor";
- packageName = "buffer-xor";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz";
- sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9";
- };
- };
- "builtin-status-codes-3.0.0" = {
- name = "builtin-status-codes";
- packageName = "builtin-status-codes";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
- sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
- };
- };
- "cache-base-1.0.1" = {
- name = "cache-base";
- packageName = "cache-base";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz";
- sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==";
- };
- };
- "call-me-maybe-1.0.1" = {
- name = "call-me-maybe";
- packageName = "call-me-maybe";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz";
- sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b";
- };
- };
- "caller-callsite-2.0.0" = {
- name = "caller-callsite";
- packageName = "caller-callsite";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz";
- sha1 = "847e0fce0a223750a9a027c54b33731ad3154134";
- };
- };
- "caller-path-2.0.0" = {
- name = "caller-path";
- packageName = "caller-path";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz";
- sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4";
- };
- };
- "callsites-2.0.0" = {
- name = "callsites";
- packageName = "callsites";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz";
- sha1 = "06eb84f00eea413da86affefacbffb36093b3c50";
- };
- };
- "camelcase-5.3.1" = {
- name = "camelcase";
- packageName = "camelcase";
- version = "5.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz";
- sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==";
- };
- };
- "caniuse-api-3.0.0" = {
- name = "caniuse-api";
- packageName = "caniuse-api";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz";
- sha512 = "bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==";
- };
- };
- "caniuse-lite-1.0.30001048" = {
- name = "caniuse-lite";
- packageName = "caniuse-lite";
- version = "1.0.30001048";
- src = fetchurl {
- url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz";
- sha512 = "g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==";
- };
- };
- "caseless-0.12.0" = {
- name = "caseless";
- packageName = "caseless";
- version = "0.12.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
- sha1 = "1b681c21ff84033c826543090689420d187151dc";
- };
- };
- "chalk-1.1.3" = {
- name = "chalk";
- packageName = "chalk";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
- sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
- };
- };
- "chalk-2.4.2" = {
- name = "chalk";
- packageName = "chalk";
- version = "2.4.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
- sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
- };
- };
- "chokidar-2.1.8" = {
- name = "chokidar";
- packageName = "chokidar";
- version = "2.1.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz";
- sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==";
- };
- };
- "cipher-base-1.0.4" = {
- name = "cipher-base";
- packageName = "cipher-base";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz";
- sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==";
- };
- };
- "class-utils-0.3.6" = {
- name = "class-utils";
- packageName = "class-utils";
- version = "0.3.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz";
- sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==";
- };
- };
- "cli-cursor-2.1.0" = {
- name = "cli-cursor";
- packageName = "cli-cursor";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz";
- sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5";
- };
- };
- "cli-spinners-1.3.1" = {
- name = "cli-spinners";
- packageName = "cli-spinners";
- version = "1.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz";
- sha512 = "1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==";
- };
- };
- "cliui-5.0.0" = {
- name = "cliui";
- packageName = "cliui";
- version = "5.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz";
- sha512 = "PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==";
- };
- };
- "clone-1.0.4" = {
- name = "clone";
- packageName = "clone";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz";
- sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
- };
- };
- "clone-2.1.2" = {
- name = "clone";
- packageName = "clone";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz";
- sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f";
- };
- };
- "clones-1.2.0" = {
- name = "clones";
- packageName = "clones";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz";
- sha512 = "FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==";
- };
- };
- "coa-2.0.2" = {
- name = "coa";
- packageName = "coa";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz";
- sha512 = "q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==";
- };
- };
- "collection-visit-1.0.0" = {
- name = "collection-visit";
- packageName = "collection-visit";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz";
- sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
- };
- };
- "color-3.1.2" = {
- name = "color";
- packageName = "color";
- version = "3.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/color/-/color-3.1.2.tgz";
- sha512 = "vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==";
- };
- };
- "color-convert-1.9.3" = {
- name = "color-convert";
- packageName = "color-convert";
- version = "1.9.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
- sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
- };
- };
- "color-name-1.1.3" = {
- name = "color-name";
- packageName = "color-name";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
- sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
- };
- };
- "color-string-1.5.3" = {
- name = "color-string";
- packageName = "color-string";
- version = "1.5.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz";
- sha512 = "dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==";
- };
- };
- "combined-stream-1.0.8" = {
- name = "combined-stream";
- packageName = "combined-stream";
- version = "1.0.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
- sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
- };
- };
- "command-exists-1.2.9" = {
- name = "command-exists";
- packageName = "command-exists";
- version = "1.2.9";
- src = fetchurl {
- url = "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz";
- sha512 = "LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==";
- };
- };
- "commander-2.20.3" = {
- name = "commander";
- packageName = "commander";
- version = "2.20.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
- sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
- };
- };
- "component-emitter-1.3.0" = {
- name = "component-emitter";
- packageName = "component-emitter";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz";
- sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==";
- };
- };
- "concat-map-0.0.1" = {
- name = "concat-map";
- packageName = "concat-map";
- version = "0.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
- sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
- };
- };
- "concat-stream-1.6.2" = {
- name = "concat-stream";
- packageName = "concat-stream";
- version = "1.6.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
- sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
- };
- };
- "config-chain-1.1.12" = {
- name = "config-chain";
- packageName = "config-chain";
- version = "1.1.12";
- src = fetchurl {
- url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz";
- sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==";
- };
- };
- "console-browserify-1.2.0" = {
- name = "console-browserify";
- packageName = "console-browserify";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz";
- sha512 = "ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==";
- };
- };
- "constants-browserify-1.0.0" = {
- name = "constants-browserify";
- packageName = "constants-browserify";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz";
- sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
- };
- };
- "convert-source-map-1.7.0" = {
- name = "convert-source-map";
- packageName = "convert-source-map";
- version = "1.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz";
- sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==";
- };
- };
- "copy-descriptor-0.1.1" = {
- name = "copy-descriptor";
- packageName = "copy-descriptor";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
- sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
- };
- };
- "core-js-2.6.11" = {
- name = "core-js";
- packageName = "core-js";
- version = "2.6.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz";
- sha512 = "5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==";
- };
- };
- "core-util-is-1.0.2" = {
- name = "core-util-is";
- packageName = "core-util-is";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
- sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
- };
- };
- "cosmiconfig-5.2.1" = {
- name = "cosmiconfig";
- packageName = "cosmiconfig";
- version = "5.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz";
- sha512 = "H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==";
- };
- };
- "create-ecdh-4.0.3" = {
- name = "create-ecdh";
- packageName = "create-ecdh";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz";
- sha512 = "GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==";
- };
- };
- "create-hash-1.2.0" = {
- name = "create-hash";
- packageName = "create-hash";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz";
- sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==";
- };
- };
- "create-hmac-1.1.7" = {
- name = "create-hmac";
- packageName = "create-hmac";
- version = "1.1.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz";
- sha512 = "MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==";
- };
- };
- "cross-spawn-6.0.5" = {
- name = "cross-spawn";
- packageName = "cross-spawn";
- version = "6.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz";
- sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
- };
- };
- "crypto-browserify-3.12.0" = {
- name = "crypto-browserify";
- packageName = "crypto-browserify";
- version = "3.12.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz";
- sha512 = "fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==";
- };
- };
- "css-color-names-0.0.4" = {
- name = "css-color-names";
- packageName = "css-color-names";
- version = "0.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz";
- sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0";
- };
- };
- "css-declaration-sorter-4.0.1" = {
- name = "css-declaration-sorter";
- packageName = "css-declaration-sorter";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz";
- sha512 = "BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==";
- };
- };
- "css-modules-loader-core-1.1.0" = {
- name = "css-modules-loader-core";
- packageName = "css-modules-loader-core";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz";
- sha1 = "5908668294a1becd261ae0a4ce21b0b551f21d16";
- };
- };
- "css-select-2.1.0" = {
- name = "css-select";
- packageName = "css-select";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz";
- sha512 = "Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==";
- };
- };
- "css-select-base-adapter-0.1.1" = {
- name = "css-select-base-adapter";
- packageName = "css-select-base-adapter";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz";
- sha512 = "jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==";
- };
- };
- "css-selector-tokenizer-0.7.2" = {
- name = "css-selector-tokenizer";
- packageName = "css-selector-tokenizer";
- version = "0.7.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz";
- sha512 = "yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==";
- };
- };
- "css-tree-1.0.0-alpha.37" = {
- name = "css-tree";
- packageName = "css-tree";
- version = "1.0.0-alpha.37";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz";
- sha512 = "DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==";
- };
- };
- "css-tree-1.0.0-alpha.39" = {
- name = "css-tree";
- packageName = "css-tree";
- version = "1.0.0-alpha.39";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz";
- sha512 = "7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==";
- };
- };
- "css-what-3.2.1" = {
- name = "css-what";
- packageName = "css-what";
- version = "3.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz";
- sha512 = "WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==";
- };
- };
- "cssesc-3.0.0" = {
- name = "cssesc";
- packageName = "cssesc";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz";
- sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==";
- };
- };
- "cssnano-4.1.10" = {
- name = "cssnano";
- packageName = "cssnano";
- version = "4.1.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz";
- sha512 = "5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==";
- };
- };
- "cssnano-preset-default-4.0.7" = {
- name = "cssnano-preset-default";
- packageName = "cssnano-preset-default";
- version = "4.0.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz";
- sha512 = "x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==";
- };
- };
- "cssnano-util-get-arguments-4.0.0" = {
- name = "cssnano-util-get-arguments";
- packageName = "cssnano-util-get-arguments";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz";
- sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f";
- };
- };
- "cssnano-util-get-match-4.0.0" = {
- name = "cssnano-util-get-match";
- packageName = "cssnano-util-get-match";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz";
- sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d";
- };
- };
- "cssnano-util-raw-cache-4.0.1" = {
- name = "cssnano-util-raw-cache";
- packageName = "cssnano-util-raw-cache";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz";
- sha512 = "qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==";
- };
- };
- "cssnano-util-same-parent-4.0.1" = {
- name = "cssnano-util-same-parent";
- packageName = "cssnano-util-same-parent";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz";
- sha512 = "WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==";
- };
- };
- "csso-4.0.3" = {
- name = "csso";
- packageName = "csso";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz";
- sha512 = "NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==";
- };
- };
- "cssom-0.3.8" = {
- name = "cssom";
- packageName = "cssom";
- version = "0.3.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz";
- sha512 = "b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==";
- };
- };
- "cssstyle-1.4.0" = {
- name = "cssstyle";
- packageName = "cssstyle";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz";
- sha512 = "GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==";
- };
- };
- "dashdash-1.14.1" = {
- name = "dashdash";
- packageName = "dashdash";
- version = "1.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
- sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
- };
- };
- "data-urls-1.1.0" = {
- name = "data-urls";
- packageName = "data-urls";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz";
- sha512 = "YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==";
- };
- };
- "deasync-0.1.19" = {
- name = "deasync";
- packageName = "deasync";
- version = "0.1.19";
- src = fetchurl {
- url = "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz";
- sha512 = "oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg==";
- };
- };
- "debug-2.6.9" = {
- name = "debug";
- packageName = "debug";
- version = "2.6.9";
- src = fetchurl {
- url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
- sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
- };
- };
- "debug-4.1.1" = {
- name = "debug";
- packageName = "debug";
- version = "4.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz";
- sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==";
- };
- };
- "decamelize-1.2.0" = {
- name = "decamelize";
- packageName = "decamelize";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
- sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
- };
- };
- "decode-uri-component-0.2.0" = {
- name = "decode-uri-component";
- packageName = "decode-uri-component";
- version = "0.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
- sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
- };
- };
- "deep-is-0.1.3" = {
- name = "deep-is";
- packageName = "deep-is";
- version = "0.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
- sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
- };
- };
- "defaults-1.0.3" = {
- name = "defaults";
- packageName = "defaults";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz";
- sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d";
- };
- };
- "define-properties-1.1.3" = {
- name = "define-properties";
- packageName = "define-properties";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz";
- sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==";
- };
- };
- "define-property-0.2.5" = {
- name = "define-property";
- packageName = "define-property";
- version = "0.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz";
- sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
- };
- };
- "define-property-1.0.0" = {
- name = "define-property";
- packageName = "define-property";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz";
- sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
- };
- };
- "define-property-2.0.2" = {
- name = "define-property";
- packageName = "define-property";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz";
- sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==";
- };
- };
- "delayed-stream-1.0.0" = {
- name = "delayed-stream";
- packageName = "delayed-stream";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
- sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
- };
- };
- "depd-1.1.2" = {
- name = "depd";
- packageName = "depd";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz";
- sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9";
- };
- };
- "des.js-1.0.1" = {
- name = "des.js";
- packageName = "des.js";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz";
- sha512 = "Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==";
- };
- };
- "destroy-1.0.4" = {
- name = "destroy";
- packageName = "destroy";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz";
- sha1 = "978857442c44749e4206613e37946205826abd80";
- };
- };
- "diffie-hellman-5.0.3" = {
- name = "diffie-hellman";
- packageName = "diffie-hellman";
- version = "5.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz";
- sha512 = "kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==";
- };
- };
- "dom-serializer-0.2.2" = {
- name = "dom-serializer";
- packageName = "dom-serializer";
- version = "0.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz";
- sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==";
- };
- };
- "domain-browser-1.2.0" = {
- name = "domain-browser";
- packageName = "domain-browser";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz";
- sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==";
- };
- };
- "domelementtype-1.3.1" = {
- name = "domelementtype";
- packageName = "domelementtype";
- version = "1.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz";
- sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==";
- };
- };
- "domelementtype-2.0.1" = {
- name = "domelementtype";
- packageName = "domelementtype";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz";
- sha512 = "5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==";
- };
- };
- "domexception-1.0.1" = {
- name = "domexception";
- packageName = "domexception";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz";
- sha512 = "raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==";
- };
- };
- "domhandler-2.4.2" = {
- name = "domhandler";
- packageName = "domhandler";
- version = "2.4.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz";
- sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==";
- };
- };
- "domutils-1.7.0" = {
- name = "domutils";
- packageName = "domutils";
- version = "1.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz";
- sha512 = "Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==";
- };
- };
- "dot-prop-5.2.0" = {
- name = "dot-prop";
- packageName = "dot-prop";
- version = "5.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz";
- sha512 = "uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==";
- };
- };
- "dotenv-5.0.1" = {
- name = "dotenv";
- packageName = "dotenv";
- version = "5.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz";
- sha512 = "4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==";
- };
- };
- "dotenv-expand-4.2.0" = {
- name = "dotenv-expand";
- packageName = "dotenv-expand";
- version = "4.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz";
- sha1 = "def1f1ca5d6059d24a766e587942c21106ce1275";
- };
- };
- "duplexer2-0.1.4" = {
- name = "duplexer2";
- packageName = "duplexer2";
- version = "0.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
- sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
- };
- };
- "ecc-jsbn-0.1.2" = {
- name = "ecc-jsbn";
- packageName = "ecc-jsbn";
- version = "0.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
- sha1 = "3a83a904e54353287874c564b7549386849a98c9";
- };
- };
- "editorconfig-0.15.3" = {
- name = "editorconfig";
- packageName = "editorconfig";
- version = "0.15.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz";
- sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==";
- };
- };
- "ee-first-1.1.1" = {
- name = "ee-first";
- packageName = "ee-first";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz";
- sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
- };
- };
- "electron-to-chromium-1.3.418" = {
- name = "electron-to-chromium";
- packageName = "electron-to-chromium";
- version = "1.3.418";
- src = fetchurl {
- url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz";
- sha512 = "i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==";
- };
- };
- "elliptic-6.5.2" = {
- name = "elliptic";
- packageName = "elliptic";
- version = "6.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz";
- sha512 = "f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==";
- };
- };
- "elm-hot-1.1.1" = {
- name = "elm-hot";
- packageName = "elm-hot";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz";
- sha512 = "ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==";
- };
- };
- "emoji-regex-7.0.3" = {
- name = "emoji-regex";
- packageName = "emoji-regex";
- version = "7.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
- sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
- };
- };
- "encodeurl-1.0.2" = {
- name = "encodeurl";
- packageName = "encodeurl";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";
- sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
- };
- };
- "entities-1.1.2" = {
- name = "entities";
- packageName = "entities";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz";
- sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==";
- };
- };
- "entities-2.0.0" = {
- name = "entities";
- packageName = "entities";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz";
- sha512 = "D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==";
- };
- };
- "error-ex-1.3.2" = {
- name = "error-ex";
- packageName = "error-ex";
- version = "1.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";
- sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
- };
- };
- "es-abstract-1.17.5" = {
- name = "es-abstract";
- packageName = "es-abstract";
- version = "1.17.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz";
- sha512 = "BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==";
- };
- };
- "es-to-primitive-1.2.1" = {
- name = "es-to-primitive";
- packageName = "es-to-primitive";
- version = "1.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
- sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==";
- };
- };
- "escape-html-1.0.3" = {
- name = "escape-html";
- packageName = "escape-html";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz";
- sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
- };
- };
- "escape-string-regexp-1.0.5" = {
- name = "escape-string-regexp";
- packageName = "escape-string-regexp";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
- sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
- };
- };
- "escodegen-1.14.1" = {
- name = "escodegen";
- packageName = "escodegen";
- version = "1.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz";
- sha512 = "Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==";
- };
- };
- "escodegen-1.9.1" = {
- name = "escodegen";
- packageName = "escodegen";
- version = "1.9.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz";
- sha512 = "6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==";
- };
- };
- "esprima-3.1.3" = {
- name = "esprima";
- packageName = "esprima";
- version = "3.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz";
- sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633";
- };
- };
- "esprima-4.0.1" = {
- name = "esprima";
- packageName = "esprima";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
- sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
- };
- };
- "estraverse-4.3.0" = {
- name = "estraverse";
- packageName = "estraverse";
- version = "4.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
- sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
- };
- };
- "esutils-2.0.3" = {
- name = "esutils";
- packageName = "esutils";
- version = "2.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
- sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
- };
- };
- "etag-1.8.1" = {
- name = "etag";
- packageName = "etag";
- version = "1.8.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz";
- sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887";
- };
- };
- "events-3.1.0" = {
- name = "events";
- packageName = "events";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/events/-/events-3.1.0.tgz";
- sha512 = "Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==";
- };
- };
- "evp_bytestokey-1.0.3" = {
- name = "evp_bytestokey";
- packageName = "evp_bytestokey";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz";
- sha512 = "/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==";
- };
- };
- "expand-brackets-2.1.4" = {
- name = "expand-brackets";
- packageName = "expand-brackets";
- version = "2.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz";
- sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
- };
- };
- "extend-3.0.2" = {
- name = "extend";
- packageName = "extend";
- version = "3.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
- sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
- };
- };
- "extend-shallow-2.0.1" = {
- name = "extend-shallow";
- packageName = "extend-shallow";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz";
- sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
- };
- };
- "extend-shallow-3.0.2" = {
- name = "extend-shallow";
- packageName = "extend-shallow";
- version = "3.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz";
- sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
- };
- };
- "extglob-2.0.4" = {
- name = "extglob";
- packageName = "extglob";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz";
- sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==";
- };
- };
- "extsprintf-1.3.0" = {
- name = "extsprintf";
- packageName = "extsprintf";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
- sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
- };
- };
- "falafel-2.2.4" = {
- name = "falafel";
- packageName = "falafel";
- version = "2.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz";
- sha512 = "0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==";
- };
- };
- "fast-deep-equal-3.1.1" = {
- name = "fast-deep-equal";
- packageName = "fast-deep-equal";
- version = "3.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz";
- sha512 = "8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==";
- };
- };
- "fast-glob-2.2.7" = {
- name = "fast-glob";
- packageName = "fast-glob";
- version = "2.2.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz";
- sha512 = "g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==";
- };
- };
- "fast-json-stable-stringify-2.1.0" = {
- name = "fast-json-stable-stringify";
- packageName = "fast-json-stable-stringify";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
- sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
- };
- };
- "fast-levenshtein-2.0.6" = {
- name = "fast-levenshtein";
- packageName = "fast-levenshtein";
- version = "2.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
- sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
- };
- };
- "fastparse-1.1.2" = {
- name = "fastparse";
- packageName = "fastparse";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz";
- sha512 = "483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==";
- };
- };
- "file-uri-to-path-1.0.0" = {
- name = "file-uri-to-path";
- packageName = "file-uri-to-path";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz";
- sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==";
- };
- };
- "filesize-3.6.1" = {
- name = "filesize";
- packageName = "filesize";
- version = "3.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz";
- sha512 = "7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==";
- };
- };
- "fill-range-4.0.0" = {
- name = "fill-range";
- packageName = "fill-range";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz";
- sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
- };
- };
- "find-elm-dependencies-2.0.2" = {
- name = "find-elm-dependencies";
- packageName = "find-elm-dependencies";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz";
- sha512 = "nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==";
- };
- };
- "find-up-2.1.0" = {
- name = "find-up";
- packageName = "find-up";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz";
- sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
- };
- };
- "find-up-3.0.0" = {
- name = "find-up";
- packageName = "find-up";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz";
- sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==";
- };
- };
- "firstline-1.2.0" = {
- name = "firstline";
- packageName = "firstline";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz";
- sha1 = "c9f4886e7f7fbf0afc12d71941dce06b192aea05";
- };
- };
- "for-in-1.0.2" = {
- name = "for-in";
- packageName = "for-in";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz";
- sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
- };
- };
- "foreach-2.0.5" = {
- name = "foreach";
- packageName = "foreach";
- version = "2.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz";
- sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99";
- };
- };
- "forever-agent-0.6.1" = {
- name = "forever-agent";
- packageName = "forever-agent";
- version = "0.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
- sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
- };
- };
- "form-data-2.3.3" = {
- name = "form-data";
- packageName = "form-data";
- version = "2.3.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
- sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
- };
- };
- "fragment-cache-0.2.1" = {
- name = "fragment-cache";
- packageName = "fragment-cache";
- version = "0.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz";
- sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
- };
- };
- "fresh-0.5.2" = {
- name = "fresh";
- packageName = "fresh";
- version = "0.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz";
- sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7";
- };
- };
- "fs.realpath-1.0.0" = {
- name = "fs.realpath";
- packageName = "fs.realpath";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
- sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
- };
- };
- "fsevents-1.2.12" = {
- name = "fsevents";
- packageName = "fsevents";
- version = "1.2.12";
- src = fetchurl {
- url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz";
- sha512 = "Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==";
- };
- };
- "function-bind-1.1.1" = {
- name = "function-bind";
- packageName = "function-bind";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
- sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
- };
- };
- "get-caller-file-2.0.5" = {
- name = "get-caller-file";
- packageName = "get-caller-file";
- version = "2.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
- sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
- };
- };
- "get-port-3.2.0" = {
- name = "get-port";
- packageName = "get-port";
- version = "3.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz";
- sha1 = "dd7ce7de187c06c8bf353796ac71e099f0980ebc";
- };
- };
- "get-value-2.0.6" = {
- name = "get-value";
- packageName = "get-value";
- version = "2.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz";
- sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
- };
- };
- "getpass-0.1.7" = {
- name = "getpass";
- packageName = "getpass";
- version = "0.1.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
- sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
- };
- };
- "glob-7.1.4" = {
- name = "glob";
- packageName = "glob";
- version = "7.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz";
- sha512 = "hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==";
- };
- };
- "glob-parent-3.1.0" = {
- name = "glob-parent";
- packageName = "glob-parent";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz";
- sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae";
- };
- };
- "glob-to-regexp-0.3.0" = {
- name = "glob-to-regexp";
- packageName = "glob-to-regexp";
- version = "0.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz";
- sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab";
- };
- };
- "globals-11.12.0" = {
- name = "globals";
- packageName = "globals";
- version = "11.12.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz";
- sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==";
- };
- };
- "graceful-fs-4.2.3" = {
- name = "graceful-fs";
- packageName = "graceful-fs";
- version = "4.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz";
- sha512 = "a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==";
- };
- };
- "grapheme-breaker-0.3.2" = {
- name = "grapheme-breaker";
- packageName = "grapheme-breaker";
- version = "0.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz";
- sha1 = "5b9e6b78c3832452d2ba2bb1cb830f96276410ac";
- };
- };
- "har-schema-2.0.0" = {
- name = "har-schema";
- packageName = "har-schema";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
- sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
- };
- };
- "har-validator-5.1.3" = {
- name = "har-validator";
- packageName = "har-validator";
- version = "5.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
- sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==";
- };
- };
- "has-1.0.3" = {
- name = "has";
- packageName = "has";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
- sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
- };
- };
- "has-ansi-2.0.0" = {
- name = "has-ansi";
- packageName = "has-ansi";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
- sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
- };
- };
- "has-flag-1.0.0" = {
- name = "has-flag";
- packageName = "has-flag";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz";
- sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa";
- };
- };
- "has-flag-3.0.0" = {
- name = "has-flag";
- packageName = "has-flag";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
- sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
- };
- };
- "has-symbols-1.0.1" = {
- name = "has-symbols";
- packageName = "has-symbols";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz";
- sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==";
- };
- };
- "has-value-0.3.1" = {
- name = "has-value";
- packageName = "has-value";
- version = "0.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz";
- sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
- };
- };
- "has-value-1.0.0" = {
- name = "has-value";
- packageName = "has-value";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz";
- sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
- };
- };
- "has-values-0.1.4" = {
- name = "has-values";
- packageName = "has-values";
- version = "0.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz";
- sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
- };
- };
- "has-values-1.0.0" = {
- name = "has-values";
- packageName = "has-values";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz";
- sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
- };
- };
- "hash-base-3.0.4" = {
- name = "hash-base";
- packageName = "hash-base";
- version = "3.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz";
- sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918";
- };
- };
- "hash.js-1.1.7" = {
- name = "hash.js";
- packageName = "hash.js";
- version = "1.1.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz";
- sha512 = "taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==";
- };
- };
- "hex-color-regex-1.1.0" = {
- name = "hex-color-regex";
- packageName = "hex-color-regex";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz";
- sha512 = "l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==";
- };
- };
- "hmac-drbg-1.0.1" = {
- name = "hmac-drbg";
- packageName = "hmac-drbg";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz";
- sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1";
- };
- };
- "hsl-regex-1.0.0" = {
- name = "hsl-regex";
- packageName = "hsl-regex";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz";
- sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e";
- };
- };
- "hsla-regex-1.0.0" = {
- name = "hsla-regex";
- packageName = "hsla-regex";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz";
- sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38";
- };
- };
- "html-comment-regex-1.1.2" = {
- name = "html-comment-regex";
- packageName = "html-comment-regex";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz";
- sha512 = "P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==";
- };
- };
- "html-encoding-sniffer-1.0.2" = {
- name = "html-encoding-sniffer";
- packageName = "html-encoding-sniffer";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz";
- sha512 = "71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==";
- };
- };
- "html-tags-1.2.0" = {
- name = "html-tags";
- packageName = "html-tags";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz";
- sha1 = "c78de65b5663aa597989dd2b7ab49200d7e4db98";
- };
- };
- "htmlnano-0.2.5" = {
- name = "htmlnano";
- packageName = "htmlnano";
- version = "0.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz";
- sha512 = "X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA==";
- };
- };
- "htmlparser2-3.10.1" = {
- name = "htmlparser2";
- packageName = "htmlparser2";
- version = "3.10.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz";
- sha512 = "IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==";
- };
- };
- "http-errors-1.7.3" = {
- name = "http-errors";
- packageName = "http-errors";
- version = "1.7.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz";
- sha512 = "ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==";
- };
- };
- "http-signature-1.2.0" = {
- name = "http-signature";
- packageName = "http-signature";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
- sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
- };
- };
- "https-browserify-1.0.0" = {
- name = "https-browserify";
- packageName = "https-browserify";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz";
- sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73";
- };
- };
- "iconv-lite-0.4.24" = {
- name = "iconv-lite";
- packageName = "iconv-lite";
- version = "0.4.24";
- src = fetchurl {
- url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
- sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
- };
- };
- "icss-replace-symbols-1.1.0" = {
- name = "icss-replace-symbols";
- packageName = "icss-replace-symbols";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz";
- sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded";
- };
- };
- "ieee754-1.1.13" = {
- name = "ieee754";
- packageName = "ieee754";
- version = "1.1.13";
- src = fetchurl {
- url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz";
- sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==";
- };
- };
- "import-fresh-2.0.0" = {
- name = "import-fresh";
- packageName = "import-fresh";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz";
- sha1 = "d81355c15612d386c61f9ddd3922d4304822a546";
- };
- };
- "indexes-of-1.0.1" = {
- name = "indexes-of";
- packageName = "indexes-of";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz";
- sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
- };
- };
- "inflight-1.0.6" = {
- name = "inflight";
- packageName = "inflight";
- version = "1.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
- sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
- };
- };
- "inherits-2.0.1" = {
- name = "inherits";
- packageName = "inherits";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
- sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
- };
- };
- "inherits-2.0.3" = {
- name = "inherits";
- packageName = "inherits";
- version = "2.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
- sha1 = "633c2c83e3da42a502f52466022480f4208261de";
- };
- };
- "inherits-2.0.4" = {
- name = "inherits";
- packageName = "inherits";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
- sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
- };
- };
- "ini-1.3.5" = {
- name = "ini";
- packageName = "ini";
- version = "1.3.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";
- sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==";
- };
- };
- "invariant-2.2.4" = {
- name = "invariant";
- packageName = "invariant";
- version = "2.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz";
- sha512 = "phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==";
- };
- };
- "is-absolute-url-2.1.0" = {
- name = "is-absolute-url";
- packageName = "is-absolute-url";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz";
- sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6";
- };
- };
- "is-absolute-url-3.0.3" = {
- name = "is-absolute-url";
- packageName = "is-absolute-url";
- version = "3.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz";
- sha512 = "opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==";
- };
- };
- "is-accessor-descriptor-0.1.6" = {
- name = "is-accessor-descriptor";
- packageName = "is-accessor-descriptor";
- version = "0.1.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
- sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
- };
- };
- "is-accessor-descriptor-1.0.0" = {
- name = "is-accessor-descriptor";
- packageName = "is-accessor-descriptor";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
- sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==";
- };
- };
- "is-arrayish-0.2.1" = {
- name = "is-arrayish";
- packageName = "is-arrayish";
- version = "0.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
- sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
- };
- };
- "is-arrayish-0.3.2" = {
- name = "is-arrayish";
- packageName = "is-arrayish";
- version = "0.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz";
- sha512 = "eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==";
- };
- };
- "is-binary-path-1.0.1" = {
- name = "is-binary-path";
- packageName = "is-binary-path";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz";
- sha1 = "75f16642b480f187a711c814161fd3a4a7655898";
- };
- };
- "is-buffer-1.1.6" = {
- name = "is-buffer";
- packageName = "is-buffer";
- version = "1.1.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
- sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
- };
- };
- "is-callable-1.1.5" = {
- name = "is-callable";
- packageName = "is-callable";
- version = "1.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz";
- sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==";
- };
- };
- "is-color-stop-1.1.0" = {
- name = "is-color-stop";
- packageName = "is-color-stop";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz";
- sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345";
- };
- };
- "is-data-descriptor-0.1.4" = {
- name = "is-data-descriptor";
- packageName = "is-data-descriptor";
- version = "0.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
- sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
- };
- };
- "is-data-descriptor-1.0.0" = {
- name = "is-data-descriptor";
- packageName = "is-data-descriptor";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
- sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==";
- };
- };
- "is-date-object-1.0.2" = {
- name = "is-date-object";
- packageName = "is-date-object";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz";
- sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==";
- };
- };
- "is-descriptor-0.1.6" = {
- name = "is-descriptor";
- packageName = "is-descriptor";
- version = "0.1.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz";
- sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==";
- };
- };
- "is-descriptor-1.0.2" = {
- name = "is-descriptor";
- packageName = "is-descriptor";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz";
- sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==";
- };
- };
- "is-directory-0.3.1" = {
- name = "is-directory";
- packageName = "is-directory";
- version = "0.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz";
- sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1";
- };
- };
- "is-extendable-0.1.1" = {
- name = "is-extendable";
- packageName = "is-extendable";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz";
- sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
- };
- };
- "is-extendable-1.0.1" = {
- name = "is-extendable";
- packageName = "is-extendable";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz";
- sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==";
- };
- };
- "is-extglob-2.1.1" = {
- name = "is-extglob";
- packageName = "is-extglob";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
- sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
- };
- };
- "is-fullwidth-code-point-2.0.0" = {
- name = "is-fullwidth-code-point";
- packageName = "is-fullwidth-code-point";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
- sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
- };
- };
- "is-glob-3.1.0" = {
- name = "is-glob";
- packageName = "is-glob";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz";
- sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a";
- };
- };
- "is-glob-4.0.1" = {
- name = "is-glob";
- packageName = "is-glob";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
- sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
- };
- };
- "is-html-1.1.0" = {
- name = "is-html";
- packageName = "is-html";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz";
- sha1 = "e04f1c18d39485111396f9a0273eab51af218464";
- };
- };
- "is-number-3.0.0" = {
- name = "is-number";
- packageName = "is-number";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz";
- sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
- };
- };
- "is-obj-2.0.0" = {
- name = "is-obj";
- packageName = "is-obj";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz";
- sha512 = "drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==";
- };
- };
- "is-plain-object-2.0.4" = {
- name = "is-plain-object";
- packageName = "is-plain-object";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
- sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
- };
- };
- "is-regex-1.0.5" = {
- name = "is-regex";
- packageName = "is-regex";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz";
- sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==";
- };
- };
- "is-resolvable-1.1.0" = {
- name = "is-resolvable";
- packageName = "is-resolvable";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz";
- sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==";
- };
- };
- "is-svg-3.0.0" = {
- name = "is-svg";
- packageName = "is-svg";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz";
- sha512 = "gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==";
- };
- };
- "is-symbol-1.0.3" = {
- name = "is-symbol";
- packageName = "is-symbol";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz";
- sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==";
- };
- };
- "is-typedarray-1.0.0" = {
- name = "is-typedarray";
- packageName = "is-typedarray";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
- sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
- };
- };
- "is-url-1.2.4" = {
- name = "is-url";
- packageName = "is-url";
- version = "1.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz";
- sha512 = "ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==";
- };
- };
- "is-windows-1.0.2" = {
- name = "is-windows";
- packageName = "is-windows";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz";
- sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==";
- };
- };
- "is-wsl-1.1.0" = {
- name = "is-wsl";
- packageName = "is-wsl";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz";
- sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d";
- };
- };
- "isarray-1.0.0" = {
- name = "isarray";
- packageName = "isarray";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
- sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
- };
- };
- "isarray-2.0.5" = {
- name = "isarray";
- packageName = "isarray";
- version = "2.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz";
- sha512 = "xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==";
- };
- };
- "isexe-2.0.0" = {
- name = "isexe";
- packageName = "isexe";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
- sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
- };
- };
- "isobject-2.1.0" = {
- name = "isobject";
- packageName = "isobject";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz";
- sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
- };
- };
- "isobject-3.0.1" = {
- name = "isobject";
- packageName = "isobject";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
- sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
- };
- };
- "isstream-0.1.2" = {
- name = "isstream";
- packageName = "isstream";
- version = "0.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
- sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
- };
- };
- "js-beautify-1.11.0" = {
- name = "js-beautify";
- packageName = "js-beautify";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz";
- sha512 = "a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==";
- };
- };
- "js-levenshtein-1.1.6" = {
- name = "js-levenshtein";
- packageName = "js-levenshtein";
- version = "1.1.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz";
- sha512 = "X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==";
- };
- };
- "js-tokens-4.0.0" = {
- name = "js-tokens";
- packageName = "js-tokens";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz";
- sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
- };
- };
- "js-yaml-3.13.1" = {
- name = "js-yaml";
- packageName = "js-yaml";
- version = "3.13.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz";
- sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==";
- };
- };
- "jsbn-0.1.1" = {
- name = "jsbn";
- packageName = "jsbn";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
- sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
- };
- };
- "jsdom-14.1.0" = {
- name = "jsdom";
- packageName = "jsdom";
- version = "14.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz";
- sha512 = "O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==";
- };
- };
- "jsesc-0.5.0" = {
- name = "jsesc";
- packageName = "jsesc";
- version = "0.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz";
- sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
- };
- };
- "jsesc-2.5.2" = {
- name = "jsesc";
- packageName = "jsesc";
- version = "2.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz";
- sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==";
- };
- };
- "json-parse-better-errors-1.0.2" = {
- name = "json-parse-better-errors";
- packageName = "json-parse-better-errors";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
- sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
- };
- };
- "json-schema-0.2.3" = {
- name = "json-schema";
- packageName = "json-schema";
- version = "0.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
- sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
- };
- };
- "json-schema-traverse-0.4.1" = {
- name = "json-schema-traverse";
- packageName = "json-schema-traverse";
- version = "0.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
- sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
- };
- };
- "json-stringify-safe-5.0.1" = {
- name = "json-stringify-safe";
- packageName = "json-stringify-safe";
- version = "5.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
- sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
- };
- };
- "json5-1.0.1" = {
- name = "json5";
- packageName = "json5";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz";
- sha512 = "aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==";
- };
- };
- "json5-2.1.3" = {
- name = "json5";
- packageName = "json5";
- version = "2.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz";
- sha512 = "KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==";
- };
- };
- "jsprim-1.4.1" = {
- name = "jsprim";
- packageName = "jsprim";
- version = "1.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
- sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
- };
- };
- "kind-of-3.2.2" = {
- name = "kind-of";
- packageName = "kind-of";
- version = "3.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";
- sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
- };
- };
- "kind-of-4.0.0" = {
- name = "kind-of";
- packageName = "kind-of";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz";
- sha1 = "20813df3d712928b207378691a45066fae72dd57";
- };
- };
- "kind-of-5.1.0" = {
- name = "kind-of";
- packageName = "kind-of";
- version = "5.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz";
- sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==";
- };
- };
- "kind-of-6.0.3" = {
- name = "kind-of";
- packageName = "kind-of";
- version = "6.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";
- sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
- };
- };
- "levn-0.3.0" = {
- name = "levn";
- packageName = "levn";
- version = "0.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
- sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
- };
- };
- "locate-path-2.0.0" = {
- name = "locate-path";
- packageName = "locate-path";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz";
- sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
- };
- };
- "locate-path-3.0.0" = {
- name = "locate-path";
- packageName = "locate-path";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz";
- sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==";
- };
- };
- "lodash-4.17.15" = {
- name = "lodash";
- packageName = "lodash";
- version = "4.17.15";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz";
- sha512 = "8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==";
- };
- };
- "lodash.clone-4.5.0" = {
- name = "lodash.clone";
- packageName = "lodash.clone";
- version = "4.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz";
- sha1 = "195870450f5a13192478df4bc3d23d2dea1907b6";
- };
- };
- "lodash.memoize-4.1.2" = {
- name = "lodash.memoize";
- packageName = "lodash.memoize";
- version = "4.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
- sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
- };
- };
- "lodash.sortby-4.7.0" = {
- name = "lodash.sortby";
- packageName = "lodash.sortby";
- version = "4.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz";
- sha1 = "edd14c824e2cc9c1e0b0a1b42bb5210516a42438";
- };
- };
- "lodash.uniq-4.5.0" = {
- name = "lodash.uniq";
- packageName = "lodash.uniq";
- version = "4.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
- sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
- };
- };
- "log-symbols-2.2.0" = {
- name = "log-symbols";
- packageName = "log-symbols";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz";
- sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==";
- };
- };
- "loose-envify-1.4.0" = {
- name = "loose-envify";
- packageName = "loose-envify";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz";
- sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==";
- };
- };
- "lru-cache-4.1.5" = {
- name = "lru-cache";
- packageName = "lru-cache";
- version = "4.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
- sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
- };
- };
- "magic-string-0.22.5" = {
- name = "magic-string";
- packageName = "magic-string";
- version = "0.22.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz";
- sha512 = "oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==";
- };
- };
- "map-cache-0.2.2" = {
- name = "map-cache";
- packageName = "map-cache";
- version = "0.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz";
- sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
- };
- };
- "map-visit-1.0.0" = {
- name = "map-visit";
- packageName = "map-visit";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz";
- sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
- };
- };
- "md5.js-1.3.5" = {
- name = "md5.js";
- packageName = "md5.js";
- version = "1.3.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz";
- sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==";
- };
- };
- "mdn-data-2.0.4" = {
- name = "mdn-data";
- packageName = "mdn-data";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz";
- sha512 = "iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==";
- };
- };
- "mdn-data-2.0.6" = {
- name = "mdn-data";
- packageName = "mdn-data";
- version = "2.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz";
- sha512 = "rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==";
- };
- };
- "merge-source-map-1.0.4" = {
- name = "merge-source-map";
- packageName = "merge-source-map";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz";
- sha1 = "a5de46538dae84d4114cc5ea02b4772a6346701f";
- };
- };
- "merge2-1.3.0" = {
- name = "merge2";
- packageName = "merge2";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz";
- sha512 = "2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==";
- };
- };
- "micromatch-3.1.10" = {
- name = "micromatch";
- packageName = "micromatch";
- version = "3.1.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz";
- sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==";
- };
- };
- "miller-rabin-4.0.1" = {
- name = "miller-rabin";
- packageName = "miller-rabin";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz";
- sha512 = "115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==";
- };
- };
- "mime-1.6.0" = {
- name = "mime";
- packageName = "mime";
- version = "1.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
- sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
- };
- };
- "mime-db-1.44.0" = {
- name = "mime-db";
- packageName = "mime-db";
- version = "1.44.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz";
- sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==";
- };
- };
- "mime-types-2.1.27" = {
- name = "mime-types";
- packageName = "mime-types";
- version = "2.1.27";
- src = fetchurl {
- url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz";
- sha512 = "JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==";
- };
- };
- "mimic-fn-1.2.0" = {
- name = "mimic-fn";
- packageName = "mimic-fn";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz";
- sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==";
- };
- };
- "minimalistic-assert-1.0.1" = {
- name = "minimalistic-assert";
- packageName = "minimalistic-assert";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
- sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==";
- };
- };
- "minimalistic-crypto-utils-1.0.1" = {
- name = "minimalistic-crypto-utils";
- packageName = "minimalistic-crypto-utils";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz";
- sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a";
- };
- };
- "minimatch-3.0.4" = {
- name = "minimatch";
- packageName = "minimatch";
- version = "3.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
- sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
- };
- };
- "minimist-1.2.5" = {
- name = "minimist";
- packageName = "minimist";
- version = "1.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
- sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
- };
- };
- "mixin-deep-1.3.2" = {
- name = "mixin-deep";
- packageName = "mixin-deep";
- version = "1.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz";
- sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==";
- };
- };
- "mkdirp-0.5.5" = {
- name = "mkdirp";
- packageName = "mkdirp";
- version = "0.5.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
- sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
- };
- };
- "mkdirp-1.0.4" = {
- name = "mkdirp";
- packageName = "mkdirp";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz";
- sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==";
- };
- };
- "ms-2.0.0" = {
- name = "ms";
- packageName = "ms";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
- sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
- };
- };
- "ms-2.1.1" = {
- name = "ms";
- packageName = "ms";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz";
- sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==";
- };
- };
- "ms-2.1.2" = {
- name = "ms";
- packageName = "ms";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
- sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
- };
- };
- "nan-2.14.1" = {
- name = "nan";
- packageName = "nan";
- version = "2.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz";
- sha512 = "isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==";
- };
- };
- "nanomatch-1.2.13" = {
- name = "nanomatch";
- packageName = "nanomatch";
- version = "1.2.13";
- src = fetchurl {
- url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz";
- sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==";
- };
- };
- "nice-try-1.0.5" = {
- name = "nice-try";
- packageName = "nice-try";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz";
- sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
- };
- };
- "node-addon-api-1.7.1" = {
- name = "node-addon-api";
- packageName = "node-addon-api";
- version = "1.7.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz";
- sha512 = "2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==";
- };
- };
- "node-elm-compiler-5.0.4" = {
- name = "node-elm-compiler";
- packageName = "node-elm-compiler";
- version = "5.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz";
- sha512 = "VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==";
- };
- };
- "node-forge-0.7.6" = {
- name = "node-forge";
- packageName = "node-forge";
- version = "0.7.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz";
- sha512 = "sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==";
- };
- };
- "node-libs-browser-2.2.1" = {
- name = "node-libs-browser";
- packageName = "node-libs-browser";
- version = "2.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz";
- sha512 = "h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==";
- };
- };
- "node-releases-1.1.53" = {
- name = "node-releases";
- packageName = "node-releases";
- version = "1.1.53";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz";
- sha512 = "wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==";
- };
- };
- "nopt-4.0.3" = {
- name = "nopt";
- packageName = "nopt";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz";
- sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==";
- };
- };
- "normalize-html-whitespace-1.0.0" = {
- name = "normalize-html-whitespace";
- packageName = "normalize-html-whitespace";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz";
- sha512 = "9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==";
- };
- };
- "normalize-path-2.1.1" = {
- name = "normalize-path";
- packageName = "normalize-path";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz";
- sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9";
- };
- };
- "normalize-path-3.0.0" = {
- name = "normalize-path";
- packageName = "normalize-path";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
- sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
- };
- };
- "normalize-url-3.3.0" = {
- name = "normalize-url";
- packageName = "normalize-url";
- version = "3.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz";
- sha512 = "U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==";
- };
- };
- "nth-check-1.0.2" = {
- name = "nth-check";
- packageName = "nth-check";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz";
- sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==";
- };
- };
- "nwsapi-2.2.0" = {
- name = "nwsapi";
- packageName = "nwsapi";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz";
- sha512 = "h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==";
- };
- };
- "oauth-sign-0.9.0" = {
- name = "oauth-sign";
- packageName = "oauth-sign";
- version = "0.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
- sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
- };
- };
- "object-assign-4.1.1" = {
- name = "object-assign";
- packageName = "object-assign";
- version = "4.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
- sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
- };
- };
- "object-copy-0.1.0" = {
- name = "object-copy";
- packageName = "object-copy";
- version = "0.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz";
- sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
- };
- };
- "object-inspect-1.4.1" = {
- name = "object-inspect";
- packageName = "object-inspect";
- version = "1.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz";
- sha512 = "wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==";
- };
- };
- "object-inspect-1.7.0" = {
- name = "object-inspect";
- packageName = "object-inspect";
- version = "1.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz";
- sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==";
- };
- };
- "object-keys-1.1.1" = {
- name = "object-keys";
- packageName = "object-keys";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
- sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
- };
- };
- "object-visit-1.0.1" = {
- name = "object-visit";
- packageName = "object-visit";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz";
- sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
- };
- };
- "object.assign-4.1.0" = {
- name = "object.assign";
- packageName = "object.assign";
- version = "4.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz";
- sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==";
- };
- };
- "object.getownpropertydescriptors-2.1.0" = {
- name = "object.getownpropertydescriptors";
- packageName = "object.getownpropertydescriptors";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz";
- sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==";
- };
- };
- "object.pick-1.3.0" = {
- name = "object.pick";
- packageName = "object.pick";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz";
- sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
- };
- };
- "object.values-1.1.1" = {
- name = "object.values";
- packageName = "object.values";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz";
- sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==";
- };
- };
- "on-finished-2.3.0" = {
- name = "on-finished";
- packageName = "on-finished";
- version = "2.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz";
- sha1 = "20f1336481b083cd75337992a16971aa2d906947";
- };
- };
- "once-1.4.0" = {
- name = "once";
- packageName = "once";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
- sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
- };
- };
- "onetime-2.0.1" = {
- name = "onetime";
- packageName = "onetime";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz";
- sha1 = "067428230fd67443b2794b22bba528b6867962d4";
- };
- };
- "opn-5.5.0" = {
- name = "opn";
- packageName = "opn";
- version = "5.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz";
- sha512 = "PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==";
- };
- };
- "optionator-0.8.3" = {
- name = "optionator";
- packageName = "optionator";
- version = "0.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
- sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
- };
- };
- "ora-2.1.0" = {
- name = "ora";
- packageName = "ora";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz";
- sha512 = "hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==";
- };
- };
- "os-browserify-0.3.0" = {
- name = "os-browserify";
- packageName = "os-browserify";
- version = "0.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz";
- sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27";
- };
- };
- "os-homedir-1.0.2" = {
- name = "os-homedir";
- packageName = "os-homedir";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
- sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
- };
- };
- "os-tmpdir-1.0.2" = {
- name = "os-tmpdir";
- packageName = "os-tmpdir";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
- sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
- };
- };
- "osenv-0.1.5" = {
- name = "osenv";
- packageName = "osenv";
- version = "0.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
- sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
- };
- };
- "p-limit-1.3.0" = {
- name = "p-limit";
- packageName = "p-limit";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz";
- sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==";
- };
- };
- "p-limit-2.3.0" = {
- name = "p-limit";
- packageName = "p-limit";
- version = "2.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz";
- sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
- };
- };
- "p-locate-2.0.0" = {
- name = "p-locate";
- packageName = "p-locate";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz";
- sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
- };
- };
- "p-locate-3.0.0" = {
- name = "p-locate";
- packageName = "p-locate";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz";
- sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==";
- };
- };
- "p-try-1.0.0" = {
- name = "p-try";
- packageName = "p-try";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz";
- sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
- };
- };
- "p-try-2.2.0" = {
- name = "p-try";
- packageName = "p-try";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
- sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
- };
- };
- "pako-0.2.9" = {
- name = "pako";
- packageName = "pako";
- version = "0.2.9";
- src = fetchurl {
- url = "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz";
- sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75";
- };
- };
- "pako-1.0.11" = {
- name = "pako";
- packageName = "pako";
- version = "1.0.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz";
- sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==";
- };
- };
- "parcel-bundler-1.12.3" = {
- name = "parcel-bundler";
- packageName = "parcel-bundler";
- version = "1.12.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz";
- sha512 = "8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A==";
- };
- };
- "parse-asn1-5.1.5" = {
- name = "parse-asn1";
- packageName = "parse-asn1";
- version = "5.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz";
- sha512 = "jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==";
- };
- };
- "parse-json-4.0.0" = {
- name = "parse-json";
- packageName = "parse-json";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz";
- sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0";
- };
- };
- "parse5-5.1.0" = {
- name = "parse5";
- packageName = "parse5";
- version = "5.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz";
- sha512 = "fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==";
- };
- };
- "parseurl-1.3.3" = {
- name = "parseurl";
- packageName = "parseurl";
- version = "1.3.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz";
- sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==";
- };
- };
- "pascalcase-0.1.1" = {
- name = "pascalcase";
- packageName = "pascalcase";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz";
- sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
- };
- };
- "path-browserify-0.0.1" = {
- name = "path-browserify";
- packageName = "path-browserify";
- version = "0.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz";
- sha512 = "BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==";
- };
- };
- "path-dirname-1.0.2" = {
- name = "path-dirname";
- packageName = "path-dirname";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz";
- sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0";
- };
- };
- "path-exists-3.0.0" = {
- name = "path-exists";
- packageName = "path-exists";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz";
- sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
- };
- };
- "path-is-absolute-1.0.1" = {
- name = "path-is-absolute";
- packageName = "path-is-absolute";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
- sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
- };
- };
- "path-key-2.0.1" = {
- name = "path-key";
- packageName = "path-key";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
- sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
- };
- };
- "path-parse-1.0.6" = {
- name = "path-parse";
- packageName = "path-parse";
- version = "1.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
- sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
- };
- };
- "pbkdf2-3.0.17" = {
- name = "pbkdf2";
- packageName = "pbkdf2";
- version = "3.0.17";
- src = fetchurl {
- url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz";
- sha512 = "U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==";
- };
- };
- "performance-now-2.1.0" = {
- name = "performance-now";
- packageName = "performance-now";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
- sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
- };
- };
- "physical-cpu-count-2.0.0" = {
- name = "physical-cpu-count";
- packageName = "physical-cpu-count";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz";
- sha1 = "18de2f97e4bf7a9551ad7511942b5496f7aba660";
- };
- };
- "pkg-up-2.0.0" = {
- name = "pkg-up";
- packageName = "pkg-up";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz";
- sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f";
- };
- };
- "pn-1.1.0" = {
- name = "pn";
- packageName = "pn";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz";
- sha512 = "2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==";
- };
- };
- "posix-character-classes-0.1.1" = {
- name = "posix-character-classes";
- packageName = "posix-character-classes";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
- sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
- };
- };
- "postcss-6.0.1" = {
- name = "postcss";
- packageName = "postcss";
- version = "6.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz";
- sha1 = "000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2";
- };
- };
- "postcss-6.0.23" = {
- name = "postcss";
- packageName = "postcss";
- version = "6.0.23";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz";
- sha512 = "soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==";
- };
- };
- "postcss-7.0.27" = {
- name = "postcss";
- packageName = "postcss";
- version = "7.0.27";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz";
- sha512 = "WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==";
- };
- };
- "postcss-calc-7.0.2" = {
- name = "postcss-calc";
- packageName = "postcss-calc";
- version = "7.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz";
- sha512 = "rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==";
- };
- };
- "postcss-colormin-4.0.3" = {
- name = "postcss-colormin";
- packageName = "postcss-colormin";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz";
- sha512 = "WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==";
- };
- };
- "postcss-convert-values-4.0.1" = {
- name = "postcss-convert-values";
- packageName = "postcss-convert-values";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz";
- sha512 = "Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==";
- };
- };
- "postcss-discard-comments-4.0.2" = {
- name = "postcss-discard-comments";
- packageName = "postcss-discard-comments";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz";
- sha512 = "RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==";
- };
- };
- "postcss-discard-duplicates-4.0.2" = {
- name = "postcss-discard-duplicates";
- packageName = "postcss-discard-duplicates";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz";
- sha512 = "ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==";
- };
- };
- "postcss-discard-empty-4.0.1" = {
- name = "postcss-discard-empty";
- packageName = "postcss-discard-empty";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz";
- sha512 = "B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==";
- };
- };
- "postcss-discard-overridden-4.0.1" = {
- name = "postcss-discard-overridden";
- packageName = "postcss-discard-overridden";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz";
- sha512 = "IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==";
- };
- };
- "postcss-merge-longhand-4.0.11" = {
- name = "postcss-merge-longhand";
- packageName = "postcss-merge-longhand";
- version = "4.0.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz";
- sha512 = "alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==";
- };
- };
- "postcss-merge-rules-4.0.3" = {
- name = "postcss-merge-rules";
- packageName = "postcss-merge-rules";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz";
- sha512 = "U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==";
- };
- };
- "postcss-minify-font-values-4.0.2" = {
- name = "postcss-minify-font-values";
- packageName = "postcss-minify-font-values";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz";
- sha512 = "j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==";
- };
- };
- "postcss-minify-gradients-4.0.2" = {
- name = "postcss-minify-gradients";
- packageName = "postcss-minify-gradients";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz";
- sha512 = "qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==";
- };
- };
- "postcss-minify-params-4.0.2" = {
- name = "postcss-minify-params";
- packageName = "postcss-minify-params";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz";
- sha512 = "G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==";
- };
- };
- "postcss-minify-selectors-4.0.2" = {
- name = "postcss-minify-selectors";
- packageName = "postcss-minify-selectors";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz";
- sha512 = "D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==";
- };
- };
- "postcss-modules-extract-imports-1.1.0" = {
- name = "postcss-modules-extract-imports";
- packageName = "postcss-modules-extract-imports";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz";
- sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb";
- };
- };
- "postcss-modules-local-by-default-1.2.0" = {
- name = "postcss-modules-local-by-default";
- packageName = "postcss-modules-local-by-default";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz";
- sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069";
- };
- };
- "postcss-modules-scope-1.1.0" = {
- name = "postcss-modules-scope";
- packageName = "postcss-modules-scope";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz";
- sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90";
- };
- };
- "postcss-modules-values-1.3.0" = {
- name = "postcss-modules-values";
- packageName = "postcss-modules-values";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz";
- sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20";
- };
- };
- "postcss-normalize-charset-4.0.1" = {
- name = "postcss-normalize-charset";
- packageName = "postcss-normalize-charset";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz";
- sha512 = "gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==";
- };
- };
- "postcss-normalize-display-values-4.0.2" = {
- name = "postcss-normalize-display-values";
- packageName = "postcss-normalize-display-values";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz";
- sha512 = "3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==";
- };
- };
- "postcss-normalize-positions-4.0.2" = {
- name = "postcss-normalize-positions";
- packageName = "postcss-normalize-positions";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz";
- sha512 = "Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==";
- };
- };
- "postcss-normalize-repeat-style-4.0.2" = {
- name = "postcss-normalize-repeat-style";
- packageName = "postcss-normalize-repeat-style";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz";
- sha512 = "qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==";
- };
- };
- "postcss-normalize-string-4.0.2" = {
- name = "postcss-normalize-string";
- packageName = "postcss-normalize-string";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz";
- sha512 = "RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==";
- };
- };
- "postcss-normalize-timing-functions-4.0.2" = {
- name = "postcss-normalize-timing-functions";
- packageName = "postcss-normalize-timing-functions";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz";
- sha512 = "acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==";
- };
- };
- "postcss-normalize-unicode-4.0.1" = {
- name = "postcss-normalize-unicode";
- packageName = "postcss-normalize-unicode";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz";
- sha512 = "od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==";
- };
- };
- "postcss-normalize-url-4.0.1" = {
- name = "postcss-normalize-url";
- packageName = "postcss-normalize-url";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz";
- sha512 = "p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==";
- };
- };
- "postcss-normalize-whitespace-4.0.2" = {
- name = "postcss-normalize-whitespace";
- packageName = "postcss-normalize-whitespace";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz";
- sha512 = "tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==";
- };
- };
- "postcss-ordered-values-4.1.2" = {
- name = "postcss-ordered-values";
- packageName = "postcss-ordered-values";
- version = "4.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz";
- sha512 = "2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==";
- };
- };
- "postcss-reduce-initial-4.0.3" = {
- name = "postcss-reduce-initial";
- packageName = "postcss-reduce-initial";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz";
- sha512 = "gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==";
- };
- };
- "postcss-reduce-transforms-4.0.2" = {
- name = "postcss-reduce-transforms";
- packageName = "postcss-reduce-transforms";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz";
- sha512 = "EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==";
- };
- };
- "postcss-selector-parser-3.1.2" = {
- name = "postcss-selector-parser";
- packageName = "postcss-selector-parser";
- version = "3.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz";
- sha512 = "h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==";
- };
- };
- "postcss-selector-parser-6.0.2" = {
- name = "postcss-selector-parser";
- packageName = "postcss-selector-parser";
- version = "6.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz";
- sha512 = "36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==";
- };
- };
- "postcss-svgo-4.0.2" = {
- name = "postcss-svgo";
- packageName = "postcss-svgo";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz";
- sha512 = "C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==";
- };
- };
- "postcss-unique-selectors-4.0.1" = {
- name = "postcss-unique-selectors";
- packageName = "postcss-unique-selectors";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz";
- sha512 = "+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==";
- };
- };
- "postcss-value-parser-3.3.1" = {
- name = "postcss-value-parser";
- packageName = "postcss-value-parser";
- version = "3.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz";
- sha512 = "pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==";
- };
- };
- "postcss-value-parser-4.0.3" = {
- name = "postcss-value-parser";
- packageName = "postcss-value-parser";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz";
- sha512 = "N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==";
- };
- };
- "posthtml-0.11.6" = {
- name = "posthtml";
- packageName = "posthtml";
- version = "0.11.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz";
- sha512 = "C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==";
- };
- };
- "posthtml-0.12.3" = {
- name = "posthtml";
- packageName = "posthtml";
- version = "0.12.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz";
- sha512 = "Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==";
- };
- };
- "posthtml-parser-0.4.2" = {
- name = "posthtml-parser";
- packageName = "posthtml-parser";
- version = "0.4.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz";
- sha512 = "BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==";
- };
- };
- "posthtml-render-1.2.2" = {
- name = "posthtml-render";
- packageName = "posthtml-render";
- version = "1.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz";
- sha512 = "MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==";
- };
- };
- "prelude-ls-1.1.2" = {
- name = "prelude-ls";
- packageName = "prelude-ls";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
- sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
- };
- };
- "private-0.1.8" = {
- name = "private";
- packageName = "private";
- version = "0.1.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/private/-/private-0.1.8.tgz";
- sha512 = "VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==";
- };
- };
- "process-0.11.10" = {
- name = "process";
- packageName = "process";
- version = "0.11.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz";
- sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
- };
- };
- "process-nextick-args-2.0.1" = {
- name = "process-nextick-args";
- packageName = "process-nextick-args";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
- sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
- };
- };
- "proto-list-1.2.4" = {
- name = "proto-list";
- packageName = "proto-list";
- version = "1.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
- sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
- };
- };
- "pseudomap-1.0.2" = {
- name = "pseudomap";
- packageName = "pseudomap";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
- sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
- };
- };
- "psl-1.8.0" = {
- name = "psl";
- packageName = "psl";
- version = "1.8.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";
- sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==";
- };
- };
- "public-encrypt-4.0.3" = {
- name = "public-encrypt";
- packageName = "public-encrypt";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz";
- sha512 = "zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==";
- };
- };
- "punycode-1.3.2" = {
- name = "punycode";
- packageName = "punycode";
- version = "1.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz";
- sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
- };
- };
- "punycode-1.4.1" = {
- name = "punycode";
- packageName = "punycode";
- version = "1.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
- sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
- };
- };
- "punycode-2.1.1" = {
- name = "punycode";
- packageName = "punycode";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
- sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
- };
- };
- "purgecss-1.4.2" = {
- name = "purgecss";
- packageName = "purgecss";
- version = "1.4.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz";
- sha512 = "hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==";
- };
- };
- "q-1.5.1" = {
- name = "q";
- packageName = "q";
- version = "1.5.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz";
- sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
- };
- };
- "qs-6.5.2" = {
- name = "qs";
- packageName = "qs";
- version = "6.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
- sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
- };
- };
- "querystring-0.2.0" = {
- name = "querystring";
- packageName = "querystring";
- version = "0.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz";
- sha1 = "b209849203bb25df820da756e747005878521620";
- };
- };
- "querystring-es3-0.2.1" = {
- name = "querystring-es3";
- packageName = "querystring-es3";
- version = "0.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz";
- sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
- };
- };
- "quote-stream-1.0.2" = {
- name = "quote-stream";
- packageName = "quote-stream";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz";
- sha1 = "84963f8c9c26b942e153feeb53aae74652b7e0b2";
- };
- };
- "randombytes-2.1.0" = {
- name = "randombytes";
- packageName = "randombytes";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
- sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
- };
- };
- "randomfill-1.0.4" = {
- name = "randomfill";
- packageName = "randomfill";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz";
- sha512 = "87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==";
- };
- };
- "range-parser-1.2.1" = {
- name = "range-parser";
- packageName = "range-parser";
- version = "1.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz";
- sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==";
- };
- };
- "readable-stream-2.3.7" = {
- name = "readable-stream";
- packageName = "readable-stream";
- version = "2.3.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";
- sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
- };
- };
- "readable-stream-3.6.0" = {
- name = "readable-stream";
- packageName = "readable-stream";
- version = "3.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
- sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
- };
- };
- "readdirp-2.2.1" = {
- name = "readdirp";
- packageName = "readdirp";
- version = "2.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz";
- sha512 = "1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==";
- };
- };
- "regenerate-1.4.0" = {
- name = "regenerate";
- packageName = "regenerate";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz";
- sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==";
- };
- };
- "regenerate-unicode-properties-8.2.0" = {
- name = "regenerate-unicode-properties";
- packageName = "regenerate-unicode-properties";
- version = "8.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz";
- sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==";
- };
- };
- "regenerator-runtime-0.11.1" = {
- name = "regenerator-runtime";
- packageName = "regenerator-runtime";
- version = "0.11.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
- sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==";
- };
- };
- "regenerator-runtime-0.12.1" = {
- name = "regenerator-runtime";
- packageName = "regenerator-runtime";
- version = "0.12.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz";
- sha512 = "odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==";
- };
- };
- "regenerator-runtime-0.13.5" = {
- name = "regenerator-runtime";
- packageName = "regenerator-runtime";
- version = "0.13.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz";
- sha512 = "ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==";
- };
- };
- "regenerator-transform-0.14.4" = {
- name = "regenerator-transform";
- packageName = "regenerator-transform";
- version = "0.14.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz";
- sha512 = "EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==";
- };
- };
- "regex-not-1.0.2" = {
- name = "regex-not";
- packageName = "regex-not";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz";
- sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==";
- };
- };
- "regexpu-core-4.7.0" = {
- name = "regexpu-core";
- packageName = "regexpu-core";
- version = "4.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz";
- sha512 = "TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==";
- };
- };
- "regjsgen-0.5.1" = {
- name = "regjsgen";
- packageName = "regjsgen";
- version = "0.5.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz";
- sha512 = "5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==";
- };
- };
- "regjsparser-0.6.4" = {
- name = "regjsparser";
- packageName = "regjsparser";
- version = "0.6.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz";
- sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==";
- };
- };
- "remove-trailing-separator-1.1.0" = {
- name = "remove-trailing-separator";
- packageName = "remove-trailing-separator";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
- sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef";
- };
- };
- "repeat-element-1.1.3" = {
- name = "repeat-element";
- packageName = "repeat-element";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz";
- sha512 = "ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==";
- };
- };
- "repeat-string-1.6.1" = {
- name = "repeat-string";
- packageName = "repeat-string";
- version = "1.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz";
- sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
- };
- };
- "request-2.88.2" = {
- name = "request";
- packageName = "request";
- version = "2.88.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
- sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
- };
- };
- "request-promise-core-1.1.3" = {
- name = "request-promise-core";
- packageName = "request-promise-core";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz";
- sha512 = "QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==";
- };
- };
- "request-promise-native-1.0.8" = {
- name = "request-promise-native";
- packageName = "request-promise-native";
- version = "1.0.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz";
- sha512 = "dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==";
- };
- };
- "require-directory-2.1.1" = {
- name = "require-directory";
- packageName = "require-directory";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
- sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
- };
- };
- "require-main-filename-2.0.0" = {
- name = "require-main-filename";
- packageName = "require-main-filename";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz";
- sha512 = "NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==";
- };
- };
- "resolve-1.17.0" = {
- name = "resolve";
- packageName = "resolve";
- version = "1.17.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz";
- sha512 = "ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==";
- };
- };
- "resolve-from-3.0.0" = {
- name = "resolve-from";
- packageName = "resolve-from";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz";
- sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748";
- };
- };
- "resolve-url-0.2.1" = {
- name = "resolve-url";
- packageName = "resolve-url";
- version = "0.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz";
- sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
- };
- };
- "restore-cursor-2.0.0" = {
- name = "restore-cursor";
- packageName = "restore-cursor";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz";
- sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf";
- };
- };
- "ret-0.1.15" = {
- name = "ret";
- packageName = "ret";
- version = "0.1.15";
- src = fetchurl {
- url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz";
- sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==";
- };
- };
- "rgb-regex-1.0.1" = {
- name = "rgb-regex";
- packageName = "rgb-regex";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz";
- sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1";
- };
- };
- "rgba-regex-1.0.0" = {
- name = "rgba-regex";
- packageName = "rgba-regex";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz";
- sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3";
- };
- };
- "rimraf-2.6.3" = {
- name = "rimraf";
- packageName = "rimraf";
- version = "2.6.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
- sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
- };
- };
- "ripemd160-2.0.2" = {
- name = "ripemd160";
- packageName = "ripemd160";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz";
- sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==";
- };
- };
- "safe-buffer-5.1.2" = {
- name = "safe-buffer";
- packageName = "safe-buffer";
- version = "5.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
- sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
- };
- };
- "safe-regex-1.1.0" = {
- name = "safe-regex";
- packageName = "safe-regex";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz";
- sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
- };
- };
- "safer-buffer-2.1.2" = {
- name = "safer-buffer";
- packageName = "safer-buffer";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
- sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
- };
- };
- "safer-eval-1.3.6" = {
- name = "safer-eval";
- packageName = "safer-eval";
- version = "1.3.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz";
- sha512 = "DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw==";
- };
- };
- "sax-1.2.4" = {
- name = "sax";
- packageName = "sax";
- version = "1.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
- sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
- };
- };
- "saxes-3.1.11" = {
- name = "saxes";
- packageName = "saxes";
- version = "3.1.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz";
- sha512 = "Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==";
- };
- };
- "semver-5.7.1" = {
- name = "semver";
- packageName = "semver";
- version = "5.7.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
- sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
- };
- };
- "send-0.17.1" = {
- name = "send";
- packageName = "send";
- version = "0.17.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz";
- sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==";
- };
- };
- "serialize-to-js-1.2.2" = {
- name = "serialize-to-js";
- packageName = "serialize-to-js";
- version = "1.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz";
- sha512 = "mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==";
- };
- };
- "serve-static-1.14.1" = {
- name = "serve-static";
- packageName = "serve-static";
- version = "1.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz";
- sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==";
- };
- };
- "set-blocking-2.0.0" = {
- name = "set-blocking";
- packageName = "set-blocking";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
- sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
- };
- };
- "set-value-2.0.1" = {
- name = "set-value";
- packageName = "set-value";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz";
- sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==";
- };
- };
- "setimmediate-1.0.5" = {
- name = "setimmediate";
- packageName = "setimmediate";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz";
- sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285";
- };
- };
- "setprototypeof-1.1.1" = {
- name = "setprototypeof";
- packageName = "setprototypeof";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz";
- sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==";
- };
- };
- "sha.js-2.4.11" = {
- name = "sha.js";
- packageName = "sha.js";
- version = "2.4.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz";
- sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==";
- };
- };
- "shallow-copy-0.0.1" = {
- name = "shallow-copy";
- packageName = "shallow-copy";
- version = "0.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz";
- sha1 = "415f42702d73d810330292cc5ee86eae1a11a170";
- };
- };
- "shebang-command-1.2.0" = {
- name = "shebang-command";
- packageName = "shebang-command";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
- sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
- };
- };
- "shebang-regex-1.0.0" = {
- name = "shebang-regex";
- packageName = "shebang-regex";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
- sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
- };
- };
- "sigmund-1.0.1" = {
- name = "sigmund";
- packageName = "sigmund";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
- sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
- };
- };
- "signal-exit-3.0.3" = {
- name = "signal-exit";
- packageName = "signal-exit";
- version = "3.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz";
- sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==";
- };
- };
- "simple-swizzle-0.2.2" = {
- name = "simple-swizzle";
- packageName = "simple-swizzle";
- version = "0.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz";
- sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a";
- };
- };
- "snapdragon-0.8.2" = {
- name = "snapdragon";
- packageName = "snapdragon";
- version = "0.8.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz";
- sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==";
- };
- };
- "snapdragon-node-2.1.1" = {
- name = "snapdragon-node";
- packageName = "snapdragon-node";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
- sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==";
- };
- };
- "snapdragon-util-3.0.1" = {
- name = "snapdragon-util";
- packageName = "snapdragon-util";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
- sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==";
- };
- };
- "source-map-0.5.7" = {
- name = "source-map";
- packageName = "source-map";
- version = "0.5.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
- sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
- };
- };
- "source-map-0.6.1" = {
- name = "source-map";
- packageName = "source-map";
- version = "0.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
- sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
- };
- };
- "source-map-resolve-0.5.3" = {
- name = "source-map-resolve";
- packageName = "source-map-resolve";
- version = "0.5.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
- sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==";
- };
- };
- "source-map-support-0.5.19" = {
- name = "source-map-support";
- packageName = "source-map-support";
- version = "0.5.19";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz";
- sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==";
- };
- };
- "source-map-url-0.4.0" = {
- name = "source-map-url";
- packageName = "source-map-url";
- version = "0.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz";
- sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
- };
- };
- "split-string-3.1.0" = {
- name = "split-string";
- packageName = "split-string";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz";
- sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==";
- };
- };
- "sprintf-js-1.0.3" = {
- name = "sprintf-js";
- packageName = "sprintf-js";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
- sha1 = "04e6926f662895354f3dd015203633b857297e2c";
- };
- };
- "sshpk-1.16.1" = {
- name = "sshpk";
- packageName = "sshpk";
- version = "1.16.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
- sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
- };
- };
- "stable-0.1.8" = {
- name = "stable";
- packageName = "stable";
- version = "0.1.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz";
- sha512 = "ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==";
- };
- };
- "static-eval-2.0.5" = {
- name = "static-eval";
- packageName = "static-eval";
- version = "2.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz";
- sha512 = "nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==";
- };
- };
- "static-extend-0.1.2" = {
- name = "static-extend";
- packageName = "static-extend";
- version = "0.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz";
- sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
- };
- };
- "static-module-2.2.5" = {
- name = "static-module";
- packageName = "static-module";
- version = "2.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz";
- sha512 = "D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==";
- };
- };
- "statuses-1.5.0" = {
- name = "statuses";
- packageName = "statuses";
- version = "1.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";
- sha1 = "161c7dac177659fd9811f43771fa99381478628c";
- };
- };
- "stealthy-require-1.1.1" = {
- name = "stealthy-require";
- packageName = "stealthy-require";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz";
- sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b";
- };
- };
- "stream-browserify-2.0.2" = {
- name = "stream-browserify";
- packageName = "stream-browserify";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz";
- sha512 = "nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==";
- };
- };
- "stream-http-2.8.3" = {
- name = "stream-http";
- packageName = "stream-http";
- version = "2.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz";
- sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==";
- };
- };
- "string-width-3.1.0" = {
- name = "string-width";
- packageName = "string-width";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
- sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
- };
- };
- "string.prototype.trimend-1.0.1" = {
- name = "string.prototype.trimend";
- packageName = "string.prototype.trimend";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
- sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==";
- };
- };
- "string.prototype.trimleft-2.1.2" = {
- name = "string.prototype.trimleft";
- packageName = "string.prototype.trimleft";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz";
- sha512 = "gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==";
- };
- };
- "string.prototype.trimright-2.1.2" = {
- name = "string.prototype.trimright";
- packageName = "string.prototype.trimright";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz";
- sha512 = "ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==";
- };
- };
- "string.prototype.trimstart-1.0.1" = {
- name = "string.prototype.trimstart";
- packageName = "string.prototype.trimstart";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
- sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==";
- };
- };
- "string_decoder-1.1.1" = {
- name = "string_decoder";
- packageName = "string_decoder";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
- sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
- };
- };
- "strip-ansi-3.0.1" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
- sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
- };
- };
- "strip-ansi-4.0.0" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
- sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
- };
- };
- "strip-ansi-5.2.0" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "5.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
- sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
- };
- };
- "stylehacks-4.0.3" = {
- name = "stylehacks";
- packageName = "stylehacks";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz";
- sha512 = "7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==";
- };
- };
- "supports-color-2.0.0" = {
- name = "supports-color";
- packageName = "supports-color";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
- sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
- };
- };
- "supports-color-3.2.3" = {
- name = "supports-color";
- packageName = "supports-color";
- version = "3.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz";
- sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6";
- };
- };
- "supports-color-5.5.0" = {
- name = "supports-color";
- packageName = "supports-color";
- version = "5.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
- sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
- };
- };
- "supports-color-6.1.0" = {
- name = "supports-color";
- packageName = "supports-color";
- version = "6.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz";
- sha512 = "qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==";
- };
- };
- "svgo-1.3.2" = {
- name = "svgo";
- packageName = "svgo";
- version = "1.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz";
- sha512 = "yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==";
- };
- };
- "symbol-tree-3.2.4" = {
- name = "symbol-tree";
- packageName = "symbol-tree";
- version = "3.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz";
- sha512 = "9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==";
- };
- };
- "temp-0.9.0" = {
- name = "temp";
- packageName = "temp";
- version = "0.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz";
- sha512 = "YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==";
- };
- };
- "terser-3.17.0" = {
- name = "terser";
- packageName = "terser";
- version = "3.17.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz";
- sha512 = "/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==";
- };
- };
- "terser-4.6.12" = {
- name = "terser";
- packageName = "terser";
- version = "4.6.12";
- src = fetchurl {
- url = "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz";
- sha512 = "fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==";
- };
- };
- "through2-2.0.5" = {
- name = "through2";
- packageName = "through2";
- version = "2.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz";
- sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==";
- };
- };
- "timers-browserify-2.0.11" = {
- name = "timers-browserify";
- packageName = "timers-browserify";
- version = "2.0.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz";
- sha512 = "60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==";
- };
- };
- "timsort-0.3.0" = {
- name = "timsort";
- packageName = "timsort";
- version = "0.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz";
- sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4";
- };
- };
- "tiny-inflate-1.0.3" = {
- name = "tiny-inflate";
- packageName = "tiny-inflate";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz";
- sha512 = "pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==";
- };
- };
- "to-arraybuffer-1.0.1" = {
- name = "to-arraybuffer";
- packageName = "to-arraybuffer";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
- sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
- };
- };
- "to-fast-properties-1.0.3" = {
- name = "to-fast-properties";
- packageName = "to-fast-properties";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz";
- sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47";
- };
- };
- "to-fast-properties-2.0.0" = {
- name = "to-fast-properties";
- packageName = "to-fast-properties";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
- sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
- };
- };
- "to-object-path-0.3.0" = {
- name = "to-object-path";
- packageName = "to-object-path";
- version = "0.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz";
- sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
- };
- };
- "to-regex-3.0.2" = {
- name = "to-regex";
- packageName = "to-regex";
- version = "3.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz";
- sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==";
- };
- };
- "to-regex-range-2.1.1" = {
- name = "to-regex-range";
- packageName = "to-regex-range";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz";
- sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
- };
- };
- "toidentifier-1.0.0" = {
- name = "toidentifier";
- packageName = "toidentifier";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz";
- sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==";
- };
- };
- "tough-cookie-2.5.0" = {
- name = "tough-cookie";
- packageName = "tough-cookie";
- version = "2.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
- sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
- };
- };
- "tr46-1.0.1" = {
- name = "tr46";
- packageName = "tr46";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz";
- sha1 = "a8b13fd6bfd2489519674ccde55ba3693b706d09";
- };
- };
- "trim-right-1.0.1" = {
- name = "trim-right";
- packageName = "trim-right";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz";
- sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003";
- };
- };
- "tty-browserify-0.0.0" = {
- name = "tty-browserify";
- packageName = "tty-browserify";
- version = "0.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz";
- sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6";
- };
- };
- "tunnel-agent-0.6.0" = {
- name = "tunnel-agent";
- packageName = "tunnel-agent";
- version = "0.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
- sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
- };
- };
- "tweetnacl-0.14.5" = {
- name = "tweetnacl";
- packageName = "tweetnacl";
- version = "0.14.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
- sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
- };
- };
- "type-check-0.3.2" = {
- name = "type-check";
- packageName = "type-check";
- version = "0.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
- sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
- };
- };
- "typedarray-0.0.6" = {
- name = "typedarray";
- packageName = "typedarray";
- version = "0.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
- sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
- };
- };
- "uncss-0.17.3" = {
- name = "uncss";
- packageName = "uncss";
- version = "0.17.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz";
- sha512 = "ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==";
- };
- };
- "unicode-canonical-property-names-ecmascript-1.0.4" = {
- name = "unicode-canonical-property-names-ecmascript";
- packageName = "unicode-canonical-property-names-ecmascript";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz";
- sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==";
- };
- };
- "unicode-match-property-ecmascript-1.0.4" = {
- name = "unicode-match-property-ecmascript";
- packageName = "unicode-match-property-ecmascript";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz";
- sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==";
- };
- };
- "unicode-match-property-value-ecmascript-1.2.0" = {
- name = "unicode-match-property-value-ecmascript";
- packageName = "unicode-match-property-value-ecmascript";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz";
- sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==";
- };
- };
- "unicode-property-aliases-ecmascript-1.1.0" = {
- name = "unicode-property-aliases-ecmascript";
- packageName = "unicode-property-aliases-ecmascript";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz";
- sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==";
- };
- };
- "unicode-trie-0.3.1" = {
- name = "unicode-trie";
- packageName = "unicode-trie";
- version = "0.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz";
- sha1 = "d671dddd89101a08bac37b6a5161010602052085";
- };
- };
- "union-value-1.0.1" = {
- name = "union-value";
- packageName = "union-value";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz";
- sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==";
- };
- };
- "uniq-1.0.1" = {
- name = "uniq";
- packageName = "uniq";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz";
- sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
- };
- };
- "uniqs-2.0.0" = {
- name = "uniqs";
- packageName = "uniqs";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz";
- sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02";
- };
- };
- "unquote-1.1.1" = {
- name = "unquote";
- packageName = "unquote";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz";
- sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544";
- };
- };
- "unset-value-1.0.0" = {
- name = "unset-value";
- packageName = "unset-value";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz";
- sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
- };
- };
- "upath-1.2.0" = {
- name = "upath";
- packageName = "upath";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz";
- sha512 = "aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==";
- };
- };
- "uri-js-4.2.2" = {
- name = "uri-js";
- packageName = "uri-js";
- version = "4.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
- sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
- };
- };
- "urix-0.1.0" = {
- name = "urix";
- packageName = "urix";
- version = "0.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz";
- sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
- };
- };
- "url-0.11.0" = {
- name = "url";
- packageName = "url";
- version = "0.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz";
- sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
- };
- };
- "use-3.1.1" = {
- name = "use";
- packageName = "use";
- version = "3.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz";
- sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==";
- };
- };
- "util-0.10.3" = {
- name = "util";
- packageName = "util";
- version = "0.10.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz";
- sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
- };
- };
- "util-0.11.1" = {
- name = "util";
- packageName = "util";
- version = "0.11.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/util/-/util-0.11.1.tgz";
- sha512 = "HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==";
- };
- };
- "util-deprecate-1.0.2" = {
- name = "util-deprecate";
- packageName = "util-deprecate";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
- sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
- };
- };
- "util.promisify-1.0.1" = {
- name = "util.promisify";
- packageName = "util.promisify";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz";
- sha512 = "g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==";
- };
- };
- "uuid-3.4.0" = {
- name = "uuid";
- packageName = "uuid";
- version = "3.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
- sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
- };
- };
- "v8-compile-cache-2.1.0" = {
- name = "v8-compile-cache";
- packageName = "v8-compile-cache";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz";
- sha512 = "usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==";
- };
- };
- "vendors-1.0.4" = {
- name = "vendors";
- packageName = "vendors";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz";
- sha512 = "/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==";
- };
- };
- "verror-1.10.0" = {
- name = "verror";
- packageName = "verror";
- version = "1.10.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
- sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
- };
- };
- "vlq-0.2.3" = {
- name = "vlq";
- packageName = "vlq";
- version = "0.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz";
- sha512 = "DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==";
- };
- };
- "vm-browserify-1.1.2" = {
- name = "vm-browserify";
- packageName = "vm-browserify";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz";
- sha512 = "2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==";
- };
- };
- "w3c-hr-time-1.0.2" = {
- name = "w3c-hr-time";
- packageName = "w3c-hr-time";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz";
- sha512 = "z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==";
- };
- };
- "w3c-xmlserializer-1.1.2" = {
- name = "w3c-xmlserializer";
- packageName = "w3c-xmlserializer";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz";
- sha512 = "p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==";
- };
- };
- "wcwidth-1.0.1" = {
- name = "wcwidth";
- packageName = "wcwidth";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz";
- sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8";
- };
- };
- "webidl-conversions-4.0.2" = {
- name = "webidl-conversions";
- packageName = "webidl-conversions";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz";
- sha512 = "YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==";
- };
- };
- "whatwg-encoding-1.0.5" = {
- name = "whatwg-encoding";
- packageName = "whatwg-encoding";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz";
- sha512 = "b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==";
- };
- };
- "whatwg-mimetype-2.3.0" = {
- name = "whatwg-mimetype";
- packageName = "whatwg-mimetype";
- version = "2.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz";
- sha512 = "M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==";
- };
- };
- "whatwg-url-7.1.0" = {
- name = "whatwg-url";
- packageName = "whatwg-url";
- version = "7.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz";
- sha512 = "WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==";
- };
- };
- "which-1.3.1" = {
- name = "which";
- packageName = "which";
- version = "1.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
- sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
- };
- };
- "which-module-2.0.0" = {
- name = "which-module";
- packageName = "which-module";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz";
- sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
- };
- };
- "word-wrap-1.2.3" = {
- name = "word-wrap";
- packageName = "word-wrap";
- version = "1.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
- sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
- };
- };
- "wrap-ansi-5.1.0" = {
- name = "wrap-ansi";
- packageName = "wrap-ansi";
- version = "5.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz";
- sha512 = "QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==";
- };
- };
- "wrappy-1.0.2" = {
- name = "wrappy";
- packageName = "wrappy";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
- sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
- };
- };
- "ws-5.2.2" = {
- name = "ws";
- packageName = "ws";
- version = "5.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz";
- sha512 = "jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==";
- };
- };
- "ws-6.2.1" = {
- name = "ws";
- packageName = "ws";
- version = "6.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz";
- sha512 = "GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==";
- };
- };
- "xml-name-validator-3.0.0" = {
- name = "xml-name-validator";
- packageName = "xml-name-validator";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz";
- sha512 = "A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==";
- };
- };
- "xmlchars-2.2.0" = {
- name = "xmlchars";
- packageName = "xmlchars";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz";
- sha512 = "JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==";
- };
- };
- "xtend-4.0.2" = {
- name = "xtend";
- packageName = "xtend";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
- sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
- };
- };
- "y18n-4.0.0" = {
- name = "y18n";
- packageName = "y18n";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz";
- sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==";
- };
- };
- "yallist-2.1.2" = {
- name = "yallist";
- packageName = "yallist";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
- sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
- };
- };
- "yargs-14.2.3" = {
- name = "yargs";
- packageName = "yargs";
- version = "14.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz";
- sha512 = "ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==";
- };
- };
- "yargs-parser-15.0.1" = {
- name = "yargs-parser";
- packageName = "yargs-parser";
- version = "15.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz";
- sha512 = "0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==";
- };
- };
- };
- args = {
- name = "codenamesgreen";
- packageName = "codenamesgreen";
- version = "1.0.0";
- src = let
- upstream = fetchFromGitHub {
- owner = "jbowens";
- repo = "codenamesgreen";
- rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b";
- sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0";
- };
- in
- runCommand "codenamesgreen-src" {} ''
- cp -a ${upstream} $out
- chmod -R u+w $out
- cd $out
- patch -p1 < ${./codenames.patch}
- '';
- dependencies = [
- sources."@babel/code-frame-7.0.0"
- (sources."@babel/core-7.3.4" // {
- dependencies = [
- sources."json5-2.1.3"
- sources."source-map-0.5.7"
- ];
- })
- (sources."@babel/generator-7.3.4" // {
- dependencies = [
- sources."source-map-0.5.7"
- ];
- })
- (sources."@babel/helper-annotate-as-pure-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-builder-react-jsx-7.9.0" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- sources."@babel/helper-create-regexp-features-plugin-7.8.8"
- (sources."@babel/helper-define-map-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-explode-assignable-expression-7.8.3" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/generator-7.9.5"
- sources."@babel/parser-7.9.4"
- sources."@babel/traverse-7.9.5"
- sources."@babel/types-7.9.5"
- sources."source-map-0.5.7"
- ];
- })
- (sources."@babel/helper-function-name-7.9.5" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/parser-7.9.4"
- sources."@babel/template-7.8.6"
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-get-function-arity-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-hoist-variables-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-member-expression-to-functions-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-module-imports-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-module-transforms-7.9.0" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/parser-7.9.4"
- sources."@babel/template-7.8.6"
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-optimise-call-expression-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- sources."@babel/helper-plugin-utils-7.8.3"
- sources."@babel/helper-regex-7.8.3"
- (sources."@babel/helper-remap-async-to-generator-7.8.3" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/generator-7.9.5"
- sources."@babel/parser-7.9.4"
- sources."@babel/template-7.8.6"
- sources."@babel/traverse-7.9.5"
- sources."@babel/types-7.9.5"
- sources."source-map-0.5.7"
- ];
- })
- (sources."@babel/helper-replace-supers-7.8.6" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/generator-7.9.5"
- sources."@babel/parser-7.9.4"
- sources."@babel/traverse-7.9.5"
- sources."@babel/types-7.9.5"
- sources."source-map-0.5.7"
- ];
- })
- (sources."@babel/helper-simple-access-7.8.3" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/parser-7.9.4"
- sources."@babel/template-7.8.6"
- sources."@babel/types-7.9.5"
- ];
- })
- (sources."@babel/helper-split-export-declaration-7.8.3" // {
- dependencies = [
- sources."@babel/types-7.9.5"
- ];
- })
- sources."@babel/helper-validator-identifier-7.9.5"
- (sources."@babel/helper-wrap-function-7.8.3" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/generator-7.9.5"
- sources."@babel/parser-7.9.4"
- sources."@babel/template-7.8.6"
- sources."@babel/traverse-7.9.5"
- sources."@babel/types-7.9.5"
- sources."source-map-0.5.7"
- ];
- })
- (sources."@babel/helpers-7.9.2" // {
- dependencies = [
- sources."@babel/code-frame-7.8.3"
- sources."@babel/generator-7.9.5"
- sources."@babel/parser-7.9.4"
- sources."@babel/template-7.8.6"
- sources."@babel/traverse-7.9.5"
- sources."@babel/types-7.9.5"
- sources."source-map-0.5.7"
- ];
- })
- sources."@babel/highlight-7.9.0"
- sources."@babel/parser-7.3.4"
- sources."@babel/plugin-proposal-async-generator-functions-7.8.3"
- sources."@babel/plugin-proposal-json-strings-7.8.3"
- sources."@babel/plugin-proposal-object-rest-spread-7.9.5"
- sources."@babel/plugin-proposal-optional-catch-binding-7.8.3"
- sources."@babel/plugin-proposal-unicode-property-regex-7.8.8"
- sources."@babel/plugin-syntax-async-generators-7.8.4"
- sources."@babel/plugin-syntax-flow-7.8.3"
- sources."@babel/plugin-syntax-json-strings-7.8.3"
- sources."@babel/plugin-syntax-jsx-7.8.3"
- sources."@babel/plugin-syntax-object-rest-spread-7.8.3"
- sources."@babel/plugin-syntax-optional-catch-binding-7.8.3"
- sources."@babel/plugin-transform-arrow-functions-7.8.3"
- sources."@babel/plugin-transform-async-to-generator-7.8.3"
- sources."@babel/plugin-transform-block-scoped-functions-7.8.3"
- sources."@babel/plugin-transform-block-scoping-7.8.3"
- sources."@babel/plugin-transform-classes-7.9.5"
- sources."@babel/plugin-transform-computed-properties-7.8.3"
- sources."@babel/plugin-transform-destructuring-7.9.5"
- sources."@babel/plugin-transform-dotall-regex-7.8.3"
- sources."@babel/plugin-transform-duplicate-keys-7.8.3"
- sources."@babel/plugin-transform-exponentiation-operator-7.8.3"
- sources."@babel/plugin-transform-flow-strip-types-7.3.4"
- sources."@babel/plugin-transform-for-of-7.9.0"
- sources."@babel/plugin-transform-function-name-7.8.3"
- sources."@babel/plugin-transform-literals-7.8.3"
- sources."@babel/plugin-transform-modules-amd-7.9.0"
- sources."@babel/plugin-transform-modules-commonjs-7.2.0"
- sources."@babel/plugin-transform-modules-systemjs-7.9.0"
- sources."@babel/plugin-transform-modules-umd-7.9.0"
- sources."@babel/plugin-transform-named-capturing-groups-regex-7.8.3"
- sources."@babel/plugin-transform-new-target-7.8.3"
- sources."@babel/plugin-transform-object-super-7.8.3"
- sources."@babel/plugin-transform-parameters-7.9.5"
- sources."@babel/plugin-transform-react-jsx-7.3.0"
- sources."@babel/plugin-transform-regenerator-7.8.7"
- sources."@babel/plugin-transform-shorthand-properties-7.8.3"
- sources."@babel/plugin-transform-spread-7.8.3"
- sources."@babel/plugin-transform-sticky-regex-7.8.3"
- sources."@babel/plugin-transform-template-literals-7.8.3"
- sources."@babel/plugin-transform-typeof-symbol-7.8.4"
- sources."@babel/plugin-transform-unicode-regex-7.8.3"
- sources."@babel/preset-env-7.3.4"
- (sources."@babel/runtime-7.3.4" // {
- dependencies = [
- sources."regenerator-runtime-0.12.1"
- ];
- })
- sources."@babel/template-7.2.2"
- sources."@babel/traverse-7.3.4"
- sources."@babel/types-7.3.4"
- sources."@iarna/toml-2.2.5"
- sources."@mrmlnc/readdir-enhanced-2.2.1"
- sources."@nodelib/fs.stat-1.1.3"
- sources."@parcel/fs-1.11.0"
- sources."@parcel/logger-1.11.1"
- sources."@parcel/utils-1.11.0"
- sources."@parcel/watcher-1.12.1"
- sources."@parcel/workers-1.11.0"
- sources."@types/q-1.5.2"
- sources."abab-2.0.3"
- sources."abbrev-1.1.1"
- sources."acorn-7.1.1"
- (sources."acorn-globals-4.3.4" // {
- dependencies = [
- sources."acorn-6.4.1"
- ];
- })
- sources."acorn-walk-6.2.0"
- sources."ajv-6.12.2"
- sources."alphanum-sort-1.0.2"
- sources."ansi-regex-3.0.0"
- sources."ansi-styles-3.2.1"
- (sources."ansi-to-html-0.6.14" // {
- dependencies = [
- sources."entities-1.1.2"
- ];
- })
- (sources."anymatch-2.0.0" // {
- dependencies = [
- sources."normalize-path-2.1.1"
- ];
- })
- sources."argparse-1.0.10"
- sources."arr-diff-4.0.0"
- sources."arr-flatten-1.1.0"
- sources."arr-union-3.1.0"
- sources."array-equal-1.0.0"
- sources."array-unique-0.3.2"
- sources."asn1-0.2.4"
- sources."asn1.js-4.10.1"
- (sources."assert-1.5.0" // {
- dependencies = [
- sources."inherits-2.0.1"
- sources."util-0.10.3"
- ];
- })
- sources."assert-plus-1.0.0"
- sources."assign-symbols-1.0.0"
- sources."async-each-1.0.3"
- sources."async-limiter-1.0.1"
- sources."asynckit-0.4.0"
- sources."atob-2.1.2"
- sources."aws-sign2-0.7.0"
- sources."aws4-1.9.1"
- sources."babel-plugin-dynamic-import-node-2.3.3"
- (sources."babel-runtime-6.26.0" // {
- dependencies = [
- sources."regenerator-runtime-0.11.1"
- ];
- })
- (sources."babel-types-6.26.0" // {
- dependencies = [
- sources."to-fast-properties-1.0.3"
- ];
- })
- sources."babylon-walk-1.0.2"
- sources."balanced-match-1.0.0"
- (sources."base-0.11.2" // {
- dependencies = [
- sources."define-property-1.0.0"
- sources."is-accessor-descriptor-1.0.0"
- sources."is-data-descriptor-1.0.0"
- sources."is-descriptor-1.0.2"
- ];
- })
- sources."base64-js-1.3.1"
- sources."bcrypt-pbkdf-1.0.2"
- sources."binary-extensions-1.13.1"
- sources."bindings-1.5.0"
- sources."bn.js-4.11.8"
- sources."boolbase-1.0.0"
- sources."brace-expansion-1.1.11"
- (sources."braces-2.3.2" // {
- dependencies = [
- sources."extend-shallow-2.0.1"
- ];
- })
- sources."brfs-1.6.1"
- sources."brorand-1.1.0"
- sources."browser-process-hrtime-1.0.0"
- sources."browserify-aes-1.2.0"
- sources."browserify-cipher-1.0.1"
- sources."browserify-des-1.0.2"
- sources."browserify-rsa-4.0.1"
- sources."browserify-sign-4.0.4"
- (sources."browserify-zlib-0.2.0" // {
- dependencies = [
- sources."pako-1.0.11"
- ];
- })
- sources."browserslist-4.12.0"
- sources."buffer-4.9.2"
- sources."buffer-equal-0.0.1"
- sources."buffer-from-1.1.1"
- sources."buffer-xor-1.0.3"
- sources."builtin-status-codes-3.0.0"
- sources."cache-base-1.0.1"
- sources."call-me-maybe-1.0.1"
- sources."caller-callsite-2.0.0"
- sources."caller-path-2.0.0"
- sources."callsites-2.0.0"
- sources."camelcase-5.3.1"
- sources."caniuse-api-3.0.0"
- sources."caniuse-lite-1.0.30001048"
- sources."caseless-0.12.0"
- (sources."chalk-2.4.2" // {
- dependencies = [
- sources."supports-color-5.5.0"
- ];
- })
- (sources."chokidar-2.1.8" // {
- dependencies = [
- sources."fsevents-1.2.12"
- ];
- })
- sources."cipher-base-1.0.4"
- (sources."class-utils-0.3.6" // {
- dependencies = [
- sources."define-property-0.2.5"
- ];
- })
- sources."cli-cursor-2.1.0"
- sources."cli-spinners-1.3.1"
- (sources."cliui-5.0.0" // {
- dependencies = [
- sources."ansi-regex-4.1.0"
- sources."strip-ansi-5.2.0"
- ];
- })
- sources."clone-2.1.2"
- sources."clones-1.2.0"
- sources."coa-2.0.2"
- sources."collection-visit-1.0.0"
- sources."color-3.1.2"
- sources."color-convert-1.9.3"
- sources."color-name-1.1.3"
- sources."color-string-1.5.3"
- sources."combined-stream-1.0.8"
- sources."command-exists-1.2.9"
- sources."commander-2.20.3"
- sources."component-emitter-1.3.0"
- sources."concat-map-0.0.1"
- sources."concat-stream-1.6.2"
- sources."config-chain-1.1.12"
- sources."console-browserify-1.2.0"
- sources."constants-browserify-1.0.0"
- sources."convert-source-map-1.7.0"
- sources."copy-descriptor-0.1.1"
- sources."core-js-2.6.11"
- sources."core-util-is-1.0.2"
- sources."cosmiconfig-5.2.1"
- sources."create-ecdh-4.0.3"
- sources."create-hash-1.2.0"
- sources."create-hmac-1.1.7"
- sources."cross-spawn-6.0.5"
- sources."crypto-browserify-3.12.0"
- sources."css-color-names-0.0.4"
- sources."css-declaration-sorter-4.0.1"
- (sources."css-modules-loader-core-1.1.0" // {
- dependencies = [
- sources."ansi-regex-2.1.1"
- sources."ansi-styles-2.2.1"
- (sources."chalk-1.1.3" // {
- dependencies = [
- sources."supports-color-2.0.0"
- ];
- })
- sources."has-flag-1.0.0"
- sources."postcss-6.0.1"
- sources."source-map-0.5.7"
- sources."strip-ansi-3.0.1"
- sources."supports-color-3.2.3"
- ];
- })
- sources."css-select-2.1.0"
- sources."css-select-base-adapter-0.1.1"
- sources."css-selector-tokenizer-0.7.2"
- sources."css-tree-1.0.0-alpha.37"
- sources."css-what-3.2.1"
- sources."cssesc-3.0.0"
- sources."cssnano-4.1.10"
- sources."cssnano-preset-default-4.0.7"
- sources."cssnano-util-get-arguments-4.0.0"
- sources."cssnano-util-get-match-4.0.0"
- sources."cssnano-util-raw-cache-4.0.1"
- sources."cssnano-util-same-parent-4.0.1"
- (sources."csso-4.0.3" // {
- dependencies = [
- sources."css-tree-1.0.0-alpha.39"
- sources."mdn-data-2.0.6"
- ];
- })
- sources."cssom-0.3.8"
- sources."cssstyle-1.4.0"
- sources."dashdash-1.14.1"
- sources."data-urls-1.1.0"
- sources."deasync-0.1.19"
- sources."debug-4.1.1"
- sources."decamelize-1.2.0"
- sources."decode-uri-component-0.2.0"
- sources."deep-is-0.1.3"
- (sources."defaults-1.0.3" // {
- dependencies = [
- sources."clone-1.0.4"
- ];
- })
- sources."define-properties-1.1.3"
- (sources."define-property-2.0.2" // {
- dependencies = [
- sources."is-accessor-descriptor-1.0.0"
- sources."is-data-descriptor-1.0.0"
- sources."is-descriptor-1.0.2"
- ];
- })
- sources."delayed-stream-1.0.0"
- sources."depd-1.1.2"
- sources."des.js-1.0.1"
- sources."destroy-1.0.4"
- sources."diffie-hellman-5.0.3"
- (sources."dom-serializer-0.2.2" // {
- dependencies = [
- sources."domelementtype-2.0.1"
- ];
- })
- sources."domain-browser-1.2.0"
- sources."domelementtype-1.3.1"
- sources."domexception-1.0.1"
- sources."domhandler-2.4.2"
- sources."domutils-1.7.0"
- sources."dot-prop-5.2.0"
- sources."dotenv-5.0.1"
- sources."dotenv-expand-4.2.0"
- sources."duplexer2-0.1.4"
- sources."ecc-jsbn-0.1.2"
- sources."editorconfig-0.15.3"
- sources."ee-first-1.1.1"
- sources."electron-to-chromium-1.3.418"
- sources."elliptic-6.5.2"
- sources."elm-hot-1.1.1"
- sources."emoji-regex-7.0.3"
- sources."encodeurl-1.0.2"
- sources."entities-2.0.0"
- sources."error-ex-1.3.2"
- sources."es-abstract-1.17.5"
- sources."es-to-primitive-1.2.1"
- sources."escape-html-1.0.3"
- sources."escape-string-regexp-1.0.5"
- (sources."escodegen-1.9.1" // {
- dependencies = [
- sources."esprima-3.1.3"
- ];
- })
- sources."esprima-4.0.1"
- sources."estraverse-4.3.0"
- sources."esutils-2.0.3"
- sources."etag-1.8.1"
- sources."events-3.1.0"
- sources."evp_bytestokey-1.0.3"
- (sources."expand-brackets-2.1.4" // {
- dependencies = [
- sources."debug-2.6.9"
- sources."define-property-0.2.5"
- sources."extend-shallow-2.0.1"
- sources."ms-2.0.0"
- ];
- })
- sources."extend-3.0.2"
- (sources."extend-shallow-3.0.2" // {
- dependencies = [
- sources."is-extendable-1.0.1"
- ];
- })
- (sources."extglob-2.0.4" // {
- dependencies = [
- sources."define-property-1.0.0"
- sources."extend-shallow-2.0.1"
- sources."is-accessor-descriptor-1.0.0"
- sources."is-data-descriptor-1.0.0"
- sources."is-descriptor-1.0.2"
- ];
- })
- sources."extsprintf-1.3.0"
- (sources."falafel-2.2.4" // {
- dependencies = [
- sources."isarray-2.0.5"
- ];
- })
- sources."fast-deep-equal-3.1.1"
- sources."fast-glob-2.2.7"
- sources."fast-json-stable-stringify-2.1.0"
- sources."fast-levenshtein-2.0.6"
- sources."fastparse-1.1.2"
- sources."file-uri-to-path-1.0.0"
- sources."filesize-3.6.1"
- (sources."fill-range-4.0.0" // {
- dependencies = [
- sources."extend-shallow-2.0.1"
- ];
- })
- sources."find-elm-dependencies-2.0.2"
- sources."find-up-2.1.0"
- sources."firstline-1.2.0"
- sources."for-in-1.0.2"
- sources."foreach-2.0.5"
- sources."forever-agent-0.6.1"
- sources."form-data-2.3.3"
- sources."fragment-cache-0.2.1"
- sources."fresh-0.5.2"
- sources."fs.realpath-1.0.0"
- sources."function-bind-1.1.1"
- sources."get-caller-file-2.0.5"
- sources."get-port-3.2.0"
- sources."get-value-2.0.6"
- sources."getpass-0.1.7"
- sources."glob-7.1.4"
- (sources."glob-parent-3.1.0" // {
- dependencies = [
- sources."is-glob-3.1.0"
- ];
- })
- sources."glob-to-regexp-0.3.0"
- sources."globals-11.12.0"
- sources."graceful-fs-4.2.3"
- sources."grapheme-breaker-0.3.2"
- sources."har-schema-2.0.0"
- sources."har-validator-5.1.3"
- sources."has-1.0.3"
- (sources."has-ansi-2.0.0" // {
- dependencies = [
- sources."ansi-regex-2.1.1"
- ];
- })
- sources."has-flag-3.0.0"
- sources."has-symbols-1.0.1"
- sources."has-value-1.0.0"
- (sources."has-values-1.0.0" // {
- dependencies = [
- sources."kind-of-4.0.0"
- ];
- })
- sources."hash-base-3.0.4"
- sources."hash.js-1.1.7"
- sources."hex-color-regex-1.1.0"
- sources."hmac-drbg-1.0.1"
- sources."hsl-regex-1.0.0"
- sources."hsla-regex-1.0.0"
- sources."html-comment-regex-1.1.2"
- sources."html-encoding-sniffer-1.0.2"
- sources."html-tags-1.2.0"
- (sources."htmlnano-0.2.5" // {
- dependencies = [
- sources."posthtml-0.12.3"
- sources."terser-4.6.12"
- ];
- })
- (sources."htmlparser2-3.10.1" // {
- dependencies = [
- sources."entities-1.1.2"
- sources."readable-stream-3.6.0"
- ];
- })
- sources."http-errors-1.7.3"
- sources."http-signature-1.2.0"
- sources."https-browserify-1.0.0"
- sources."iconv-lite-0.4.24"
- sources."icss-replace-symbols-1.1.0"
- sources."ieee754-1.1.13"
- sources."import-fresh-2.0.0"
- sources."indexes-of-1.0.1"
- sources."inflight-1.0.6"
- sources."inherits-2.0.4"
- sources."ini-1.3.5"
- sources."invariant-2.2.4"
- sources."is-absolute-url-2.1.0"
- (sources."is-accessor-descriptor-0.1.6" // {
- dependencies = [
- sources."kind-of-3.2.2"
- ];
- })
- sources."is-arrayish-0.2.1"
- sources."is-binary-path-1.0.1"
- sources."is-buffer-1.1.6"
- sources."is-callable-1.1.5"
- sources."is-color-stop-1.1.0"
- (sources."is-data-descriptor-0.1.4" // {
- dependencies = [
- sources."kind-of-3.2.2"
- ];
- })
- sources."is-date-object-1.0.2"
- (sources."is-descriptor-0.1.6" // {
- dependencies = [
- sources."kind-of-5.1.0"
- ];
- })
- sources."is-directory-0.3.1"
- sources."is-extendable-0.1.1"
- sources."is-extglob-2.1.1"
- sources."is-fullwidth-code-point-2.0.0"
- sources."is-glob-4.0.1"
- sources."is-html-1.1.0"
- (sources."is-number-3.0.0" // {
- dependencies = [
- sources."kind-of-3.2.2"
- ];
- })
- sources."is-obj-2.0.0"
- sources."is-plain-object-2.0.4"
- sources."is-regex-1.0.5"
- sources."is-resolvable-1.1.0"
- sources."is-svg-3.0.0"
- sources."is-symbol-1.0.3"
- sources."is-typedarray-1.0.0"
- sources."is-url-1.2.4"
- sources."is-windows-1.0.2"
- sources."is-wsl-1.1.0"
- sources."isarray-1.0.0"
- sources."isexe-2.0.0"
- sources."isobject-3.0.1"
- sources."isstream-0.1.2"
- (sources."js-beautify-1.11.0" // {
- dependencies = [
- sources."mkdirp-1.0.4"
- ];
- })
- sources."js-levenshtein-1.1.6"
- sources."js-tokens-4.0.0"
- sources."js-yaml-3.13.1"
- sources."jsbn-0.1.1"
- (sources."jsdom-14.1.0" // {
- dependencies = [
- sources."acorn-6.4.1"
- sources."escodegen-1.14.1"
- sources."ws-6.2.1"
- ];
- })
- sources."jsesc-2.5.2"
- sources."json-parse-better-errors-1.0.2"
- sources."json-schema-0.2.3"
- sources."json-schema-traverse-0.4.1"
- sources."json-stringify-safe-5.0.1"
- sources."json5-1.0.1"
- sources."jsprim-1.4.1"
- sources."kind-of-6.0.3"
- sources."levn-0.3.0"
- sources."locate-path-2.0.0"
- sources."lodash-4.17.15"
- sources."lodash.clone-4.5.0"
- sources."lodash.memoize-4.1.2"
- sources."lodash.sortby-4.7.0"
- sources."lodash.uniq-4.5.0"
- sources."log-symbols-2.2.0"
- sources."loose-envify-1.4.0"
- sources."lru-cache-4.1.5"
- sources."magic-string-0.22.5"
- sources."map-cache-0.2.2"
- sources."map-visit-1.0.0"
- sources."md5.js-1.3.5"
- sources."mdn-data-2.0.4"
- (sources."merge-source-map-1.0.4" // {
- dependencies = [
- sources."source-map-0.5.7"
- ];
- })
- sources."merge2-1.3.0"
- sources."micromatch-3.1.10"
- sources."miller-rabin-4.0.1"
- sources."mime-1.6.0"
- sources."mime-db-1.44.0"
- sources."mime-types-2.1.27"
- sources."mimic-fn-1.2.0"
- sources."minimalistic-assert-1.0.1"
- sources."minimalistic-crypto-utils-1.0.1"
- sources."minimatch-3.0.4"
- sources."minimist-1.2.5"
- (sources."mixin-deep-1.3.2" // {
- dependencies = [
- sources."is-extendable-1.0.1"
- ];
- })
- sources."mkdirp-0.5.5"
- sources."ms-2.1.2"
- sources."nan-2.14.1"
- sources."nanomatch-1.2.13"
- sources."nice-try-1.0.5"
- sources."node-addon-api-1.7.1"
- sources."node-elm-compiler-5.0.4"
- sources."node-forge-0.7.6"
- (sources."node-libs-browser-2.2.1" // {
- dependencies = [
- sources."punycode-1.4.1"
- ];
- })
- sources."node-releases-1.1.53"
- sources."nopt-4.0.3"
- sources."normalize-html-whitespace-1.0.0"
- sources."normalize-path-3.0.0"
- sources."normalize-url-3.3.0"
- sources."nth-check-1.0.2"
- sources."nwsapi-2.2.0"
- sources."oauth-sign-0.9.0"
- sources."object-assign-4.1.1"
- (sources."object-copy-0.1.0" // {
- dependencies = [
- sources."define-property-0.2.5"
- sources."kind-of-3.2.2"
- ];
- })
- sources."object-inspect-1.7.0"
- sources."object-keys-1.1.1"
- sources."object-visit-1.0.1"
- sources."object.assign-4.1.0"
- sources."object.getownpropertydescriptors-2.1.0"
- sources."object.pick-1.3.0"
- sources."object.values-1.1.1"
- sources."on-finished-2.3.0"
- sources."once-1.4.0"
- sources."onetime-2.0.1"
- sources."opn-5.5.0"
- sources."optionator-0.8.3"
- sources."ora-2.1.0"
- sources."os-browserify-0.3.0"
- sources."os-homedir-1.0.2"
- sources."os-tmpdir-1.0.2"
- sources."osenv-0.1.5"
- sources."p-limit-1.3.0"
- sources."p-locate-2.0.0"
- sources."p-try-1.0.0"
- sources."pako-0.2.9"
- (sources."parcel-bundler-1.12.3" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- sources."parse-asn1-5.1.5"
- sources."parse-json-4.0.0"
- sources."parse5-5.1.0"
- sources."parseurl-1.3.3"
- sources."pascalcase-0.1.1"
- sources."path-browserify-0.0.1"
- sources."path-dirname-1.0.2"
- sources."path-exists-3.0.0"
- sources."path-is-absolute-1.0.1"
- sources."path-key-2.0.1"
- sources."path-parse-1.0.6"
- sources."pbkdf2-3.0.17"
- sources."performance-now-2.1.0"
- sources."physical-cpu-count-2.0.0"
- sources."pkg-up-2.0.0"
- sources."pn-1.1.0"
- sources."posix-character-classes-0.1.1"
- sources."postcss-7.0.27"
- sources."postcss-calc-7.0.2"
- (sources."postcss-colormin-4.0.3" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-convert-values-4.0.1" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- sources."postcss-discard-comments-4.0.2"
- sources."postcss-discard-duplicates-4.0.2"
- sources."postcss-discard-empty-4.0.1"
- sources."postcss-discard-overridden-4.0.1"
- (sources."postcss-merge-longhand-4.0.11" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-merge-rules-4.0.3" // {
- dependencies = [
- sources."postcss-selector-parser-3.1.2"
- ];
- })
- (sources."postcss-minify-font-values-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-minify-gradients-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-minify-params-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-minify-selectors-4.0.2" // {
- dependencies = [
- sources."postcss-selector-parser-3.1.2"
- ];
- })
- (sources."postcss-modules-extract-imports-1.1.0" // {
- dependencies = [
- sources."postcss-6.0.23"
- sources."supports-color-5.5.0"
- ];
- })
- (sources."postcss-modules-local-by-default-1.2.0" // {
- dependencies = [
- sources."postcss-6.0.23"
- sources."supports-color-5.5.0"
- ];
- })
- (sources."postcss-modules-scope-1.1.0" // {
- dependencies = [
- sources."postcss-6.0.23"
- sources."supports-color-5.5.0"
- ];
- })
- (sources."postcss-modules-values-1.3.0" // {
- dependencies = [
- sources."postcss-6.0.23"
- sources."supports-color-5.5.0"
- ];
- })
- sources."postcss-normalize-charset-4.0.1"
- (sources."postcss-normalize-display-values-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-positions-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-repeat-style-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-string-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-timing-functions-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-unicode-4.0.1" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-url-4.0.1" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-normalize-whitespace-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- (sources."postcss-ordered-values-4.1.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- sources."postcss-reduce-initial-4.0.3"
- (sources."postcss-reduce-transforms-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- sources."postcss-selector-parser-6.0.2"
- (sources."postcss-svgo-4.0.2" // {
- dependencies = [
- sources."postcss-value-parser-3.3.1"
- ];
- })
- sources."postcss-unique-selectors-4.0.1"
- sources."postcss-value-parser-4.0.3"
- sources."posthtml-0.11.6"
- sources."posthtml-parser-0.4.2"
- sources."posthtml-render-1.2.2"
- sources."prelude-ls-1.1.2"
- sources."private-0.1.8"
- sources."process-0.11.10"
- sources."process-nextick-args-2.0.1"
- sources."proto-list-1.2.4"
- sources."pseudomap-1.0.2"
- sources."psl-1.8.0"
- sources."public-encrypt-4.0.3"
- sources."punycode-2.1.1"
- sources."purgecss-1.4.2"
- sources."q-1.5.1"
- sources."qs-6.5.2"
- sources."querystring-0.2.0"
- sources."querystring-es3-0.2.1"
- sources."quote-stream-1.0.2"
- sources."randombytes-2.1.0"
- sources."randomfill-1.0.4"
- sources."range-parser-1.2.1"
- sources."readable-stream-2.3.7"
- sources."readdirp-2.2.1"
- sources."regenerate-1.4.0"
- sources."regenerate-unicode-properties-8.2.0"
- sources."regenerator-runtime-0.13.5"
- (sources."regenerator-transform-0.14.4" // {
- dependencies = [
- sources."@babel/runtime-7.9.2"
- ];
- })
- sources."regex-not-1.0.2"
- sources."regexpu-core-4.7.0"
- sources."regjsgen-0.5.1"
- (sources."regjsparser-0.6.4" // {
- dependencies = [
- sources."jsesc-0.5.0"
- ];
- })
- sources."remove-trailing-separator-1.1.0"
- sources."repeat-element-1.1.3"
- sources."repeat-string-1.6.1"
- sources."request-2.88.2"
- sources."request-promise-core-1.1.3"
- sources."request-promise-native-1.0.8"
- sources."require-directory-2.1.1"
- sources."require-main-filename-2.0.0"
- sources."resolve-1.17.0"
- sources."resolve-from-3.0.0"
- sources."resolve-url-0.2.1"
- sources."restore-cursor-2.0.0"
- sources."ret-0.1.15"
- sources."rgb-regex-1.0.1"
- sources."rgba-regex-1.0.0"
- sources."rimraf-2.6.3"
- sources."ripemd160-2.0.2"
- sources."safe-buffer-5.1.2"
- sources."safe-regex-1.1.0"
- sources."safer-buffer-2.1.2"
- sources."safer-eval-1.3.6"
- sources."sax-1.2.4"
- sources."saxes-3.1.11"
- sources."semver-5.7.1"
- (sources."send-0.17.1" // {
- dependencies = [
- (sources."debug-2.6.9" // {
- dependencies = [
- sources."ms-2.0.0"
- ];
- })
- sources."ms-2.1.1"
- ];
- })
- sources."serialize-to-js-1.2.2"
- sources."serve-static-1.14.1"
- sources."set-blocking-2.0.0"
- (sources."set-value-2.0.1" // {
- dependencies = [
- sources."extend-shallow-2.0.1"
- ];
- })
- sources."setimmediate-1.0.5"
- sources."setprototypeof-1.1.1"
- sources."sha.js-2.4.11"
- sources."shallow-copy-0.0.1"
- sources."shebang-command-1.2.0"
- sources."shebang-regex-1.0.0"
- sources."sigmund-1.0.1"
- sources."signal-exit-3.0.3"
- (sources."simple-swizzle-0.2.2" // {
- dependencies = [
- sources."is-arrayish-0.3.2"
- ];
- })
- (sources."snapdragon-0.8.2" // {
- dependencies = [
- sources."debug-2.6.9"
- sources."define-property-0.2.5"
- sources."extend-shallow-2.0.1"
- sources."ms-2.0.0"
- sources."source-map-0.5.7"
- ];
- })
- (sources."snapdragon-node-2.1.1" // {
- dependencies = [
- sources."define-property-1.0.0"
- sources."is-accessor-descriptor-1.0.0"
- sources."is-data-descriptor-1.0.0"
- sources."is-descriptor-1.0.2"
- ];
- })
- (sources."snapdragon-util-3.0.1" // {
- dependencies = [
- sources."kind-of-3.2.2"
- ];
- })
- sources."source-map-0.6.1"
- sources."source-map-resolve-0.5.3"
- sources."source-map-support-0.5.19"
- sources."source-map-url-0.4.0"
- sources."split-string-3.1.0"
- sources."sprintf-js-1.0.3"
- sources."sshpk-1.16.1"
- sources."stable-0.1.8"
- (sources."static-eval-2.0.5" // {
- dependencies = [
- sources."escodegen-1.14.1"
- ];
- })
- (sources."static-extend-0.1.2" // {
- dependencies = [
- sources."define-property-0.2.5"
- ];
- })
- (sources."static-module-2.2.5" // {
- dependencies = [
- sources."object-inspect-1.4.1"
- ];
- })
- sources."statuses-1.5.0"
- sources."stealthy-require-1.1.1"
- sources."stream-browserify-2.0.2"
- sources."stream-http-2.8.3"
- (sources."string-width-3.1.0" // {
- dependencies = [
- sources."ansi-regex-4.1.0"
- sources."strip-ansi-5.2.0"
- ];
- })
- sources."string.prototype.trimend-1.0.1"
- sources."string.prototype.trimleft-2.1.2"
- sources."string.prototype.trimright-2.1.2"
- sources."string.prototype.trimstart-1.0.1"
- sources."string_decoder-1.1.1"
- sources."strip-ansi-4.0.0"
- (sources."stylehacks-4.0.3" // {
- dependencies = [
- sources."postcss-selector-parser-3.1.2"
- ];
- })
- sources."supports-color-6.1.0"
- sources."svgo-1.3.2"
- sources."symbol-tree-3.2.4"
- sources."temp-0.9.0"
- sources."terser-3.17.0"
- sources."through2-2.0.5"
- sources."timers-browserify-2.0.11"
- sources."timsort-0.3.0"
- sources."tiny-inflate-1.0.3"
- sources."to-arraybuffer-1.0.1"
- sources."to-fast-properties-2.0.0"
- (sources."to-object-path-0.3.0" // {
- dependencies = [
- sources."kind-of-3.2.2"
- ];
- })
- sources."to-regex-3.0.2"
- sources."to-regex-range-2.1.1"
- sources."toidentifier-1.0.0"
- sources."tough-cookie-2.5.0"
- sources."tr46-1.0.1"
- sources."trim-right-1.0.1"
- sources."tty-browserify-0.0.0"
- sources."tunnel-agent-0.6.0"
- sources."tweetnacl-0.14.5"
- sources."type-check-0.3.2"
- sources."typedarray-0.0.6"
- (sources."uncss-0.17.3" // {
- dependencies = [
- sources."is-absolute-url-3.0.3"
- ];
- })
- sources."unicode-canonical-property-names-ecmascript-1.0.4"
- sources."unicode-match-property-ecmascript-1.0.4"
- sources."unicode-match-property-value-ecmascript-1.2.0"
- sources."unicode-property-aliases-ecmascript-1.1.0"
- sources."unicode-trie-0.3.1"
- sources."union-value-1.0.1"
- sources."uniq-1.0.1"
- sources."uniqs-2.0.0"
- sources."unquote-1.1.1"
- (sources."unset-value-1.0.0" // {
- dependencies = [
- (sources."has-value-0.3.1" // {
- dependencies = [
- sources."isobject-2.1.0"
- ];
- })
- sources."has-values-0.1.4"
- ];
- })
- sources."upath-1.2.0"
- sources."uri-js-4.2.2"
- sources."urix-0.1.0"
- (sources."url-0.11.0" // {
- dependencies = [
- sources."punycode-1.3.2"
- ];
- })
- sources."use-3.1.1"
- (sources."util-0.11.1" // {
- dependencies = [
- sources."inherits-2.0.3"
- ];
- })
- sources."util-deprecate-1.0.2"
- sources."util.promisify-1.0.1"
- sources."uuid-3.4.0"
- sources."v8-compile-cache-2.1.0"
- sources."vendors-1.0.4"
- sources."verror-1.10.0"
- sources."vlq-0.2.3"
- sources."vm-browserify-1.1.2"
- sources."w3c-hr-time-1.0.2"
- sources."w3c-xmlserializer-1.1.2"
- sources."wcwidth-1.0.1"
- sources."webidl-conversions-4.0.2"
- sources."whatwg-encoding-1.0.5"
- sources."whatwg-mimetype-2.3.0"
- sources."whatwg-url-7.1.0"
- sources."which-1.3.1"
- sources."which-module-2.0.0"
- sources."word-wrap-1.2.3"
- (sources."wrap-ansi-5.1.0" // {
- dependencies = [
- sources."ansi-regex-4.1.0"
- sources."strip-ansi-5.2.0"
- ];
- })
- sources."wrappy-1.0.2"
- sources."ws-5.2.2"
- sources."xml-name-validator-3.0.0"
- sources."xmlchars-2.2.0"
- sources."xtend-4.0.2"
- sources."y18n-4.0.0"
- sources."yallist-2.1.2"
- (sources."yargs-14.2.3" // {
- dependencies = [
- sources."find-up-3.0.0"
- sources."locate-path-3.0.0"
- sources."p-limit-2.3.0"
- sources."p-locate-3.0.0"
- sources."p-try-2.2.0"
- ];
- })
- sources."yargs-parser-15.0.1"
- ];
- buildInputs = globalBuildInputs;
- meta = {
- license = "MIT";
- };
- production = false;
- bypassCache = true;
- reconstructLock = false;
- };
-in
-{
- args = args;
- sources = sources;
- tarball = nodeEnv.buildNodeSourceDist args;
- package = nodeEnv.buildNodePackage args;
- shell = nodeEnv.buildNodeShell args;
-}
diff --git a/modules/private/websites/tools/games/codenames/registry.dat b/modules/private/websites/tools/games/codenames/registry.dat
deleted file mode 100644
index a8585a8..0000000
Binary files a/modules/private/websites/tools/games/codenames/registry.dat and /dev/null differ
diff --git a/modules/private/websites/tools/games/codenames/shell.nix b/modules/private/websites/tools/games/codenames/shell.nix
deleted file mode 100644
index 053696b..0000000
--- a/modules/private/websites/tools/games/codenames/shell.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ pkgs ? import {} }: with pkgs;
-let
- greenapid = callPackage ./greenapid.nix {};
- frontend = callPackage ./frontend.nix {};
- nginx_conf = writeText "nginx.conf" ''
- pid ./nginx.pid;
- error_log stderr;
- daemon off;
- events {
- }
- http {
- include ${mailcap}/etc/nginx/mime.types;
- server {
- listen 0.0.0.0:8081;
- listen [::]:8081;
- location /api/ {
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_pass http://127.0.0.1:8080/;
- }
- location / {
- root ${frontend};
- try_files $uri $uri/ /index.html;
- }
- }
- }
- '';
-in
-pkgs.mkShell {
- buildInputs = [
- greenapid
- frontend
- python2
- nginx
- ];
- shellHook = ''
- greenapid &
- pid=$!
-
- finish() {
- kill $pid;
- }
-
- trap finish EXIT
-
- nginx -c ${nginx_conf} -p ./nginx/
- exit
- '';
-}
diff --git a/modules/private/websites/tools/games/codenames/wordlists/french.txt b/modules/private/websites/tools/games/codenames/wordlists/french.txt
deleted file mode 100644
index 462ddc4..0000000
--- a/modules/private/websites/tools/games/codenames/wordlists/french.txt
+++ /dev/null
@@ -1,694 +0,0 @@
-ACCIDENT
-ACHAT
-ACNÉ
-ACTION
-ADOLESCENT
-AFRIQUE
-AIGUILLE
-ALLUMER
-ALPES
-ALPHABET
-ALTITUDE
-AMÉRIQUE
-AMI
-AMOUR
-AMPOULE
-ANNIVERSAIRE
-APPÉTIT
-ARAIGNÉE
-ARBRE
-ARC
-ARC-EN-CIEL
-ARGENT
-ARME
-ARMÉE
-ASCENSEUR
-ASIE
-ASSIS
-ASTRONAUTE
-ATCHOUM
-ATHLÈTE
-ATLANTIDE
-AUBE
-AUSTRALIE
-AVEC
-AVENTURE
-AVION
-AVOCAT
-BAC
-BAGUETTE
-BAIN
-BAISER
-BALAI
-BALLE
-BALLON
-BAMBOU
-BANANE
-BANNIR
-BARBE
-BARRIÈRE
-BAS
-BASKET
-BATEAU
-BÂTON
-BATTERIE
-BÉBÉ
-BEETHOVEN
-BÊTE
-BIBERON
-BIÈRE
-BLANC
-BLÉ
-BLEU
-BOB
-BOISSON
-BOÎTE
-BOMBE
-BONBON
-BONNET
-BORD
-BORDEAUX
-BOTTE
-BOUE
-BOUGIE
-BOULE
-BOUTEILLE
-BOUTON
-BRANCHE
-BRAS
-BRAVO
-BRETAGNE
-BRISE
-BROSSE
-BRUIT
-BRUME
-BRUN
-BÛCHE
-BULLE
-BUREAU
-BUT
-CABANE
-CABINE
-CACHER
-CADEAU
-CAFARD
-CAFÉ
-CAISSE
-CALCULER
-CALME
-CAMÉRA
-CAMION
-CAMPING
-CANADA
-CANARD
-CANETTE
-CANINE
-CAP
-CAPITALISME
-CAR
-CAROTTE
-CARRÉ
-CARTE
-CARTON
-CASQUE
-CASSER
-CASSETTE
-CAUCHEMAR
-CAUSE
-CEINTURE
-CELLULE
-CERCLE
-CHAÎNE
-CHAIR
-CHAISE
-CHAMP
-CHAMPION
-CHANT
-CHAPEAU
-CHARBON
-CHARGE
-CHASSE
-CHAT
-CHÂTEAU
-CHAUD
-CHAUSSURE
-CHAUVE
-CHEF
-CHEMISE
-CHÊNE
-CHER
-CHEVAL
-CHEVALIER
-CHEVEU
-CHIEN
-CHIFFRE
-CHINE
-CHOCOLAT
-CHÔMAGE
-CIEL
-CIL
-CINÉMA
-CIRE
-CIRQUE
-CITRON
-CLÉ
-CLOU
-CLOWN
-COACH
-COCCINELLE
-CODE
-CŒUR
-COL
-COLLE
-COLLINE
-COLONNE
-CÔNE
-CONFORT
-CONTINU
-CONTRE
-CONVERSATION
-COPAIN
-COQ
-COQUILLAGE
-CORBEAU
-CORDE
-CORPS
-CÔTE
-COUDE
-COULOIR
-COUP
-COUR
-COURANT
-COURRIER
-COURS
-COURSE
-COURT
-COUTEAU
-COUVERT
-COUVERTURE
-COWBOY
-CRAC
-CRAYON
-CRÈME
-CRITIQUE
-CROCHET
-CROIX
-CROÛTE
-CUILLÈRE
-CUIR
-CUISINE
-CULOTTE
-CYCLE
-DARD
-DÉ
-DEBOUT
-DÉFAUT
-DEHORS
-DÉMOCRATIE
-DENT
-DENTISTE
-DESSIN
-DEVOIR
-DIAMANT
-DICTIONNAIRE
-DIEU
-DINOSAURE
-DISCOURS
-DISQUE
-DIX
-DOCTEUR
-DOIGT
-DOMINO
-DORMIR
-DROIT
-EAU
-ÉCHEC
-ÉCHELLE
-ÉCLAIR
-ÉCOLE
-ÉCRAN
-ÉCRASER
-ÉCRIT
-ÉGLISE
-ÉGOUT
-ÉLECTRICITÉ
-ÉLÉPHANT
-ÉLÈVE
-ELFE
-EMPREINTE
-ENCEINTE
-ÉPICE
-ÉPINE
-ERREUR
-ESPACE
-ESPION
-ESSENCE
-ÉTAT
-ÉTÉ
-ÉTOILE
-ÉTRANGER
-ÉVENTAIL
-ÉVOLUTION
-EXPLOSION
-EXTENSION
-FACE
-FAN
-FARCE
-FATIGUE
-FAUTEUIL
-FEMME
-FENÊTRE
-FER
-FÊTE
-FEU
-FEUILLE
-FIDÈLE
-FIL
-FILLE
-FLAMME
-FLÈCHE
-FLEUR
-FLEUVE
-FOND
-FOOTBALL
-FORÊT
-FORGER
-FOUDRE
-FOUET
-FOUR
-FOURMI
-FROID
-FROMAGE
-FRONT
-FRUIT
-FUIR
-FUTUR
-GARÇON
-GÂTEAU
-GAUCHE
-GAZ
-GAZON
-GEL
-GENOU
-GLACE
-GOMME
-GORGE
-GOUTTE
-GRAND
-GRÈCE
-GRENOUILLE
-GRIPPE
-GRIS
-GROS
-GROUPE
-GUITARE
-HASARD
-HAUT
-HÉLICOPTÈRE
-HERBE
-HEUREUX
-HISTOIRE
-HIVER
-HÔTEL
-HUGO
-HUILE
-HUMIDE
-HUMOUR
-INDICE
-INTERNET
-INVITER
-ITALIE
-JACQUES
-JAMBE
-JAMBON
-JARDIN
-JAUNE
-JEAN
-JEANNE
-JET
-JEU
-JOGGING
-JOUR
-JOURNAL
-JUPITER
-KILO
-KIWI
-LAINE
-LAIT
-LANGUE
-LAPIN
-LATIN
-LAVER
-LECTEUR
-LÉGER
-LENT
-LETTRE
-LIEN
-LIGNE
-LINGE
-LION
-LIT
-LIVRE
-LOI
-LONG
-LOUIS
-LOUP
-LUMIÈRE
-LUNDI
-LUNE
-LUNETTE
-MACHINE
-MACHO
-MAIN
-MAISON
-MAÎTRESSE
-MAL
-MALADIE
-MAMAN
-MAMMOUTH
-MANGER
-MARAIS
-MARC
-MARCHE
-MARIAGE
-MARIE
-MARIÉE
-MARQUE
-MARSEILLE
-MASSE
-MER
-MESSE
-MÈTRE
-MÉTRO
-MIAOU
-MICRO
-MIEUX
-MILLE
-MINE
-MIROIR
-MODERNE
-MOITIÉ
-MONDE
-MONSTRE
-MONTAGNE
-MONTRE
-MORT
-MOTEUR
-MOTO
-MOU
-MOUCHE
-MOULIN
-MOUSTACHE
-MOUTON
-MUR
-MUSCLE
-MUSIQUE
-MYSTÈRE
-NAGE
-NATURE
-NEIGE
-NEUTRE
-NEW YORK
-NEZ
-NID
-NINJA
-NIVEAU
-NOËL
-NŒUD
-NOIR
-NOUS
-NUAGE
-NUIT
-NUMÉRO
-ŒIL
-ŒUF
-OISEAU
-OLYMPIQUE
-OMBRE
-ONGLE
-OR
-ORAL
-ORANGE
-ORDINATEUR
-ORDRE
-ORDURE
-OREILLE
-ORGANE
-ORGUEIL
-OURS
-OUTIL
-OUVERT
-OVALE
-PAIN
-PALAIS
-PANNEAU
-PANTALON
-PANTIN
-PAPA
-PAPIER
-PAPILLON
-PARADIS
-PARC
-PARIS
-PAROLE
-PARTIE
-PASSE
-PÂTE
-PATIN
-PATTE
-PAUL
-PAYER
-PÊCHE
-PEINTURE
-PENDULE
-PENSER
-PERSONNE
-PETIT
-PEUR
-PHILOSOPHE
-PHOTO
-PHRASE
-PIANO
-PIÈCE
-PIED
-PIERRE
-PILE
-PILOTE
-PINCE
-PIOCHE
-PION
-PIRATE
-PIRE
-PISCINE
-PLACE
-PLAFOND
-PLAGE
-PLAIE
-PLAN
-PLANCHE
-PLANÈTE
-PLANTE
-PLASTIQUE
-PLAT
-PLOMB
-PLONGER
-PLUIE
-POCHE
-POÈTE
-POIDS
-POING
-POINT
-POIVRE
-POLICE
-POLITIQUE
-POLLEN
-POLO
-POMME
-POMPE
-PONT
-POPULATION
-PORT
-PORTE
-PORTEFEUILLE
-POSITIF
-POSTE
-POUBELLE
-POULE
-POUPÉE
-POUSSER
-POUSSIÈRE
-POUVOIR
-PRÉHISTOIRE
-PREMIER
-PRÉSENT
-PRESSE
-PRIER
-PRINCESSE
-PRISE
-PRIVÉ
-PROFESSEUR
-PSYCHOLOGIE
-PUBLIC
-PULL
-PUNK
-PUZZLE
-PYJAMA
-QUATRE
-QUINZE
-RACE
-RADIO
-RAISIN
-RAP
-RAYÉ
-RAYON
-RÉFLÉCHIR
-REINE
-REPAS
-REPTILE
-REQUIN
-RÊVE
-RICHE
-RIDEAU
-RIEN
-RIRE
-ROBINET
-ROCHE
-ROI
-ROND
-ROSE
-ROUE
-ROUGE
-ROUILLE
-ROUX
-RUSSIE
-SABLE
-SABRE
-SAC
-SAIN
-SAISON
-SALE
-SALLE
-SALUT
-SAMU
-SANDWICH
-SANG
-SAPIN
-SATELLITE
-SAUMON
-SAUT
-SAVOIR
-SCHTROUMPF
-SCIENCE
-SCOUT
-SEC
-SEINE
-SEL
-SEPT
-SERPENT
-SERRER
-SEXE
-SHAMPOOING
-SIÈCLE
-SIÈGE
-SIESTE
-SILHOUETTE
-SIRÈNE
-SKI
-SOLEIL
-SOMMEIL
-SON
-SONNER
-SORCIÈRE
-SOURD
-SOURIS
-SPORT
-STAR
-STATION
-STYLO
-SUR
-SURFACE
-SUSHI
-SWING
-TABLEAU
-TACHE
-TAILLE
-TANTE
-TAPIS
-TARD
-TAXI
-TÉLÉPHONE
-TÉLÉVISION
-TEMPLE
-TEMPS
-TENNIS
-TÊTE
-THÉ
-TIGRE
-TINTIN
-TISSU
-TITRE
-TOAST
-TOILETTE
-TOKYO
-TOMBE
-TON
-TOP
-TOUCHE
-TOUJOURS
-TOUR
-TOURNOI
-TOUT
-TRACE
-TRAIN
-TRAÎNER
-TRANSPORT
-TRAVAIL
-TRÉSOR
-TRIANGLE
-TRISTE
-TRÔNE
-TROUPEAU
-TSAR
-TUBE
-TUER
-TUPPERWARE
-TUYAU
-TWITTER
-TYPE
-UNIVERSITÉ
-VACHE
-VAGUE
-VAISSELLE
-VALEUR
-VER
-VERDICT
-VERRE
-VERS
-VERT
-VESTE
-VIANDE
-VIDE
-VIE
-VIEUX
-VILLE
-VIN
-VINGT
-VIOLON
-VIPÈRE
-VISION
-VITE
-VIVE
-VŒU
-VOILE
-VOISIN
-VOITURE
-VOL
-VOLUME
-VOTE
-VOULOIR
-VOYAGE
-ZEN
-ZÉRO
-ZODIAQUE
-ZONE
-ZOO
diff --git a/modules/private/websites/tools/games/terraforming-mars/default.nix b/modules/private/websites/tools/games/terraforming-mars/default.nix
deleted file mode 100644
index 0df5363..0000000
--- a/modules/private/websites/tools/games/terraforming-mars/default.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{ config, lib, pkgs, ... }:
-let
- cfg = config.myServices.websites.games.terraforming-mars;
- terraforming-mars = pkgs.callPackage ./terraforming-mars.nix {};
-in
-{
- options.myServices.websites.games.terraforming-mars.enable = lib.mkEnableOption "Enable Terraforming mars game";
- config = lib.mkIf cfg.enable {
- systemd.services.terraforming-mars = {
- path = [ pkgs.nodejs pkgs.bashInteractive ];
- description = "Terraforming mars game";
- wantedBy = [ "multi-user.target" ];
- script = ''
- export PORT=/run/terraforming-mars/socket.sock
- export NODE_ENV=production
- mkdir -p /var/lib/terraforming-mars/db
- npm run start
- '';
- postStart = ''
- sleep 5;
- chown :wwwrun /run/terraforming-mars/socket.sock
- chmod g+w /run/terraforming-mars/socket.sock
- '';
- serviceConfig = {
- User = "terraformingmars";
- DynamicUser = true;
- SupplementaryGroups = [ "wwwrun" ];
- Type = "simple";
- WorkingDirectory = terraforming-mars;
- RuntimeDirectory = "terraforming-mars";
- StateDirectory = "terraforming-mars";
- };
- };
-
- services.websites.env.tools.vhostConfs.games_terraforming-mars = {
- certName = "games";
- certMainHost = "games.immae.eu";
- hosts = [ "terraforming-mars.games.immae.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPass / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/
- ProxyPassReverse / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/games/terraforming-mars/node-packages.nix b/modules/private/websites/tools/games/terraforming-mars/node-packages.nix
deleted file mode 100644
index e5fac49..0000000
--- a/modules/private/websites/tools/games/terraforming-mars/node-packages.nix
+++ /dev/null
@@ -1,4353 +0,0 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
-
-{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? [], src}:
-
-let
- sources = {
- "@babel/code-frame-7.12.13" = {
- name = "_at_babel_slash_code-frame";
- packageName = "@babel/code-frame";
- version = "7.12.13";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz";
- sha512 = "HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==";
- };
- };
- "@babel/helper-validator-identifier-7.12.11" = {
- name = "_at_babel_slash_helper-validator-identifier";
- packageName = "@babel/helper-validator-identifier";
- version = "7.12.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz";
- sha512 = "np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==";
- };
- };
- "@babel/highlight-7.13.10" = {
- name = "_at_babel_slash_highlight";
- packageName = "@babel/highlight";
- version = "7.13.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz";
- sha512 = "5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==";
- };
- };
- "@discoveryjs/json-ext-0.5.2" = {
- name = "_at_discoveryjs_slash_json-ext";
- packageName = "@discoveryjs/json-ext";
- version = "0.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz";
- sha512 = "HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==";
- };
- };
- "@nodelib/fs.scandir-2.1.4" = {
- name = "_at_nodelib_slash_fs.scandir";
- packageName = "@nodelib/fs.scandir";
- version = "2.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz";
- sha512 = "33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==";
- };
- };
- "@nodelib/fs.stat-2.0.4" = {
- name = "_at_nodelib_slash_fs.stat";
- packageName = "@nodelib/fs.stat";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz";
- sha512 = "IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==";
- };
- };
- "@nodelib/fs.walk-1.2.6" = {
- name = "_at_nodelib_slash_fs.walk";
- packageName = "@nodelib/fs.walk";
- version = "1.2.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz";
- sha512 = "8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==";
- };
- };
- "@types/eslint-7.2.10" = {
- name = "_at_types_slash_eslint";
- packageName = "@types/eslint";
- version = "7.2.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz";
- sha512 = "kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==";
- };
- };
- "@types/eslint-scope-3.7.0" = {
- name = "_at_types_slash_eslint-scope";
- packageName = "@types/eslint-scope";
- version = "3.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz";
- sha512 = "O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==";
- };
- };
- "@types/estree-0.0.46" = {
- name = "_at_types_slash_estree";
- packageName = "@types/estree";
- version = "0.0.46";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz";
- sha512 = "laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==";
- };
- };
- "@types/json-schema-7.0.7" = {
- name = "_at_types_slash_json-schema";
- packageName = "@types/json-schema";
- version = "7.0.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz";
- sha512 = "cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==";
- };
- };
- "@types/node-10.17.58" = {
- name = "_at_types_slash_node";
- packageName = "@types/node";
- version = "10.17.58";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/node/-/node-10.17.58.tgz";
- sha512 = "Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w==";
- };
- };
- "@types/pg-7.14.11" = {
- name = "_at_types_slash_pg";
- packageName = "@types/pg";
- version = "7.14.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/pg/-/pg-7.14.11.tgz";
- sha512 = "EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA==";
- };
- };
- "@types/sqlite3-3.1.7" = {
- name = "_at_types_slash_sqlite3";
- packageName = "@types/sqlite3";
- version = "3.1.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.7.tgz";
- sha512 = "8FHV/8Uzd7IwdHm5mvmF2Aif4aC/gjrt4axWD9SmfaxITnOjtOhCbOSTuqv/VbH1uq0QrwlaTj9aTz3gmR6u4w==";
- };
- };
- "@typescript-eslint/eslint-plugin-4.22.0" = {
- name = "_at_typescript-eslint_slash_eslint-plugin";
- packageName = "@typescript-eslint/eslint-plugin";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz";
- sha512 = "U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA==";
- };
- };
- "@typescript-eslint/experimental-utils-4.22.0" = {
- name = "_at_typescript-eslint_slash_experimental-utils";
- packageName = "@typescript-eslint/experimental-utils";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz";
- sha512 = "xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==";
- };
- };
- "@typescript-eslint/parser-4.22.0" = {
- name = "_at_typescript-eslint_slash_parser";
- packageName = "@typescript-eslint/parser";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.0.tgz";
- sha512 = "z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q==";
- };
- };
- "@typescript-eslint/scope-manager-4.22.0" = {
- name = "_at_typescript-eslint_slash_scope-manager";
- packageName = "@typescript-eslint/scope-manager";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz";
- sha512 = "OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==";
- };
- };
- "@typescript-eslint/types-4.22.0" = {
- name = "_at_typescript-eslint_slash_types";
- packageName = "@typescript-eslint/types";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz";
- sha512 = "sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==";
- };
- };
- "@typescript-eslint/typescript-estree-4.22.0" = {
- name = "_at_typescript-eslint_slash_typescript-estree";
- packageName = "@typescript-eslint/typescript-estree";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz";
- sha512 = "TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==";
- };
- };
- "@typescript-eslint/visitor-keys-4.22.0" = {
- name = "_at_typescript-eslint_slash_visitor-keys";
- packageName = "@typescript-eslint/visitor-keys";
- version = "4.22.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz";
- sha512 = "nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==";
- };
- };
- "@webassemblyjs/ast-1.11.0" = {
- name = "_at_webassemblyjs_slash_ast";
- packageName = "@webassemblyjs/ast";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz";
- sha512 = "kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==";
- };
- };
- "@webassemblyjs/floating-point-hex-parser-1.11.0" = {
- name = "_at_webassemblyjs_slash_floating-point-hex-parser";
- packageName = "@webassemblyjs/floating-point-hex-parser";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz";
- sha512 = "Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==";
- };
- };
- "@webassemblyjs/helper-api-error-1.11.0" = {
- name = "_at_webassemblyjs_slash_helper-api-error";
- packageName = "@webassemblyjs/helper-api-error";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz";
- sha512 = "baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==";
- };
- };
- "@webassemblyjs/helper-buffer-1.11.0" = {
- name = "_at_webassemblyjs_slash_helper-buffer";
- packageName = "@webassemblyjs/helper-buffer";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz";
- sha512 = "u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==";
- };
- };
- "@webassemblyjs/helper-numbers-1.11.0" = {
- name = "_at_webassemblyjs_slash_helper-numbers";
- packageName = "@webassemblyjs/helper-numbers";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz";
- sha512 = "DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==";
- };
- };
- "@webassemblyjs/helper-wasm-bytecode-1.11.0" = {
- name = "_at_webassemblyjs_slash_helper-wasm-bytecode";
- packageName = "@webassemblyjs/helper-wasm-bytecode";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz";
- sha512 = "MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==";
- };
- };
- "@webassemblyjs/helper-wasm-section-1.11.0" = {
- name = "_at_webassemblyjs_slash_helper-wasm-section";
- packageName = "@webassemblyjs/helper-wasm-section";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz";
- sha512 = "3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==";
- };
- };
- "@webassemblyjs/ieee754-1.11.0" = {
- name = "_at_webassemblyjs_slash_ieee754";
- packageName = "@webassemblyjs/ieee754";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz";
- sha512 = "KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==";
- };
- };
- "@webassemblyjs/leb128-1.11.0" = {
- name = "_at_webassemblyjs_slash_leb128";
- packageName = "@webassemblyjs/leb128";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz";
- sha512 = "aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==";
- };
- };
- "@webassemblyjs/utf8-1.11.0" = {
- name = "_at_webassemblyjs_slash_utf8";
- packageName = "@webassemblyjs/utf8";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz";
- sha512 = "A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==";
- };
- };
- "@webassemblyjs/wasm-edit-1.11.0" = {
- name = "_at_webassemblyjs_slash_wasm-edit";
- packageName = "@webassemblyjs/wasm-edit";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz";
- sha512 = "JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==";
- };
- };
- "@webassemblyjs/wasm-gen-1.11.0" = {
- name = "_at_webassemblyjs_slash_wasm-gen";
- packageName = "@webassemblyjs/wasm-gen";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz";
- sha512 = "BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==";
- };
- };
- "@webassemblyjs/wasm-opt-1.11.0" = {
- name = "_at_webassemblyjs_slash_wasm-opt";
- packageName = "@webassemblyjs/wasm-opt";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz";
- sha512 = "tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==";
- };
- };
- "@webassemblyjs/wasm-parser-1.11.0" = {
- name = "_at_webassemblyjs_slash_wasm-parser";
- packageName = "@webassemblyjs/wasm-parser";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz";
- sha512 = "6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==";
- };
- };
- "@webassemblyjs/wast-printer-1.11.0" = {
- name = "_at_webassemblyjs_slash_wast-printer";
- packageName = "@webassemblyjs/wast-printer";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz";
- sha512 = "Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==";
- };
- };
- "@webpack-cli/configtest-1.0.2" = {
- name = "_at_webpack-cli_slash_configtest";
- packageName = "@webpack-cli/configtest";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz";
- sha512 = "3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==";
- };
- };
- "@webpack-cli/info-1.2.3" = {
- name = "_at_webpack-cli_slash_info";
- packageName = "@webpack-cli/info";
- version = "1.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz";
- sha512 = "lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==";
- };
- };
- "@webpack-cli/serve-1.3.1" = {
- name = "_at_webpack-cli_slash_serve";
- packageName = "@webpack-cli/serve";
- version = "1.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz";
- sha512 = "0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==";
- };
- };
- "@xtuc/ieee754-1.2.0" = {
- name = "_at_xtuc_slash_ieee754";
- packageName = "@xtuc/ieee754";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz";
- sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==";
- };
- };
- "@xtuc/long-4.2.2" = {
- name = "_at_xtuc_slash_long";
- packageName = "@xtuc/long";
- version = "4.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz";
- sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==";
- };
- };
- "abbrev-1.1.1" = {
- name = "abbrev";
- packageName = "abbrev";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
- sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
- };
- };
- "acorn-7.4.1" = {
- name = "acorn";
- packageName = "acorn";
- version = "7.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz";
- sha512 = "nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==";
- };
- };
- "acorn-8.1.1" = {
- name = "acorn";
- packageName = "acorn";
- version = "8.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz";
- sha512 = "xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==";
- };
- };
- "acorn-jsx-5.3.1" = {
- name = "acorn-jsx";
- packageName = "acorn-jsx";
- version = "5.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz";
- sha512 = "K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==";
- };
- };
- "ajv-6.12.6" = {
- name = "ajv";
- packageName = "ajv";
- version = "6.12.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
- sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
- };
- };
- "ajv-keywords-3.5.2" = {
- name = "ajv-keywords";
- packageName = "ajv-keywords";
- version = "3.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz";
- sha512 = "5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==";
- };
- };
- "ansi-colors-4.1.1" = {
- name = "ansi-colors";
- packageName = "ansi-colors";
- version = "4.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz";
- sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==";
- };
- };
- "ansi-escapes-4.3.2" = {
- name = "ansi-escapes";
- packageName = "ansi-escapes";
- version = "4.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz";
- sha512 = "gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==";
- };
- };
- "ansi-regex-2.1.1" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
- sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
- };
- };
- "ansi-regex-3.0.0" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
- sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
- };
- };
- "ansi-regex-4.1.0" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "4.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
- sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
- };
- };
- "ansi-regex-5.0.0" = {
- name = "ansi-regex";
- packageName = "ansi-regex";
- version = "5.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz";
- sha512 = "bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==";
- };
- };
- "ansi-styles-3.2.1" = {
- name = "ansi-styles";
- packageName = "ansi-styles";
- version = "3.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
- sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
- };
- };
- "ansi-styles-4.3.0" = {
- name = "ansi-styles";
- packageName = "ansi-styles";
- version = "4.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
- sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
- };
- };
- "aproba-1.2.0" = {
- name = "aproba";
- packageName = "aproba";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
- sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==";
- };
- };
- "are-we-there-yet-1.1.5" = {
- name = "are-we-there-yet";
- packageName = "are-we-there-yet";
- version = "1.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
- sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==";
- };
- };
- "argparse-1.0.10" = {
- name = "argparse";
- packageName = "argparse";
- version = "1.0.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
- sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
- };
- };
- "array-union-2.1.0" = {
- name = "array-union";
- packageName = "array-union";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";
- sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==";
- };
- };
- "asn1-0.2.4" = {
- name = "asn1";
- packageName = "asn1";
- version = "0.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
- sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
- };
- };
- "assert-plus-1.0.0" = {
- name = "assert-plus";
- packageName = "assert-plus";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
- sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
- };
- };
- "astral-regex-1.0.0" = {
- name = "astral-regex";
- packageName = "astral-regex";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz";
- sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==";
- };
- };
- "asynckit-0.4.0" = {
- name = "asynckit";
- packageName = "asynckit";
- version = "0.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
- sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
- };
- };
- "aws-sign2-0.7.0" = {
- name = "aws-sign2";
- packageName = "aws-sign2";
- version = "0.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
- sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
- };
- };
- "aws4-1.11.0" = {
- name = "aws4";
- packageName = "aws4";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz";
- sha512 = "xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==";
- };
- };
- "balanced-match-1.0.2" = {
- name = "balanced-match";
- packageName = "balanced-match";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";
- sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==";
- };
- };
- "bcrypt-pbkdf-1.0.2" = {
- name = "bcrypt-pbkdf";
- packageName = "bcrypt-pbkdf";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
- sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
- };
- };
- "block-stream-0.0.9" = {
- name = "block-stream";
- packageName = "block-stream";
- version = "0.0.9";
- src = fetchurl {
- url = "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz";
- sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a";
- };
- };
- "brace-expansion-1.1.11" = {
- name = "brace-expansion";
- packageName = "brace-expansion";
- version = "1.1.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
- sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
- };
- };
- "braces-3.0.2" = {
- name = "braces";
- packageName = "braces";
- version = "3.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
- sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
- };
- };
- "browserslist-4.16.4" = {
- name = "browserslist";
- packageName = "browserslist";
- version = "4.16.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz";
- sha512 = "d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==";
- };
- };
- "buffer-from-1.1.1" = {
- name = "buffer-from";
- packageName = "buffer-from";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
- sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
- };
- };
- "buffer-writer-2.0.0" = {
- name = "buffer-writer";
- packageName = "buffer-writer";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz";
- sha512 = "a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==";
- };
- };
- "callsites-3.1.0" = {
- name = "callsites";
- packageName = "callsites";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
- sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
- };
- };
- "caniuse-lite-1.0.30001209" = {
- name = "caniuse-lite";
- packageName = "caniuse-lite";
- version = "1.0.30001209";
- src = fetchurl {
- url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001209.tgz";
- sha512 = "2Ktt4OeRM7EM/JaOZjuLzPYAIqmbwQMNnYbgooT+icoRGrKOyAxA1xhlnotBD1KArRSPsuJp3TdYcZYrL7qNxA==";
- };
- };
- "caseless-0.12.0" = {
- name = "caseless";
- packageName = "caseless";
- version = "0.12.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
- sha1 = "1b681c21ff84033c826543090689420d187151dc";
- };
- };
- "chalk-2.4.2" = {
- name = "chalk";
- packageName = "chalk";
- version = "2.4.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
- sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
- };
- };
- "chalk-4.1.0" = {
- name = "chalk";
- packageName = "chalk";
- version = "4.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz";
- sha512 = "qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==";
- };
- };
- "chardet-0.7.0" = {
- name = "chardet";
- packageName = "chardet";
- version = "0.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz";
- sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==";
- };
- };
- "chownr-1.1.4" = {
- name = "chownr";
- packageName = "chownr";
- version = "1.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz";
- sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==";
- };
- };
- "chrome-trace-event-1.0.3" = {
- name = "chrome-trace-event";
- packageName = "chrome-trace-event";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz";
- sha512 = "p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==";
- };
- };
- "cli-cursor-3.1.0" = {
- name = "cli-cursor";
- packageName = "cli-cursor";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz";
- sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==";
- };
- };
- "cli-width-3.0.0" = {
- name = "cli-width";
- packageName = "cli-width";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz";
- sha512 = "FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==";
- };
- };
- "clone-deep-4.0.1" = {
- name = "clone-deep";
- packageName = "clone-deep";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz";
- sha512 = "neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==";
- };
- };
- "code-point-at-1.1.0" = {
- name = "code-point-at";
- packageName = "code-point-at";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
- sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
- };
- };
- "color-convert-1.9.3" = {
- name = "color-convert";
- packageName = "color-convert";
- version = "1.9.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
- sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
- };
- };
- "color-convert-2.0.1" = {
- name = "color-convert";
- packageName = "color-convert";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
- sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
- };
- };
- "color-name-1.1.3" = {
- name = "color-name";
- packageName = "color-name";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
- sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
- };
- };
- "color-name-1.1.4" = {
- name = "color-name";
- packageName = "color-name";
- version = "1.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
- sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
- };
- };
- "colorette-1.2.2" = {
- name = "colorette";
- packageName = "colorette";
- version = "1.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz";
- sha512 = "MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==";
- };
- };
- "combined-stream-1.0.8" = {
- name = "combined-stream";
- packageName = "combined-stream";
- version = "1.0.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
- sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
- };
- };
- "commander-2.20.3" = {
- name = "commander";
- packageName = "commander";
- version = "2.20.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
- sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
- };
- };
- "commander-7.2.0" = {
- name = "commander";
- packageName = "commander";
- version = "7.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz";
- sha512 = "QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==";
- };
- };
- "compression-webpack-plugin-7.1.2" = {
- name = "compression-webpack-plugin";
- packageName = "compression-webpack-plugin";
- version = "7.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-7.1.2.tgz";
- sha512 = "9DKNW6ILLjx+bNBoviHDgLx6swBhWWH9ApClC9sTH2NoFfQM47BapQfovCm9zjD9v1uZwInF5a925FB9ErGQeQ==";
- };
- };
- "concat-map-0.0.1" = {
- name = "concat-map";
- packageName = "concat-map";
- version = "0.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
- sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
- };
- };
- "config-chain-1.1.12" = {
- name = "config-chain";
- packageName = "config-chain";
- version = "1.1.12";
- src = fetchurl {
- url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz";
- sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==";
- };
- };
- "console-control-strings-1.1.0" = {
- name = "console-control-strings";
- packageName = "console-control-strings";
- version = "1.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
- sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
- };
- };
- "console-stamp-3.0.0-rc4.2" = {
- name = "console-stamp";
- packageName = "console-stamp";
- version = "3.0.0-rc4.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.0-rc4.2.tgz";
- sha512 = "ncGYdZsfDbBYYiaPXr9NHfZbSSkoVzYyh8nHji9/3ovw35Jn4ozo0btcirtfIznXT4xNgBQW+IyTVLISnNumdQ==";
- };
- };
- "copy-anything-2.0.3" = {
- name = "copy-anything";
- packageName = "copy-anything";
- version = "2.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz";
- sha512 = "GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==";
- };
- };
- "core-util-is-1.0.2" = {
- name = "core-util-is";
- packageName = "core-util-is";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
- sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
- };
- };
- "cross-spawn-6.0.5" = {
- name = "cross-spawn";
- packageName = "cross-spawn";
- version = "6.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz";
- sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
- };
- };
- "cross-spawn-7.0.3" = {
- name = "cross-spawn";
- packageName = "cross-spawn";
- version = "7.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
- sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
- };
- };
- "dashdash-1.14.1" = {
- name = "dashdash";
- packageName = "dashdash";
- version = "1.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
- sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
- };
- };
- "dateformat-3.0.3" = {
- name = "dateformat";
- packageName = "dateformat";
- version = "3.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz";
- sha512 = "jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==";
- };
- };
- "de-indent-1.0.2" = {
- name = "de-indent";
- packageName = "de-indent";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz";
- sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d";
- };
- };
- "debug-3.2.7" = {
- name = "debug";
- packageName = "debug";
- version = "3.2.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";
- sha512 = "CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==";
- };
- };
- "debug-4.3.1" = {
- name = "debug";
- packageName = "debug";
- version = "4.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz";
- sha512 = "doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==";
- };
- };
- "deep-extend-0.6.0" = {
- name = "deep-extend";
- packageName = "deep-extend";
- version = "0.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
- sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==";
- };
- };
- "deep-is-0.1.3" = {
- name = "deep-is";
- packageName = "deep-is";
- version = "0.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
- sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
- };
- };
- "delayed-stream-1.0.0" = {
- name = "delayed-stream";
- packageName = "delayed-stream";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
- sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
- };
- };
- "delegates-1.0.0" = {
- name = "delegates";
- packageName = "delegates";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
- sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
- };
- };
- "detect-libc-1.0.3" = {
- name = "detect-libc";
- packageName = "detect-libc";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz";
- sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
- };
- };
- "dialog-polyfill-0.5.6" = {
- name = "dialog-polyfill";
- packageName = "dialog-polyfill";
- version = "0.5.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/dialog-polyfill/-/dialog-polyfill-0.5.6.tgz";
- sha512 = "ZbVDJI9uvxPAKze6z146rmfUZjBqNEwcnFTVamQzXH+svluiV7swmVIGr7miwADgfgt1G2JQIytypM9fbyhX4w==";
- };
- };
- "dir-glob-3.0.1" = {
- name = "dir-glob";
- packageName = "dir-glob";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";
- sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==";
- };
- };
- "doctrine-3.0.0" = {
- name = "doctrine";
- packageName = "doctrine";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";
- sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
- };
- };
- "dotenv-8.2.0" = {
- name = "dotenv";
- packageName = "dotenv";
- version = "8.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz";
- sha512 = "8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==";
- };
- };
- "ecc-jsbn-0.1.2" = {
- name = "ecc-jsbn";
- packageName = "ecc-jsbn";
- version = "0.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
- sha1 = "3a83a904e54353287874c564b7549386849a98c9";
- };
- };
- "editorconfig-0.15.3" = {
- name = "editorconfig";
- packageName = "editorconfig";
- version = "0.15.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz";
- sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==";
- };
- };
- "electron-to-chromium-1.3.717" = {
- name = "electron-to-chromium";
- packageName = "electron-to-chromium";
- version = "1.3.717";
- src = fetchurl {
- url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz";
- sha512 = "OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==";
- };
- };
- "emoji-regex-7.0.3" = {
- name = "emoji-regex";
- packageName = "emoji-regex";
- version = "7.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
- sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
- };
- };
- "emoji-regex-8.0.0" = {
- name = "emoji-regex";
- packageName = "emoji-regex";
- version = "8.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
- sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
- };
- };
- "enhanced-resolve-5.7.0" = {
- name = "enhanced-resolve";
- packageName = "enhanced-resolve";
- version = "5.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz";
- sha512 = "6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==";
- };
- };
- "enquirer-2.3.6" = {
- name = "enquirer";
- packageName = "enquirer";
- version = "2.3.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz";
- sha512 = "yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==";
- };
- };
- "envinfo-7.8.1" = {
- name = "envinfo";
- packageName = "envinfo";
- version = "7.8.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz";
- sha512 = "/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==";
- };
- };
- "errno-0.1.8" = {
- name = "errno";
- packageName = "errno";
- version = "0.1.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz";
- sha512 = "dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==";
- };
- };
- "es-module-lexer-0.4.1" = {
- name = "es-module-lexer";
- packageName = "es-module-lexer";
- version = "0.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz";
- sha512 = "ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==";
- };
- };
- "escalade-3.1.1" = {
- name = "escalade";
- packageName = "escalade";
- version = "3.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";
- sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==";
- };
- };
- "escape-string-regexp-1.0.5" = {
- name = "escape-string-regexp";
- packageName = "escape-string-regexp";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
- sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
- };
- };
- "eslint-6.8.0" = {
- name = "eslint";
- packageName = "eslint";
- version = "6.8.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz";
- sha512 = "K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==";
- };
- };
- "eslint-config-google-0.14.0" = {
- name = "eslint-config-google";
- packageName = "eslint-config-google";
- version = "0.14.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz";
- sha512 = "WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==";
- };
- };
- "eslint-plugin-vue-6.2.2" = {
- name = "eslint-plugin-vue";
- packageName = "eslint-plugin-vue";
- version = "6.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz";
- sha512 = "Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==";
- };
- };
- "eslint-scope-5.1.1" = {
- name = "eslint-scope";
- packageName = "eslint-scope";
- version = "5.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz";
- sha512 = "2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==";
- };
- };
- "eslint-utils-1.4.3" = {
- name = "eslint-utils";
- packageName = "eslint-utils";
- version = "1.4.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz";
- sha512 = "fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==";
- };
- };
- "eslint-utils-2.1.0" = {
- name = "eslint-utils";
- packageName = "eslint-utils";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz";
- sha512 = "w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==";
- };
- };
- "eslint-visitor-keys-1.3.0" = {
- name = "eslint-visitor-keys";
- packageName = "eslint-visitor-keys";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz";
- sha512 = "6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==";
- };
- };
- "eslint-visitor-keys-2.0.0" = {
- name = "eslint-visitor-keys";
- packageName = "eslint-visitor-keys";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz";
- sha512 = "QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==";
- };
- };
- "espree-6.2.1" = {
- name = "espree";
- packageName = "espree";
- version = "6.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz";
- sha512 = "ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==";
- };
- };
- "esprima-4.0.1" = {
- name = "esprima";
- packageName = "esprima";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
- sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
- };
- };
- "esquery-1.4.0" = {
- name = "esquery";
- packageName = "esquery";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz";
- sha512 = "cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==";
- };
- };
- "esrecurse-4.3.0" = {
- name = "esrecurse";
- packageName = "esrecurse";
- version = "4.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz";
- sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==";
- };
- };
- "estraverse-4.3.0" = {
- name = "estraverse";
- packageName = "estraverse";
- version = "4.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
- sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
- };
- };
- "estraverse-5.2.0" = {
- name = "estraverse";
- packageName = "estraverse";
- version = "5.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz";
- sha512 = "BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==";
- };
- };
- "esutils-2.0.3" = {
- name = "esutils";
- packageName = "esutils";
- version = "2.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
- sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
- };
- };
- "events-3.3.0" = {
- name = "events";
- packageName = "events";
- version = "3.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/events/-/events-3.3.0.tgz";
- sha512 = "mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==";
- };
- };
- "execa-5.0.0" = {
- name = "execa";
- packageName = "execa";
- version = "5.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz";
- sha512 = "ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==";
- };
- };
- "extend-3.0.2" = {
- name = "extend";
- packageName = "extend";
- version = "3.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
- sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
- };
- };
- "external-editor-3.1.0" = {
- name = "external-editor";
- packageName = "external-editor";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz";
- sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==";
- };
- };
- "extsprintf-1.3.0" = {
- name = "extsprintf";
- packageName = "extsprintf";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
- sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
- };
- };
- "fast-deep-equal-3.1.3" = {
- name = "fast-deep-equal";
- packageName = "fast-deep-equal";
- version = "3.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
- sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
- };
- };
- "fast-glob-3.2.5" = {
- name = "fast-glob";
- packageName = "fast-glob";
- version = "3.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz";
- sha512 = "2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==";
- };
- };
- "fast-json-stable-stringify-2.1.0" = {
- name = "fast-json-stable-stringify";
- packageName = "fast-json-stable-stringify";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
- sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
- };
- };
- "fast-levenshtein-2.0.6" = {
- name = "fast-levenshtein";
- packageName = "fast-levenshtein";
- version = "2.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
- sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
- };
- };
- "fastest-levenshtein-1.0.12" = {
- name = "fastest-levenshtein";
- packageName = "fastest-levenshtein";
- version = "1.0.12";
- src = fetchurl {
- url = "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz";
- sha512 = "On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==";
- };
- };
- "fastq-1.11.0" = {
- name = "fastq";
- packageName = "fastq";
- version = "1.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz";
- sha512 = "7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==";
- };
- };
- "figures-3.2.0" = {
- name = "figures";
- packageName = "figures";
- version = "3.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz";
- sha512 = "yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==";
- };
- };
- "file-entry-cache-5.0.1" = {
- name = "file-entry-cache";
- packageName = "file-entry-cache";
- version = "5.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
- sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==";
- };
- };
- "fill-range-7.0.1" = {
- name = "fill-range";
- packageName = "fill-range";
- version = "7.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
- sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
- };
- };
- "find-up-4.1.0" = {
- name = "find-up";
- packageName = "find-up";
- version = "4.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz";
- sha512 = "PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==";
- };
- };
- "flat-cache-2.0.1" = {
- name = "flat-cache";
- packageName = "flat-cache";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz";
- sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==";
- };
- };
- "flatted-2.0.2" = {
- name = "flatted";
- packageName = "flatted";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz";
- sha512 = "r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==";
- };
- };
- "forever-agent-0.6.1" = {
- name = "forever-agent";
- packageName = "forever-agent";
- version = "0.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
- sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
- };
- };
- "form-data-2.3.3" = {
- name = "form-data";
- packageName = "form-data";
- version = "2.3.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
- sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
- };
- };
- "fs-minipass-1.2.7" = {
- name = "fs-minipass";
- packageName = "fs-minipass";
- version = "1.2.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz";
- sha512 = "GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==";
- };
- };
- "fs.realpath-1.0.0" = {
- name = "fs.realpath";
- packageName = "fs.realpath";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
- sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
- };
- };
- "fstream-1.0.12" = {
- name = "fstream";
- packageName = "fstream";
- version = "1.0.12";
- src = fetchurl {
- url = "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz";
- sha512 = "WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==";
- };
- };
- "function-bind-1.1.1" = {
- name = "function-bind";
- packageName = "function-bind";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
- sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
- };
- };
- "functional-red-black-tree-1.0.1" = {
- name = "functional-red-black-tree";
- packageName = "functional-red-black-tree";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
- sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
- };
- };
- "gauge-2.7.4" = {
- name = "gauge";
- packageName = "gauge";
- version = "2.7.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
- sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
- };
- };
- "get-stream-6.0.1" = {
- name = "get-stream";
- packageName = "get-stream";
- version = "6.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz";
- sha512 = "ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==";
- };
- };
- "getpass-0.1.7" = {
- name = "getpass";
- packageName = "getpass";
- version = "0.1.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
- sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
- };
- };
- "glob-7.1.6" = {
- name = "glob";
- packageName = "glob";
- version = "7.1.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";
- sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==";
- };
- };
- "glob-parent-5.1.2" = {
- name = "glob-parent";
- packageName = "glob-parent";
- version = "5.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";
- sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==";
- };
- };
- "glob-to-regexp-0.4.1" = {
- name = "glob-to-regexp";
- packageName = "glob-to-regexp";
- version = "0.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz";
- sha512 = "lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==";
- };
- };
- "globals-12.4.0" = {
- name = "globals";
- packageName = "globals";
- version = "12.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz";
- sha512 = "BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==";
- };
- };
- "globby-11.0.3" = {
- name = "globby";
- packageName = "globby";
- version = "11.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz";
- sha512 = "ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==";
- };
- };
- "graceful-fs-4.2.6" = {
- name = "graceful-fs";
- packageName = "graceful-fs";
- version = "4.2.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz";
- sha512 = "nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==";
- };
- };
- "har-schema-2.0.0" = {
- name = "har-schema";
- packageName = "har-schema";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
- sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
- };
- };
- "har-validator-5.1.5" = {
- name = "har-validator";
- packageName = "har-validator";
- version = "5.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";
- sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==";
- };
- };
- "has-1.0.3" = {
- name = "has";
- packageName = "has";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
- sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
- };
- };
- "has-flag-3.0.0" = {
- name = "has-flag";
- packageName = "has-flag";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
- sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
- };
- };
- "has-flag-4.0.0" = {
- name = "has-flag";
- packageName = "has-flag";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
- sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
- };
- };
- "has-unicode-2.0.1" = {
- name = "has-unicode";
- packageName = "has-unicode";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
- sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
- };
- };
- "he-1.2.0" = {
- name = "he";
- packageName = "he";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
- sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
- };
- };
- "http-signature-1.2.0" = {
- name = "http-signature";
- packageName = "http-signature";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
- sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
- };
- };
- "human-signals-2.1.0" = {
- name = "human-signals";
- packageName = "human-signals";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz";
- sha512 = "B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==";
- };
- };
- "iconv-lite-0.4.24" = {
- name = "iconv-lite";
- packageName = "iconv-lite";
- version = "0.4.24";
- src = fetchurl {
- url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
- sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
- };
- };
- "ignore-4.0.6" = {
- name = "ignore";
- packageName = "ignore";
- version = "4.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz";
- sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==";
- };
- };
- "ignore-5.1.8" = {
- name = "ignore";
- packageName = "ignore";
- version = "5.1.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz";
- sha512 = "BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==";
- };
- };
- "ignore-walk-3.0.3" = {
- name = "ignore-walk";
- packageName = "ignore-walk";
- version = "3.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz";
- sha512 = "m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==";
- };
- };
- "image-size-0.5.5" = {
- name = "image-size";
- packageName = "image-size";
- version = "0.5.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz";
- sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c";
- };
- };
- "import-fresh-3.3.0" = {
- name = "import-fresh";
- packageName = "import-fresh";
- version = "3.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz";
- sha512 = "veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==";
- };
- };
- "import-local-3.0.2" = {
- name = "import-local";
- packageName = "import-local";
- version = "3.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz";
- sha512 = "vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==";
- };
- };
- "imurmurhash-0.1.4" = {
- name = "imurmurhash";
- packageName = "imurmurhash";
- version = "0.1.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
- sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
- };
- };
- "inflight-1.0.6" = {
- name = "inflight";
- packageName = "inflight";
- version = "1.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
- sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
- };
- };
- "inherits-2.0.4" = {
- name = "inherits";
- packageName = "inherits";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
- sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
- };
- };
- "ini-1.3.8" = {
- name = "ini";
- packageName = "ini";
- version = "1.3.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz";
- sha512 = "JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==";
- };
- };
- "inquirer-7.3.3" = {
- name = "inquirer";
- packageName = "inquirer";
- version = "7.3.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz";
- sha512 = "JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==";
- };
- };
- "interpret-2.2.0" = {
- name = "interpret";
- packageName = "interpret";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz";
- sha512 = "Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==";
- };
- };
- "is-core-module-2.2.0" = {
- name = "is-core-module";
- packageName = "is-core-module";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz";
- sha512 = "XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==";
- };
- };
- "is-extglob-2.1.1" = {
- name = "is-extglob";
- packageName = "is-extglob";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
- sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
- };
- };
- "is-fullwidth-code-point-1.0.0" = {
- name = "is-fullwidth-code-point";
- packageName = "is-fullwidth-code-point";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
- sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
- };
- };
- "is-fullwidth-code-point-2.0.0" = {
- name = "is-fullwidth-code-point";
- packageName = "is-fullwidth-code-point";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
- sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
- };
- };
- "is-fullwidth-code-point-3.0.0" = {
- name = "is-fullwidth-code-point";
- packageName = "is-fullwidth-code-point";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
- sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
- };
- };
- "is-glob-4.0.1" = {
- name = "is-glob";
- packageName = "is-glob";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
- sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
- };
- };
- "is-number-7.0.0" = {
- name = "is-number";
- packageName = "is-number";
- version = "7.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
- sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
- };
- };
- "is-plain-object-2.0.4" = {
- name = "is-plain-object";
- packageName = "is-plain-object";
- version = "2.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
- sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
- };
- };
- "is-stream-2.0.0" = {
- name = "is-stream";
- packageName = "is-stream";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz";
- sha512 = "XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==";
- };
- };
- "is-typedarray-1.0.0" = {
- name = "is-typedarray";
- packageName = "is-typedarray";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
- sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
- };
- };
- "is-what-3.14.1" = {
- name = "is-what";
- packageName = "is-what";
- version = "3.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz";
- sha512 = "sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==";
- };
- };
- "isarray-1.0.0" = {
- name = "isarray";
- packageName = "isarray";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
- sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
- };
- };
- "isexe-2.0.0" = {
- name = "isexe";
- packageName = "isexe";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
- sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
- };
- };
- "isobject-3.0.1" = {
- name = "isobject";
- packageName = "isobject";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
- sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
- };
- };
- "isstream-0.1.2" = {
- name = "isstream";
- packageName = "isstream";
- version = "0.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
- sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
- };
- };
- "jest-worker-26.6.2" = {
- name = "jest-worker";
- packageName = "jest-worker";
- version = "26.6.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz";
- sha512 = "KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==";
- };
- };
- "js-beautify-1.13.13" = {
- name = "js-beautify";
- packageName = "js-beautify";
- version = "1.13.13";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.13.tgz";
- sha512 = "oH+nc0U5mOAqX8M5JO1J0Pw/7Q35sAdOsM5W3i87pir9Ntx6P/5Gx1xLNoK+MGyvHk4rqqRCE4Oq58H6xl2W7A==";
- };
- };
- "js-tokens-4.0.0" = {
- name = "js-tokens";
- packageName = "js-tokens";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz";
- sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
- };
- };
- "js-yaml-3.14.1" = {
- name = "js-yaml";
- packageName = "js-yaml";
- version = "3.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz";
- sha512 = "okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==";
- };
- };
- "jsbn-0.1.1" = {
- name = "jsbn";
- packageName = "jsbn";
- version = "0.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
- sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
- };
- };
- "json-parse-better-errors-1.0.2" = {
- name = "json-parse-better-errors";
- packageName = "json-parse-better-errors";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
- sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
- };
- };
- "json-schema-0.2.3" = {
- name = "json-schema";
- packageName = "json-schema";
- version = "0.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
- sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
- };
- };
- "json-schema-traverse-0.4.1" = {
- name = "json-schema-traverse";
- packageName = "json-schema-traverse";
- version = "0.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
- sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
- };
- };
- "json-stable-stringify-without-jsonify-1.0.1" = {
- name = "json-stable-stringify-without-jsonify";
- packageName = "json-stable-stringify-without-jsonify";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
- sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
- };
- };
- "json-stringify-safe-5.0.1" = {
- name = "json-stringify-safe";
- packageName = "json-stringify-safe";
- version = "5.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
- sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
- };
- };
- "jsprim-1.4.1" = {
- name = "jsprim";
- packageName = "jsprim";
- version = "1.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
- sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
- };
- };
- "kind-of-6.0.3" = {
- name = "kind-of";
- packageName = "kind-of";
- version = "6.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";
- sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
- };
- };
- "less-3.13.1" = {
- name = "less";
- packageName = "less";
- version = "3.13.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/less/-/less-3.13.1.tgz";
- sha512 = "SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==";
- };
- };
- "levn-0.3.0" = {
- name = "levn";
- packageName = "levn";
- version = "0.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
- sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
- };
- };
- "loader-runner-4.2.0" = {
- name = "loader-runner";
- packageName = "loader-runner";
- version = "4.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz";
- sha512 = "92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==";
- };
- };
- "locate-path-5.0.0" = {
- name = "locate-path";
- packageName = "locate-path";
- version = "5.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz";
- sha512 = "t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==";
- };
- };
- "lodash-4.17.21" = {
- name = "lodash";
- packageName = "lodash";
- version = "4.17.21";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";
- sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==";
- };
- };
- "lru-cache-4.1.5" = {
- name = "lru-cache";
- packageName = "lru-cache";
- version = "4.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
- sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
- };
- };
- "lru-cache-6.0.0" = {
- name = "lru-cache";
- packageName = "lru-cache";
- version = "6.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz";
- sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==";
- };
- };
- "make-dir-2.1.0" = {
- name = "make-dir";
- packageName = "make-dir";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz";
- sha512 = "LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==";
- };
- };
- "merge-stream-2.0.0" = {
- name = "merge-stream";
- packageName = "merge-stream";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz";
- sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==";
- };
- };
- "merge2-1.4.1" = {
- name = "merge2";
- packageName = "merge2";
- version = "1.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz";
- sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==";
- };
- };
- "micromatch-4.0.4" = {
- name = "micromatch";
- packageName = "micromatch";
- version = "4.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz";
- sha512 = "pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==";
- };
- };
- "mime-1.6.0" = {
- name = "mime";
- packageName = "mime";
- version = "1.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
- sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
- };
- };
- "mime-db-1.47.0" = {
- name = "mime-db";
- packageName = "mime-db";
- version = "1.47.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz";
- sha512 = "QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==";
- };
- };
- "mime-types-2.1.30" = {
- name = "mime-types";
- packageName = "mime-types";
- version = "2.1.30";
- src = fetchurl {
- url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz";
- sha512 = "crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==";
- };
- };
- "mimic-fn-2.1.0" = {
- name = "mimic-fn";
- packageName = "mimic-fn";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz";
- sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==";
- };
- };
- "minimatch-3.0.4" = {
- name = "minimatch";
- packageName = "minimatch";
- version = "3.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
- sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
- };
- };
- "minimist-1.2.5" = {
- name = "minimist";
- packageName = "minimist";
- version = "1.2.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
- sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
- };
- };
- "minipass-2.9.0" = {
- name = "minipass";
- packageName = "minipass";
- version = "2.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz";
- sha512 = "wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==";
- };
- };
- "minizlib-1.3.3" = {
- name = "minizlib";
- packageName = "minizlib";
- version = "1.3.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz";
- sha512 = "6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==";
- };
- };
- "mkdirp-0.5.5" = {
- name = "mkdirp";
- packageName = "mkdirp";
- version = "0.5.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
- sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
- };
- };
- "mkdirp-1.0.4" = {
- name = "mkdirp";
- packageName = "mkdirp";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz";
- sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==";
- };
- };
- "mnemonist-0.38.3" = {
- name = "mnemonist";
- packageName = "mnemonist";
- version = "0.38.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz";
- sha512 = "2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==";
- };
- };
- "ms-2.1.2" = {
- name = "ms";
- packageName = "ms";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
- sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
- };
- };
- "mute-stream-0.0.8" = {
- name = "mute-stream";
- packageName = "mute-stream";
- version = "0.0.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz";
- sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==";
- };
- };
- "native-request-1.0.8" = {
- name = "native-request";
- packageName = "native-request";
- version = "1.0.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz";
- sha512 = "vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==";
- };
- };
- "natural-compare-1.4.0" = {
- name = "natural-compare";
- packageName = "natural-compare";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
- sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
- };
- };
- "needle-2.6.0" = {
- name = "needle";
- packageName = "needle";
- version = "2.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz";
- sha512 = "KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==";
- };
- };
- "neo-async-2.6.2" = {
- name = "neo-async";
- packageName = "neo-async";
- version = "2.6.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz";
- sha512 = "Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==";
- };
- };
- "nice-try-1.0.5" = {
- name = "nice-try";
- packageName = "nice-try";
- version = "1.0.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz";
- sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
- };
- };
- "node-addon-api-3.1.0" = {
- name = "node-addon-api";
- packageName = "node-addon-api";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz";
- sha512 = "flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==";
- };
- };
- "node-gyp-3.8.0" = {
- name = "node-gyp";
- packageName = "node-gyp";
- version = "3.8.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz";
- sha512 = "3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==";
- };
- };
- "node-pre-gyp-0.11.0" = {
- name = "node-pre-gyp";
- packageName = "node-pre-gyp";
- version = "0.11.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz";
- sha512 = "TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==";
- };
- };
- "node-releases-1.1.71" = {
- name = "node-releases";
- packageName = "node-releases";
- version = "1.1.71";
- src = fetchurl {
- url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz";
- sha512 = "zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==";
- };
- };
- "nopt-3.0.6" = {
- name = "nopt";
- packageName = "nopt";
- version = "3.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
- sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
- };
- };
- "nopt-4.0.3" = {
- name = "nopt";
- packageName = "nopt";
- version = "4.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz";
- sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==";
- };
- };
- "nopt-5.0.0" = {
- name = "nopt";
- packageName = "nopt";
- version = "5.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz";
- sha512 = "Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==";
- };
- };
- "npm-bundled-1.1.1" = {
- name = "npm-bundled";
- packageName = "npm-bundled";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz";
- sha512 = "gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==";
- };
- };
- "npm-normalize-package-bin-1.0.1" = {
- name = "npm-normalize-package-bin";
- packageName = "npm-normalize-package-bin";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz";
- sha512 = "EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==";
- };
- };
- "npm-packlist-1.4.8" = {
- name = "npm-packlist";
- packageName = "npm-packlist";
- version = "1.4.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz";
- sha512 = "5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==";
- };
- };
- "npm-run-path-4.0.1" = {
- name = "npm-run-path";
- packageName = "npm-run-path";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz";
- sha512 = "S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==";
- };
- };
- "npmlog-4.1.2" = {
- name = "npmlog";
- packageName = "npmlog";
- version = "4.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
- sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==";
- };
- };
- "number-is-nan-1.0.1" = {
- name = "number-is-nan";
- packageName = "number-is-nan";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
- sha1 = "097b602b53422a522c1afb8790318336941a011d";
- };
- };
- "oauth-sign-0.9.0" = {
- name = "oauth-sign";
- packageName = "oauth-sign";
- version = "0.9.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
- sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
- };
- };
- "object-assign-4.1.1" = {
- name = "object-assign";
- packageName = "object-assign";
- version = "4.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
- sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
- };
- };
- "obliterator-1.6.1" = {
- name = "obliterator";
- packageName = "obliterator";
- version = "1.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz";
- sha512 = "9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==";
- };
- };
- "once-1.4.0" = {
- name = "once";
- packageName = "once";
- version = "1.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
- sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
- };
- };
- "onetime-5.1.2" = {
- name = "onetime";
- packageName = "onetime";
- version = "5.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz";
- sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==";
- };
- };
- "optionator-0.8.3" = {
- name = "optionator";
- packageName = "optionator";
- version = "0.8.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
- sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
- };
- };
- "os-homedir-1.0.2" = {
- name = "os-homedir";
- packageName = "os-homedir";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
- sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
- };
- };
- "os-tmpdir-1.0.2" = {
- name = "os-tmpdir";
- packageName = "os-tmpdir";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
- sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
- };
- };
- "osenv-0.1.5" = {
- name = "osenv";
- packageName = "osenv";
- version = "0.1.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
- sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
- };
- };
- "p-limit-2.3.0" = {
- name = "p-limit";
- packageName = "p-limit";
- version = "2.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz";
- sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
- };
- };
- "p-limit-3.1.0" = {
- name = "p-limit";
- packageName = "p-limit";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz";
- sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==";
- };
- };
- "p-locate-4.1.0" = {
- name = "p-locate";
- packageName = "p-locate";
- version = "4.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz";
- sha512 = "R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==";
- };
- };
- "p-try-2.2.0" = {
- name = "p-try";
- packageName = "p-try";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
- sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
- };
- };
- "packet-reader-1.0.0" = {
- name = "packet-reader";
- packageName = "packet-reader";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz";
- sha512 = "HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==";
- };
- };
- "parent-module-1.0.1" = {
- name = "parent-module";
- packageName = "parent-module";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";
- sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
- };
- };
- "path-exists-4.0.0" = {
- name = "path-exists";
- packageName = "path-exists";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
- sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
- };
- };
- "path-is-absolute-1.0.1" = {
- name = "path-is-absolute";
- packageName = "path-is-absolute";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
- sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
- };
- };
- "path-key-2.0.1" = {
- name = "path-key";
- packageName = "path-key";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
- sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
- };
- };
- "path-key-3.1.1" = {
- name = "path-key";
- packageName = "path-key";
- version = "3.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
- sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
- };
- };
- "path-parse-1.0.6" = {
- name = "path-parse";
- packageName = "path-parse";
- version = "1.0.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
- sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
- };
- };
- "path-type-4.0.0" = {
- name = "path-type";
- packageName = "path-type";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";
- sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==";
- };
- };
- "performance-now-2.1.0" = {
- name = "performance-now";
- packageName = "performance-now";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
- sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
- };
- };
- "pg-8.6.0" = {
- name = "pg";
- packageName = "pg";
- version = "8.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz";
- sha512 = "qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ==";
- };
- };
- "pg-connection-string-2.5.0" = {
- name = "pg-connection-string";
- packageName = "pg-connection-string";
- version = "2.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz";
- sha512 = "r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==";
- };
- };
- "pg-int8-1.0.1" = {
- name = "pg-int8";
- packageName = "pg-int8";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz";
- sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==";
- };
- };
- "pg-pool-3.3.0" = {
- name = "pg-pool";
- packageName = "pg-pool";
- version = "3.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz";
- sha512 = "0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==";
- };
- };
- "pg-protocol-1.5.0" = {
- name = "pg-protocol";
- packageName = "pg-protocol";
- version = "1.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz";
- sha512 = "muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==";
- };
- };
- "pg-types-2.2.0" = {
- name = "pg-types";
- packageName = "pg-types";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz";
- sha512 = "qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==";
- };
- };
- "pgpass-1.0.4" = {
- name = "pgpass";
- packageName = "pgpass";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz";
- sha512 = "YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==";
- };
- };
- "picomatch-2.2.3" = {
- name = "picomatch";
- packageName = "picomatch";
- version = "2.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz";
- sha512 = "KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==";
- };
- };
- "pify-4.0.1" = {
- name = "pify";
- packageName = "pify";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz";
- sha512 = "uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==";
- };
- };
- "pkg-dir-4.2.0" = {
- name = "pkg-dir";
- packageName = "pkg-dir";
- version = "4.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz";
- sha512 = "HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==";
- };
- };
- "postgres-array-2.0.0" = {
- name = "postgres-array";
- packageName = "postgres-array";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz";
- sha512 = "VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==";
- };
- };
- "postgres-bytea-1.0.0" = {
- name = "postgres-bytea";
- packageName = "postgres-bytea";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz";
- sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35";
- };
- };
- "postgres-date-1.0.7" = {
- name = "postgres-date";
- packageName = "postgres-date";
- version = "1.0.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz";
- sha512 = "suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==";
- };
- };
- "postgres-interval-1.2.0" = {
- name = "postgres-interval";
- packageName = "postgres-interval";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz";
- sha512 = "9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==";
- };
- };
- "prelude-ls-1.1.2" = {
- name = "prelude-ls";
- packageName = "prelude-ls";
- version = "1.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
- sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
- };
- };
- "process-nextick-args-2.0.1" = {
- name = "process-nextick-args";
- packageName = "process-nextick-args";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
- sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
- };
- };
- "progress-2.0.3" = {
- name = "progress";
- packageName = "progress";
- version = "2.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz";
- sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
- };
- };
- "proto-list-1.2.4" = {
- name = "proto-list";
- packageName = "proto-list";
- version = "1.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
- sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
- };
- };
- "prr-1.0.1" = {
- name = "prr";
- packageName = "prr";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz";
- sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
- };
- };
- "pseudomap-1.0.2" = {
- name = "pseudomap";
- packageName = "pseudomap";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
- sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
- };
- };
- "psl-1.8.0" = {
- name = "psl";
- packageName = "psl";
- version = "1.8.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";
- sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==";
- };
- };
- "punycode-2.1.1" = {
- name = "punycode";
- packageName = "punycode";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
- sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
- };
- };
- "qs-6.5.2" = {
- name = "qs";
- packageName = "qs";
- version = "6.5.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
- sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
- };
- };
- "queue-microtask-1.2.3" = {
- name = "queue-microtask";
- packageName = "queue-microtask";
- version = "1.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";
- sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==";
- };
- };
- "randombytes-2.1.0" = {
- name = "randombytes";
- packageName = "randombytes";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
- sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
- };
- };
- "rc-1.2.8" = {
- name = "rc";
- packageName = "rc";
- version = "1.2.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";
- sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==";
- };
- };
- "readable-stream-2.3.7" = {
- name = "readable-stream";
- packageName = "readable-stream";
- version = "2.3.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";
- sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
- };
- };
- "readable-stream-3.6.0" = {
- name = "readable-stream";
- packageName = "readable-stream";
- version = "3.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
- sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
- };
- };
- "rechoir-0.7.0" = {
- name = "rechoir";
- packageName = "rechoir";
- version = "0.7.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz";
- sha512 = "ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==";
- };
- };
- "regexpp-2.0.1" = {
- name = "regexpp";
- packageName = "regexpp";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz";
- sha512 = "lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==";
- };
- };
- "regexpp-3.1.0" = {
- name = "regexpp";
- packageName = "regexpp";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz";
- sha512 = "ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==";
- };
- };
- "request-2.88.2" = {
- name = "request";
- packageName = "request";
- version = "2.88.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
- sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
- };
- };
- "resolve-1.20.0" = {
- name = "resolve";
- packageName = "resolve";
- version = "1.20.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz";
- sha512 = "wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==";
- };
- };
- "resolve-cwd-3.0.0" = {
- name = "resolve-cwd";
- packageName = "resolve-cwd";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz";
- sha512 = "OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==";
- };
- };
- "resolve-from-4.0.0" = {
- name = "resolve-from";
- packageName = "resolve-from";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";
- sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
- };
- };
- "resolve-from-5.0.0" = {
- name = "resolve-from";
- packageName = "resolve-from";
- version = "5.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz";
- sha512 = "qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==";
- };
- };
- "restore-cursor-3.1.0" = {
- name = "restore-cursor";
- packageName = "restore-cursor";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz";
- sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==";
- };
- };
- "reusify-1.0.4" = {
- name = "reusify";
- packageName = "reusify";
- version = "1.0.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";
- sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==";
- };
- };
- "rimraf-2.6.3" = {
- name = "rimraf";
- packageName = "rimraf";
- version = "2.6.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
- sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
- };
- };
- "run-async-2.4.1" = {
- name = "run-async";
- packageName = "run-async";
- version = "2.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz";
- sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==";
- };
- };
- "run-parallel-1.2.0" = {
- name = "run-parallel";
- packageName = "run-parallel";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";
- sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==";
- };
- };
- "rxjs-6.6.7" = {
- name = "rxjs";
- packageName = "rxjs";
- version = "6.6.7";
- src = fetchurl {
- url = "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz";
- sha512 = "hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==";
- };
- };
- "safe-buffer-5.1.2" = {
- name = "safe-buffer";
- packageName = "safe-buffer";
- version = "5.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
- sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
- };
- };
- "safe-buffer-5.2.1" = {
- name = "safe-buffer";
- packageName = "safe-buffer";
- version = "5.2.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
- sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
- };
- };
- "safer-buffer-2.1.2" = {
- name = "safer-buffer";
- packageName = "safer-buffer";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
- sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
- };
- };
- "sax-1.2.4" = {
- name = "sax";
- packageName = "sax";
- version = "1.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
- sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
- };
- };
- "schema-utils-3.0.0" = {
- name = "schema-utils";
- packageName = "schema-utils";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz";
- sha512 = "6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==";
- };
- };
- "semver-5.3.0" = {
- name = "semver";
- packageName = "semver";
- version = "5.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
- sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
- };
- };
- "semver-5.7.1" = {
- name = "semver";
- packageName = "semver";
- version = "5.7.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
- sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
- };
- };
- "semver-6.3.0" = {
- name = "semver";
- packageName = "semver";
- version = "6.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz";
- sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==";
- };
- };
- "semver-7.3.5" = {
- name = "semver";
- packageName = "semver";
- version = "7.3.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz";
- sha512 = "PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==";
- };
- };
- "serialize-javascript-5.0.1" = {
- name = "serialize-javascript";
- packageName = "serialize-javascript";
- version = "5.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz";
- sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==";
- };
- };
- "set-blocking-2.0.0" = {
- name = "set-blocking";
- packageName = "set-blocking";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
- sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
- };
- };
- "shallow-clone-3.0.1" = {
- name = "shallow-clone";
- packageName = "shallow-clone";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz";
- sha512 = "/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==";
- };
- };
- "shebang-command-1.2.0" = {
- name = "shebang-command";
- packageName = "shebang-command";
- version = "1.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
- sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
- };
- };
- "shebang-command-2.0.0" = {
- name = "shebang-command";
- packageName = "shebang-command";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
- sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
- };
- };
- "shebang-regex-1.0.0" = {
- name = "shebang-regex";
- packageName = "shebang-regex";
- version = "1.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
- sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
- };
- };
- "shebang-regex-3.0.0" = {
- name = "shebang-regex";
- packageName = "shebang-regex";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
- sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
- };
- };
- "sigmund-1.0.1" = {
- name = "sigmund";
- packageName = "sigmund";
- version = "1.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
- sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
- };
- };
- "signal-exit-3.0.3" = {
- name = "signal-exit";
- packageName = "signal-exit";
- version = "3.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz";
- sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==";
- };
- };
- "slash-3.0.0" = {
- name = "slash";
- packageName = "slash";
- version = "3.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";
- sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==";
- };
- };
- "slice-ansi-2.1.0" = {
- name = "slice-ansi";
- packageName = "slice-ansi";
- version = "2.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz";
- sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==";
- };
- };
- "source-list-map-2.0.1" = {
- name = "source-list-map";
- packageName = "source-list-map";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz";
- sha512 = "qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==";
- };
- };
- "source-map-0.6.1" = {
- name = "source-map";
- packageName = "source-map";
- version = "0.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
- sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
- };
- };
- "source-map-0.7.3" = {
- name = "source-map";
- packageName = "source-map";
- version = "0.7.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz";
- sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==";
- };
- };
- "source-map-support-0.5.19" = {
- name = "source-map-support";
- packageName = "source-map-support";
- version = "0.5.19";
- src = fetchurl {
- url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz";
- sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==";
- };
- };
- "spectre.css-0.5.9" = {
- name = "spectre.css";
- packageName = "spectre.css";
- version = "0.5.9";
- src = fetchurl {
- url = "https://registry.npmjs.org/spectre.css/-/spectre.css-0.5.9.tgz";
- sha512 = "9jUqwZmCnvflrxFGcK+ize43TvjwDjqMwZPVubEtSIHzvinH0TBUESm1LcOJx3Ur7bdPaeOHQIjOqBl1Y5kLFw==";
- };
- };
- "split2-3.2.2" = {
- name = "split2";
- packageName = "split2";
- version = "3.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz";
- sha512 = "9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==";
- };
- };
- "sprintf-js-1.0.3" = {
- name = "sprintf-js";
- packageName = "sprintf-js";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
- sha1 = "04e6926f662895354f3dd015203633b857297e2c";
- };
- };
- "sqlite3-5.0.2" = {
- name = "sqlite3";
- packageName = "sqlite3";
- version = "5.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz";
- sha512 = "1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA==";
- };
- };
- "sshpk-1.16.1" = {
- name = "sshpk";
- packageName = "sshpk";
- version = "1.16.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
- sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
- };
- };
- "string-width-1.0.2" = {
- name = "string-width";
- packageName = "string-width";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
- sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
- };
- };
- "string-width-2.1.1" = {
- name = "string-width";
- packageName = "string-width";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
- sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
- };
- };
- "string-width-3.1.0" = {
- name = "string-width";
- packageName = "string-width";
- version = "3.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
- sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
- };
- };
- "string-width-4.2.2" = {
- name = "string-width";
- packageName = "string-width";
- version = "4.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz";
- sha512 = "XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==";
- };
- };
- "string_decoder-1.1.1" = {
- name = "string_decoder";
- packageName = "string_decoder";
- version = "1.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
- sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
- };
- };
- "string_decoder-1.3.0" = {
- name = "string_decoder";
- packageName = "string_decoder";
- version = "1.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz";
- sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==";
- };
- };
- "strip-ansi-3.0.1" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "3.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
- sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
- };
- };
- "strip-ansi-4.0.0" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
- sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
- };
- };
- "strip-ansi-5.2.0" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "5.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
- sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
- };
- };
- "strip-ansi-6.0.0" = {
- name = "strip-ansi";
- packageName = "strip-ansi";
- version = "6.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz";
- sha512 = "AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==";
- };
- };
- "strip-final-newline-2.0.0" = {
- name = "strip-final-newline";
- packageName = "strip-final-newline";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz";
- sha512 = "BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==";
- };
- };
- "strip-json-comments-2.0.1" = {
- name = "strip-json-comments";
- packageName = "strip-json-comments";
- version = "2.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
- sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
- };
- };
- "strip-json-comments-3.1.1" = {
- name = "strip-json-comments";
- packageName = "strip-json-comments";
- version = "3.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
- sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==";
- };
- };
- "supports-color-5.5.0" = {
- name = "supports-color";
- packageName = "supports-color";
- version = "5.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
- sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
- };
- };
- "supports-color-7.2.0" = {
- name = "supports-color";
- packageName = "supports-color";
- version = "7.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
- sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
- };
- };
- "table-5.4.6" = {
- name = "table";
- packageName = "table";
- version = "5.4.6";
- src = fetchurl {
- url = "https://registry.npmjs.org/table/-/table-5.4.6.tgz";
- sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==";
- };
- };
- "tapable-2.2.0" = {
- name = "tapable";
- packageName = "tapable";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz";
- sha512 = "FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==";
- };
- };
- "tar-2.2.2" = {
- name = "tar";
- packageName = "tar";
- version = "2.2.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz";
- sha512 = "FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==";
- };
- };
- "tar-4.4.13" = {
- name = "tar";
- packageName = "tar";
- version = "4.4.13";
- src = fetchurl {
- url = "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz";
- sha512 = "w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==";
- };
- };
- "terser-5.6.1" = {
- name = "terser";
- packageName = "terser";
- version = "5.6.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz";
- sha512 = "yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==";
- };
- };
- "terser-webpack-plugin-5.1.1" = {
- name = "terser-webpack-plugin";
- packageName = "terser-webpack-plugin";
- version = "5.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz";
- sha512 = "5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==";
- };
- };
- "text-table-0.2.0" = {
- name = "text-table";
- packageName = "text-table";
- version = "0.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
- sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
- };
- };
- "through-2.3.8" = {
- name = "through";
- packageName = "through";
- version = "2.3.8";
- src = fetchurl {
- url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
- sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
- };
- };
- "tmp-0.0.33" = {
- name = "tmp";
- packageName = "tmp";
- version = "0.0.33";
- src = fetchurl {
- url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz";
- sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==";
- };
- };
- "to-regex-range-5.0.1" = {
- name = "to-regex-range";
- packageName = "to-regex-range";
- version = "5.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
- sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
- };
- };
- "tough-cookie-2.5.0" = {
- name = "tough-cookie";
- packageName = "tough-cookie";
- version = "2.5.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
- sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
- };
- };
- "tslib-1.14.1" = {
- name = "tslib";
- packageName = "tslib";
- version = "1.14.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz";
- sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==";
- };
- };
- "tsutils-3.21.0" = {
- name = "tsutils";
- packageName = "tsutils";
- version = "3.21.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz";
- sha512 = "mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==";
- };
- };
- "tunnel-agent-0.6.0" = {
- name = "tunnel-agent";
- packageName = "tunnel-agent";
- version = "0.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
- sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
- };
- };
- "tweetnacl-0.14.5" = {
- name = "tweetnacl";
- packageName = "tweetnacl";
- version = "0.14.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
- sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
- };
- };
- "type-check-0.3.2" = {
- name = "type-check";
- packageName = "type-check";
- version = "0.3.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
- sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
- };
- };
- "type-fest-0.21.3" = {
- name = "type-fest";
- packageName = "type-fest";
- version = "0.21.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz";
- sha512 = "t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==";
- };
- };
- "type-fest-0.8.1" = {
- name = "type-fest";
- packageName = "type-fest";
- version = "0.8.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz";
- sha512 = "4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==";
- };
- };
- "typescript-4.2.4" = {
- name = "typescript";
- packageName = "typescript";
- version = "4.2.4";
- src = fetchurl {
- url = "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz";
- sha512 = "V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==";
- };
- };
- "uri-js-4.4.1" = {
- name = "uri-js";
- packageName = "uri-js";
- version = "4.4.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
- sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
- };
- };
- "util-deprecate-1.0.2" = {
- name = "util-deprecate";
- packageName = "util-deprecate";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
- sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
- };
- };
- "uuid-3.4.0" = {
- name = "uuid";
- packageName = "uuid";
- version = "3.4.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
- sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
- };
- };
- "v8-compile-cache-2.3.0" = {
- name = "v8-compile-cache";
- packageName = "v8-compile-cache";
- version = "2.3.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz";
- sha512 = "l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==";
- };
- };
- "verror-1.10.0" = {
- name = "verror";
- packageName = "verror";
- version = "1.10.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
- sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
- };
- };
- "vue-2.6.10" = {
- name = "vue";
- packageName = "vue";
- version = "2.6.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz";
- sha512 = "ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==";
- };
- };
- "vue-eslint-parser-7.6.0" = {
- name = "vue-eslint-parser";
- packageName = "vue-eslint-parser";
- version = "7.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz";
- sha512 = "QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==";
- };
- };
- "vue-template-compiler-2.6.10" = {
- name = "vue-template-compiler";
- packageName = "vue-template-compiler";
- version = "2.6.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz";
- sha512 = "jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==";
- };
- };
- "watchpack-2.1.1" = {
- name = "watchpack";
- packageName = "watchpack";
- version = "2.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz";
- sha512 = "Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==";
- };
- };
- "webpack-5.33.2" = {
- name = "webpack";
- packageName = "webpack";
- version = "5.33.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/webpack/-/webpack-5.33.2.tgz";
- sha512 = "X4b7F1sYBmJx8mlh2B7mV5szEkE0jYNJ2y3akgAP0ERi0vLCG1VvdsIxt8lFd4st6SUy0lf7W0CCQS566MBpJg==";
- };
- };
- "webpack-cli-4.6.0" = {
- name = "webpack-cli";
- packageName = "webpack-cli";
- version = "4.6.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz";
- sha512 = "9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==";
- };
- };
- "webpack-merge-5.7.3" = {
- name = "webpack-merge";
- packageName = "webpack-merge";
- version = "5.7.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz";
- sha512 = "6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==";
- };
- };
- "webpack-sources-2.2.0" = {
- name = "webpack-sources";
- packageName = "webpack-sources";
- version = "2.2.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz";
- sha512 = "bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==";
- };
- };
- "which-1.3.1" = {
- name = "which";
- packageName = "which";
- version = "1.3.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
- sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
- };
- };
- "which-2.0.2" = {
- name = "which";
- packageName = "which";
- version = "2.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
- sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
- };
- };
- "wide-align-1.1.3" = {
- name = "wide-align";
- packageName = "wide-align";
- version = "1.1.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
- sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==";
- };
- };
- "wildcard-2.0.0" = {
- name = "wildcard";
- packageName = "wildcard";
- version = "2.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz";
- sha512 = "JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==";
- };
- };
- "word-wrap-1.2.3" = {
- name = "word-wrap";
- packageName = "word-wrap";
- version = "1.2.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
- sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
- };
- };
- "wrappy-1.0.2" = {
- name = "wrappy";
- packageName = "wrappy";
- version = "1.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
- sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
- };
- };
- "write-1.0.3" = {
- name = "write";
- packageName = "write";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/write/-/write-1.0.3.tgz";
- sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==";
- };
- };
- "xtend-4.0.2" = {
- name = "xtend";
- packageName = "xtend";
- version = "4.0.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
- sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
- };
- };
- "yallist-2.1.2" = {
- name = "yallist";
- packageName = "yallist";
- version = "2.1.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
- sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
- };
- };
- "yallist-3.1.1" = {
- name = "yallist";
- packageName = "yallist";
- version = "3.1.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz";
- sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==";
- };
- };
- "yallist-4.0.0" = {
- name = "yallist";
- packageName = "yallist";
- version = "4.0.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz";
- sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==";
- };
- };
- "yocto-queue-0.1.0" = {
- name = "yocto-queue";
- packageName = "yocto-queue";
- version = "0.1.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz";
- sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==";
- };
- };
- };
- args = {
- name = "terraforming-mars";
- packageName = "terraforming-mars";
- version = "1.0.0";
- inherit src;
- dependencies = [
- sources."@babel/code-frame-7.12.13"
- sources."@babel/helper-validator-identifier-7.12.11"
- sources."@babel/highlight-7.13.10"
- sources."@discoveryjs/json-ext-0.5.2"
- sources."@nodelib/fs.scandir-2.1.4"
- sources."@nodelib/fs.stat-2.0.4"
- sources."@nodelib/fs.walk-1.2.6"
- sources."@types/eslint-7.2.10"
- sources."@types/eslint-scope-3.7.0"
- sources."@types/estree-0.0.46"
- sources."@types/json-schema-7.0.7"
- sources."@types/node-10.17.58"
- sources."@types/pg-7.14.11"
- sources."@types/sqlite3-3.1.7"
- sources."@typescript-eslint/eslint-plugin-4.22.0"
- sources."@typescript-eslint/experimental-utils-4.22.0"
- sources."@typescript-eslint/parser-4.22.0"
- sources."@typescript-eslint/scope-manager-4.22.0"
- sources."@typescript-eslint/types-4.22.0"
- sources."@typescript-eslint/typescript-estree-4.22.0"
- sources."@typescript-eslint/visitor-keys-4.22.0"
- sources."@webassemblyjs/ast-1.11.0"
- sources."@webassemblyjs/floating-point-hex-parser-1.11.0"
- sources."@webassemblyjs/helper-api-error-1.11.0"
- sources."@webassemblyjs/helper-buffer-1.11.0"
- sources."@webassemblyjs/helper-numbers-1.11.0"
- sources."@webassemblyjs/helper-wasm-bytecode-1.11.0"
- sources."@webassemblyjs/helper-wasm-section-1.11.0"
- sources."@webassemblyjs/ieee754-1.11.0"
- sources."@webassemblyjs/leb128-1.11.0"
- sources."@webassemblyjs/utf8-1.11.0"
- sources."@webassemblyjs/wasm-edit-1.11.0"
- sources."@webassemblyjs/wasm-gen-1.11.0"
- sources."@webassemblyjs/wasm-opt-1.11.0"
- sources."@webassemblyjs/wasm-parser-1.11.0"
- sources."@webassemblyjs/wast-printer-1.11.0"
- sources."@webpack-cli/configtest-1.0.2"
- sources."@webpack-cli/info-1.2.3"
- sources."@webpack-cli/serve-1.3.1"
- sources."@xtuc/ieee754-1.2.0"
- sources."@xtuc/long-4.2.2"
- sources."abbrev-1.1.1"
- sources."acorn-7.4.1"
- sources."acorn-jsx-5.3.1"
- sources."ajv-6.12.6"
- sources."ajv-keywords-3.5.2"
- sources."ansi-colors-4.1.1"
- (sources."ansi-escapes-4.3.2" // {
- dependencies = [
- sources."type-fest-0.21.3"
- ];
- })
- sources."ansi-regex-4.1.0"
- sources."ansi-styles-3.2.1"
- sources."aproba-1.2.0"
- (sources."are-we-there-yet-1.1.5" // {
- dependencies = [
- sources."readable-stream-2.3.7"
- sources."string_decoder-1.1.1"
- ];
- })
- sources."argparse-1.0.10"
- sources."array-union-2.1.0"
- sources."asn1-0.2.4"
- sources."assert-plus-1.0.0"
- sources."astral-regex-1.0.0"
- sources."asynckit-0.4.0"
- sources."aws-sign2-0.7.0"
- sources."aws4-1.11.0"
- sources."balanced-match-1.0.2"
- sources."bcrypt-pbkdf-1.0.2"
- sources."block-stream-0.0.9"
- sources."brace-expansion-1.1.11"
- sources."braces-3.0.2"
- sources."browserslist-4.16.4"
- sources."buffer-from-1.1.1"
- sources."buffer-writer-2.0.0"
- sources."callsites-3.1.0"
- sources."caniuse-lite-1.0.30001209"
- sources."caseless-0.12.0"
- sources."chalk-2.4.2"
- sources."chardet-0.7.0"
- sources."chownr-1.1.4"
- sources."chrome-trace-event-1.0.3"
- sources."cli-cursor-3.1.0"
- sources."cli-width-3.0.0"
- (sources."clone-deep-4.0.1" // {
- dependencies = [
- sources."kind-of-6.0.3"
- ];
- })
- sources."code-point-at-1.1.0"
- sources."color-convert-1.9.3"
- sources."color-name-1.1.3"
- sources."colorette-1.2.2"
- sources."combined-stream-1.0.8"
- sources."commander-2.20.3"
- sources."compression-webpack-plugin-7.1.2"
- sources."concat-map-0.0.1"
- sources."config-chain-1.1.12"
- sources."console-control-strings-1.1.0"
- sources."console-stamp-3.0.0-rc4.2"
- sources."copy-anything-2.0.3"
- sources."core-util-is-1.0.2"
- (sources."cross-spawn-6.0.5" // {
- dependencies = [
- sources."semver-5.7.1"
- ];
- })
- sources."dashdash-1.14.1"
- sources."dateformat-3.0.3"
- sources."de-indent-1.0.2"
- sources."debug-4.3.1"
- sources."deep-extend-0.6.0"
- sources."deep-is-0.1.3"
- sources."delayed-stream-1.0.0"
- sources."delegates-1.0.0"
- sources."detect-libc-1.0.3"
- sources."dialog-polyfill-0.5.6"
- sources."dir-glob-3.0.1"
- sources."doctrine-3.0.0"
- sources."dotenv-8.2.0"
- sources."ecc-jsbn-0.1.2"
- (sources."editorconfig-0.15.3" // {
- dependencies = [
- sources."semver-5.7.1"
- ];
- })
- sources."electron-to-chromium-1.3.717"
- sources."emoji-regex-8.0.0"
- sources."enhanced-resolve-5.7.0"
- sources."enquirer-2.3.6"
- sources."envinfo-7.8.1"
- sources."errno-0.1.8"
- sources."es-module-lexer-0.4.1"
- sources."escalade-3.1.1"
- sources."escape-string-regexp-1.0.5"
- (sources."eslint-6.8.0" // {
- dependencies = [
- sources."eslint-utils-1.4.3"
- sources."eslint-visitor-keys-1.3.0"
- sources."regexpp-2.0.1"
- sources."semver-6.3.0"
- ];
- })
- sources."eslint-config-google-0.14.0"
- (sources."eslint-plugin-vue-6.2.2" // {
- dependencies = [
- sources."semver-5.7.1"
- ];
- })
- sources."eslint-scope-5.1.1"
- (sources."eslint-utils-2.1.0" // {
- dependencies = [
- sources."eslint-visitor-keys-1.3.0"
- ];
- })
- sources."eslint-visitor-keys-2.0.0"
- (sources."espree-6.2.1" // {
- dependencies = [
- sources."eslint-visitor-keys-1.3.0"
- ];
- })
- sources."esprima-4.0.1"
- (sources."esquery-1.4.0" // {
- dependencies = [
- sources."estraverse-5.2.0"
- ];
- })
- (sources."esrecurse-4.3.0" // {
- dependencies = [
- sources."estraverse-5.2.0"
- ];
- })
- sources."estraverse-4.3.0"
- sources."esutils-2.0.3"
- sources."events-3.3.0"
- (sources."execa-5.0.0" // {
- dependencies = [
- sources."cross-spawn-7.0.3"
- sources."is-stream-2.0.0"
- sources."path-key-3.1.1"
- sources."shebang-command-2.0.0"
- sources."shebang-regex-3.0.0"
- sources."which-2.0.2"
- ];
- })
- sources."extend-3.0.2"
- sources."external-editor-3.1.0"
- sources."extsprintf-1.3.0"
- sources."fast-deep-equal-3.1.3"
- sources."fast-glob-3.2.5"
- sources."fast-json-stable-stringify-2.1.0"
- sources."fast-levenshtein-2.0.6"
- sources."fastest-levenshtein-1.0.12"
- sources."fastq-1.11.0"
- sources."figures-3.2.0"
- sources."file-entry-cache-5.0.1"
- sources."fill-range-7.0.1"
- sources."flat-cache-2.0.1"
- sources."flatted-2.0.2"
- sources."forever-agent-0.6.1"
- sources."form-data-2.3.3"
- sources."fs-minipass-1.2.7"
- sources."fs.realpath-1.0.0"
- sources."fstream-1.0.12"
- sources."function-bind-1.1.1"
- sources."functional-red-black-tree-1.0.1"
- (sources."gauge-2.7.4" // {
- dependencies = [
- sources."ansi-regex-2.1.1"
- sources."is-fullwidth-code-point-1.0.0"
- sources."string-width-1.0.2"
- sources."strip-ansi-3.0.1"
- ];
- })
- sources."get-stream-6.0.1"
- sources."getpass-0.1.7"
- sources."glob-7.1.6"
- sources."glob-parent-5.1.2"
- sources."glob-to-regexp-0.4.1"
- sources."globals-12.4.0"
- (sources."globby-11.0.3" // {
- dependencies = [
- sources."ignore-5.1.8"
- ];
- })
- sources."graceful-fs-4.2.6"
- sources."har-schema-2.0.0"
- sources."har-validator-5.1.5"
- sources."has-1.0.3"
- sources."has-flag-3.0.0"
- sources."has-unicode-2.0.1"
- sources."he-1.2.0"
- sources."http-signature-1.2.0"
- sources."human-signals-2.1.0"
- sources."iconv-lite-0.4.24"
- sources."ignore-4.0.6"
- sources."ignore-walk-3.0.3"
- sources."image-size-0.5.5"
- sources."import-fresh-3.3.0"
- (sources."import-local-3.0.2" // {
- dependencies = [
- sources."find-up-4.1.0"
- sources."locate-path-5.0.0"
- sources."p-limit-2.3.0"
- sources."p-locate-4.1.0"
- sources."pkg-dir-4.2.0"
- ];
- })
- sources."imurmurhash-0.1.4"
- sources."inflight-1.0.6"
- sources."inherits-2.0.4"
- sources."ini-1.3.8"
- (sources."inquirer-7.3.3" // {
- dependencies = [
- sources."ansi-regex-5.0.0"
- sources."ansi-styles-4.3.0"
- sources."chalk-4.1.0"
- sources."color-convert-2.0.1"
- sources."color-name-1.1.4"
- sources."has-flag-4.0.0"
- sources."strip-ansi-6.0.0"
- sources."supports-color-7.2.0"
- ];
- })
- sources."interpret-2.2.0"
- sources."is-core-module-2.2.0"
- sources."is-extglob-2.1.1"
- sources."is-fullwidth-code-point-3.0.0"
- sources."is-glob-4.0.1"
- sources."is-number-7.0.0"
- sources."is-plain-object-2.0.4"
- sources."is-typedarray-1.0.0"
- sources."is-what-3.14.1"
- sources."isarray-1.0.0"
- sources."isexe-2.0.0"
- sources."isobject-3.0.1"
- sources."isstream-0.1.2"
- (sources."jest-worker-26.6.2" // {
- dependencies = [
- sources."has-flag-4.0.0"
- sources."supports-color-7.2.0"
- ];
- })
- (sources."js-beautify-1.13.13" // {
- dependencies = [
- sources."mkdirp-1.0.4"
- ];
- })
- sources."js-tokens-4.0.0"
- sources."js-yaml-3.14.1"
- sources."jsbn-0.1.1"
- sources."json-parse-better-errors-1.0.2"
- sources."json-schema-0.2.3"
- sources."json-schema-traverse-0.4.1"
- sources."json-stable-stringify-without-jsonify-1.0.1"
- sources."json-stringify-safe-5.0.1"
- sources."jsprim-1.4.1"
- sources."less-3.13.1"
- sources."levn-0.3.0"
- sources."loader-runner-4.2.0"
- sources."lodash-4.17.21"
- sources."lru-cache-4.1.5"
- (sources."make-dir-2.1.0" // {
- dependencies = [
- sources."semver-5.7.1"
- ];
- })
- sources."merge-stream-2.0.0"
- sources."merge2-1.4.1"
- sources."micromatch-4.0.4"
- sources."mime-1.6.0"
- sources."mime-db-1.47.0"
- sources."mime-types-2.1.30"
- sources."mimic-fn-2.1.0"
- sources."minimatch-3.0.4"
- sources."minimist-1.2.5"
- (sources."minipass-2.9.0" // {
- dependencies = [
- sources."yallist-3.1.1"
- ];
- })
- sources."minizlib-1.3.3"
- sources."mkdirp-0.5.5"
- sources."mnemonist-0.38.3"
- sources."ms-2.1.2"
- sources."mute-stream-0.0.8"
- sources."native-request-1.0.8"
- sources."natural-compare-1.4.0"
- (sources."needle-2.6.0" // {
- dependencies = [
- sources."debug-3.2.7"
- ];
- })
- sources."neo-async-2.6.2"
- sources."nice-try-1.0.5"
- sources."node-addon-api-3.1.0"
- (sources."node-gyp-3.8.0" // {
- dependencies = [
- sources."nopt-3.0.6"
- sources."semver-5.3.0"
- ];
- })
- (sources."node-pre-gyp-0.11.0" // {
- dependencies = [
- sources."nopt-4.0.3"
- sources."semver-5.7.1"
- sources."tar-4.4.13"
- sources."yallist-3.1.1"
- ];
- })
- sources."node-releases-1.1.71"
- sources."nopt-5.0.0"
- sources."npm-bundled-1.1.1"
- sources."npm-normalize-package-bin-1.0.1"
- sources."npm-packlist-1.4.8"
- (sources."npm-run-path-4.0.1" // {
- dependencies = [
- sources."path-key-3.1.1"
- ];
- })
- sources."npmlog-4.1.2"
- sources."number-is-nan-1.0.1"
- sources."oauth-sign-0.9.0"
- sources."object-assign-4.1.1"
- sources."obliterator-1.6.1"
- sources."once-1.4.0"
- sources."onetime-5.1.2"
- sources."optionator-0.8.3"
- sources."os-homedir-1.0.2"
- sources."os-tmpdir-1.0.2"
- sources."osenv-0.1.5"
- sources."p-limit-3.1.0"
- sources."p-try-2.2.0"
- sources."packet-reader-1.0.0"
- sources."parent-module-1.0.1"
- sources."path-exists-4.0.0"
- sources."path-is-absolute-1.0.1"
- sources."path-key-2.0.1"
- sources."path-parse-1.0.6"
- sources."path-type-4.0.0"
- sources."performance-now-2.1.0"
- sources."pg-8.6.0"
- sources."pg-connection-string-2.5.0"
- sources."pg-int8-1.0.1"
- sources."pg-pool-3.3.0"
- sources."pg-protocol-1.5.0"
- sources."pg-types-2.2.0"
- sources."pgpass-1.0.4"
- sources."picomatch-2.2.3"
- sources."pify-4.0.1"
- sources."postgres-array-2.0.0"
- sources."postgres-bytea-1.0.0"
- sources."postgres-date-1.0.7"
- sources."postgres-interval-1.2.0"
- sources."prelude-ls-1.1.2"
- sources."process-nextick-args-2.0.1"
- sources."progress-2.0.3"
- sources."proto-list-1.2.4"
- sources."prr-1.0.1"
- sources."pseudomap-1.0.2"
- sources."psl-1.8.0"
- sources."punycode-2.1.1"
- sources."qs-6.5.2"
- sources."queue-microtask-1.2.3"
- sources."randombytes-2.1.0"
- (sources."rc-1.2.8" // {
- dependencies = [
- sources."strip-json-comments-2.0.1"
- ];
- })
- sources."readable-stream-3.6.0"
- sources."rechoir-0.7.0"
- sources."regexpp-3.1.0"
- (sources."request-2.88.2" // {
- dependencies = [
- sources."tough-cookie-2.5.0"
- ];
- })
- sources."resolve-1.20.0"
- (sources."resolve-cwd-3.0.0" // {
- dependencies = [
- sources."resolve-from-5.0.0"
- ];
- })
- sources."resolve-from-4.0.0"
- sources."restore-cursor-3.1.0"
- sources."reusify-1.0.4"
- sources."rimraf-2.6.3"
- sources."run-async-2.4.1"
- sources."run-parallel-1.2.0"
- sources."rxjs-6.6.7"
- sources."safe-buffer-5.1.2"
- sources."safer-buffer-2.1.2"
- sources."sax-1.2.4"
- sources."schema-utils-3.0.0"
- (sources."semver-7.3.5" // {
- dependencies = [
- sources."lru-cache-6.0.0"
- sources."yallist-4.0.0"
- ];
- })
- sources."serialize-javascript-5.0.1"
- sources."set-blocking-2.0.0"
- (sources."shallow-clone-3.0.1" // {
- dependencies = [
- sources."kind-of-6.0.3"
- ];
- })
- sources."shebang-command-1.2.0"
- sources."shebang-regex-1.0.0"
- sources."sigmund-1.0.1"
- sources."signal-exit-3.0.3"
- sources."slash-3.0.0"
- (sources."slice-ansi-2.1.0" // {
- dependencies = [
- sources."is-fullwidth-code-point-2.0.0"
- ];
- })
- sources."source-list-map-2.0.1"
- sources."source-map-0.6.1"
- sources."source-map-support-0.5.19"
- sources."spectre.css-0.5.9"
- sources."split2-3.2.2"
- sources."sprintf-js-1.0.3"
- sources."sqlite3-5.0.2"
- sources."sshpk-1.16.1"
- (sources."string-width-4.2.2" // {
- dependencies = [
- sources."ansi-regex-5.0.0"
- sources."strip-ansi-6.0.0"
- ];
- })
- (sources."string_decoder-1.3.0" // {
- dependencies = [
- sources."safe-buffer-5.2.1"
- ];
- })
- sources."strip-ansi-5.2.0"
- sources."strip-final-newline-2.0.0"
- sources."strip-json-comments-3.1.1"
- sources."supports-color-5.5.0"
- (sources."table-5.4.6" // {
- dependencies = [
- sources."emoji-regex-7.0.3"
- sources."is-fullwidth-code-point-2.0.0"
- sources."string-width-3.1.0"
- ];
- })
- sources."tapable-2.2.0"
- sources."tar-2.2.2"
- (sources."terser-5.6.1" // {
- dependencies = [
- sources."source-map-0.7.3"
- ];
- })
- sources."terser-webpack-plugin-5.1.1"
- sources."text-table-0.2.0"
- sources."through-2.3.8"
- sources."tmp-0.0.33"
- sources."to-regex-range-5.0.1"
- sources."tslib-1.14.1"
- sources."tsutils-3.21.0"
- sources."tunnel-agent-0.6.0"
- sources."tweetnacl-0.14.5"
- sources."type-check-0.3.2"
- sources."type-fest-0.8.1"
- sources."typescript-4.2.4"
- sources."uri-js-4.4.1"
- sources."util-deprecate-1.0.2"
- sources."uuid-3.4.0"
- sources."v8-compile-cache-2.3.0"
- sources."verror-1.10.0"
- sources."vue-2.6.10"
- (sources."vue-eslint-parser-7.6.0" // {
- dependencies = [
- sources."eslint-visitor-keys-1.3.0"
- ];
- })
- sources."vue-template-compiler-2.6.10"
- sources."watchpack-2.1.1"
- (sources."webpack-5.33.2" // {
- dependencies = [
- sources."acorn-8.1.1"
- ];
- })
- (sources."webpack-cli-4.6.0" // {
- dependencies = [
- sources."commander-7.2.0"
- ];
- })
- sources."webpack-merge-5.7.3"
- sources."webpack-sources-2.2.0"
- sources."which-1.3.1"
- (sources."wide-align-1.1.3" // {
- dependencies = [
- sources."ansi-regex-3.0.0"
- sources."is-fullwidth-code-point-2.0.0"
- sources."string-width-2.1.1"
- sources."strip-ansi-4.0.0"
- ];
- })
- sources."wildcard-2.0.0"
- sources."word-wrap-1.2.3"
- sources."wrappy-1.0.2"
- sources."write-1.0.3"
- sources."xtend-4.0.2"
- sources."yallist-2.1.2"
- sources."yocto-queue-0.1.0"
- ];
- buildInputs = globalBuildInputs;
- meta = {
- description = "Terraforming Mars Game";
- homepage = "https://github.com/bafolts/terraforming-mars#readme";
- license = "ISC";
- };
- production = true;
- bypassCache = true;
- reconstructLock = false;
- };
-in
-{
- args = args;
- sources = sources;
- tarball = nodeEnv.buildNodeSourceDist args;
- package = nodeEnv.buildNodePackage args;
- shell = nodeEnv.buildNodeShell args;
-}
diff --git a/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix b/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix
deleted file mode 100644
index 502a553..0000000
--- a/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix
+++ /dev/null
@@ -1,36 +0,0 @@
-{ fetchgit, runCommand, callPackage, mylibs, nodePackages, nodejs, git }:
-let
- source = fetchgit {
- url = "https://github.com/bafolts/terraforming-mars";
- rev = "25b3f80e276cc0c1fc283a78b6ae94b13c545ab6";
- sha256 = "03xcwvxv2mlmswngklzqp3lf30hgkvdilqq7p1z4h8xmy50cy12k";
- leaveDotGit = true;
- fetchSubmodules = true;
- };
- patchedSource = runCommand "patch-source" {} ''
- cp -r ${source} $out
- chmod -R u+w $out
- sed -i -e 's/"lockfileVersion": 2,/"lockfileVersion": 1,/' $out/package-lock.json
- '';
- packages = callPackage ./node-packages.nix {
- src = patchedSource;
- nodeEnv = callPackage mylibs.nodeEnv {};
- globalBuildInputs = [ nodePackages.node-pre-gyp ];
- };
- terraforming-mars = runCommand "terraforming-mars" {
- buildInputs = [ nodejs git ];
- } ''
- cp -r ${source} ./source
- chmod -R u+w source
- cd source
- ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules .
- npm run build
- mkdir $out
- cp -a build $out/
- cp -a assets $out/
- cp package.json $out/
- ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules $out
- ln -s /var/lib/terraforming-mars/db $out/db
- '';
-in
- terraforming-mars
diff --git a/modules/private/websites/tools/git/default.nix b/modules/private/websites/tools/git/default.nix
deleted file mode 100644
index 8f611ee..0000000
--- a/modules/private/websites/tools/git/default.nix
+++ /dev/null
@@ -1,49 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- mantisbt = pkgs.callPackage ./mantisbt.nix {
- inherit (pkgs.webapps) mantisbt_2 mantisbt_2-plugins;
- env = config.myEnv.tools.mantisbt;
- inherit config;
- };
- gitweb = pkgs.callPackage ./gitweb.nix {
- gitoliteDir = config.myServices.gitolite.gitoliteDir;
- };
-
- cfg = config.myServices.websites.tools.git;
-in {
- options.myServices.websites.tools.git = {
- enable = lib.mkEnableOption "enable git's website";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = mantisbt.keys;
- services.websites.env.tools.modules =
- gitweb.apache.modules ++
- mantisbt.apache.modules;
-
- system.activationScripts.mantisbt = mantisbt.activationScript;
- services.websites.env.tools.vhostConfs.git = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["git.immae.eu" ];
- root = gitweb.apache.root;
- extraConfig = [
- gitweb.apache.vhostConf
- (mantisbt.apache.vhostConf config.services.phpfpm.pools.mantisbt.socket)
- ''
- RewriteEngine on
- RewriteCond %{REQUEST_URI} ^/releases
- RewriteRule /releases(.*) https://release.immae.eu$1 [P,L]
- ''
- ];
- };
- services.phpfpm.pools = {
- mantisbt = {
- user = config.services.httpd.Tools.user;
- group = config.services.httpd.Tools.group;
- settings = mantisbt.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- };
- };
-}
diff --git a/modules/private/websites/tools/git/gitweb.nix b/modules/private/websites/tools/git/gitweb.nix
deleted file mode 100644
index ff34da5..0000000
--- a/modules/private/websites/tools/git/gitweb.nix
+++ /dev/null
@@ -1,119 +0,0 @@
-{ gitweb, writeText, stdenv, coreutils, writeScript, gitolite, git, cgit, gitoliteDir, mailcap, highlight }:
-rec {
- varDir = gitoliteDir;
- config = writeText "gitweb.conf" ''
- $git_temp = "/tmp";
-
- # The directories where your projects are. Must not end with a
- # slash.
- $projectroot = "${varDir}/repositories";
-
- $projects_list = "${varDir}/projects.list";
- $strict_export = "true";
-
- # Base URLs for links displayed in the web interface.
- our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu);
-
- $feature{'blame'}{'default'} = [1];
- $feature{'avatar'}{'default'} = ['gravatar'];
- $feature{'highlight'}{'default'} = [1];
-
- @stylesheets = ("gitweb-theme/gitweb.css");
- $logo = "gitweb-theme/git-logo.png";
- $favicon = "gitweb-theme/git-favicon.png";
- $javascript = "gitweb-theme/gitweb.js";
- $logo_url = "https://git.immae.eu/";
- $projects_list_group_categories = "true";
- $projects_list_description_width = 60;
- $project_list_default_category = "__Others__";
- $highlight_bin = "${highlight}/bin/highlight";
- '';
- aboutFilter = writeScript "about-filter.sh" ''
- #!${stdenv.shell}
-
- if [ -f "$CGIT_REPO_PATH/README.html" ]; then
- cat "$CGIT_REPO_PATH/README.html"
- else
- ${cgit}/lib/cgit/filters/about-formatting.sh "$@"
- fi
- '';
- cgitConfig = writeText "cgitrc" ''
- css=/cgit-css/cgit.css
- logo=/cgit-css/cgit.png
- favicon=/cgit-css/favicon.ico
-
- root-title=Immae’s git
- root-desc=To go back to the old interface: https://git.immae.eu/?old
- readme=:README.md
- readme=:readme.md
- readme=:README
- readme=:DOCUMENTATION.md
- about-filter=${aboutFilter}
- #${cgit}/lib/cgit/filters/about-formatting.sh
- source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py
-
- enable-blame=1
- enable-index-links=1
- enable-commit-graph=1
- enable-log-filecount=1
- enable-log-linecount=1
-
- enable-html-serving=1
- # Allow using gitweb.* keys
- enable-git-config=1
-
- side-by-side-diffs=1
- snapshots=tar.gz tar.zst zip
- mimetype-file=${mailcap}/etc/mime.types
-
- section=__Others__
- clone-url=ssh://gitolite@git.immae.eu/$CGIT_REPO_URL https://git.immae.eu/$CGIT_REPO_URL
- #section-from-path=1
- project-list=${varDir}/projects.list
- scan-path=${varDir}/repositories
- '';
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "cgid" ];
- root = gitweb;
- vhostConf = ''
- SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/
- ScriptAliasMatch \
- "(?x)^/(.*/(HEAD | \
- info/refs | \
- objects/(info/[^/]+ | \
- [0-9a-f]{2}/[0-9a-f]{38} | \
- pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
- git-(upload|receive)-pack))$" \
- ${git}/libexec/git-core/git-http-backend/$1
-
-
- Require all granted
-
-
- DirectoryIndex gitweb.cgi
- Require all granted
- AllowOverride None
- Options ExecCGI FollowSymLinks
-
- SetHandler cgi-script
- SetEnv GITWEB_CONFIG "${config}"
-
-
-
- SetEnv CGIT_CONFIG ${cgitConfig}
- ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/"
- Alias /cgit-css "${cgit}/cgit"
-
- AllowOverride None
- Options ExecCGI FollowSymlinks
- Require all granted
-
-
- RewriteEngine On
- RewriteCond %{QUERY_STRING} ^$
- RewriteRule ^/?$ /cgit [L,R=302]
- '';
- };
-}
diff --git a/modules/private/websites/tools/git/mantisbt.nix b/modules/private/websites/tools/git/mantisbt.nix
deleted file mode 100644
index 2ef76af..0000000
--- a/modules/private/websites/tools/git/mantisbt.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{ env, mantisbt_2, mantisbt_2-plugins, config }:
-rec {
- activationScript = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/mantisbt
- '';
- };
- keys."webapps/tools-mantisbt" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride All
- SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
- Options FollowSymlinks
- Require all granted
-
-
- #Reenable during upgrade
- Require all denied
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" (
- [ webRoot config.secrets.fullPaths."webapps/tools-mantisbt" ]
- ++ webRoot.plugins);
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- "php_admin_value[upload_max_filesize]" = "5000000";
-
- "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/mantisbt";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/mantisbt";
- };
- };
-}
diff --git a/modules/private/websites/tools/im/default.nix b/modules/private/websites/tools/im/default.nix
deleted file mode 100644
index 94dc4f8..0000000
--- a/modules/private/websites/tools/im/default.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ config, lib, pkgs, ... }:
-let
- cfg = config.myServices.websites.tools.im;
-in
-{
- options.myServices.websites.tools.im = {
- enable = lib.mkEnableOption "enable im website";
- };
-
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.vhostConfs.im = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["im.immae.fr"];
- root = ./www;
- extraConfig = [
- ''
- Alias /glowing-bear ${pkgs.glowing-bear}
- Alias /converse ${./www}/converse.html
- ProxyPreserveHost On
-
- ProxyPass http://localhost:5280/bosh
- ProxyPassReverse http://localhost:5280/bosh
-
-
- ProxyPass ws://localhost:5280/ws
-
- ProxyPass /upload http://localhost:5280/upload
- ProxyPassReverse /upload http://localhost:5280/upload
- ProxyPass /admin http://localhost:5280/admin
- ProxyPassReverse /admin http://localhost:5280/admin
- ProxyPass /api http://localhost:5280/api
- ProxyPassReverse /api http://localhost:5280/api
-
- AllowOverride none
- Require all granted
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/im/www/converse.html b/modules/private/websites/tools/im/www/converse.html
deleted file mode 100644
index 936dde4..0000000
--- a/modules/private/websites/tools/im/www/converse.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
- Converse
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/private/websites/tools/im/www/index.html b/modules/private/websites/tools/im/www/index.html
deleted file mode 100644
index 90c5458..0000000
--- a/modules/private/websites/tools/im/www/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
- Instant messaging configuration (Jabber/XMPP)
-
-
-
-
- Pre-configured clients:
-
-
-
- Technical details:
-
- HTTP-bind/BOSH access (XEP-0124 / XEP-0206): https://im.immae.fr/bosh
- WS access (RFC 7395): wss://im.immae.fr/ws
-
-
-
-
diff --git a/modules/private/websites/tools/mail/default.nix b/modules/private/websites/tools/mail/default.nix
deleted file mode 100644
index 390f7ad..0000000
--- a/modules/private/websites/tools/mail/default.nix
+++ /dev/null
@@ -1,79 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- roundcubemail = pkgs.callPackage ./roundcubemail.nix {
- inherit (pkgs.webapps) roundcubemail;
- env = config.myEnv.tools.roundcubemail;
- inherit config;
- };
- rainloop = pkgs.callPackage ./rainloop.nix {
- rainloop = pkgs.rainloop-community;
- };
- cfg = config.myServices.websites.tools.email;
- pcfg = config.services.phpfpm.pools;
-in
-{
- options.myServices.websites.tools.email = {
- enable = lib.mkEnableOption "enable email website";
- };
-
- imports = [
- ./mta-sts.nix
- ];
-
- config = lib.mkIf cfg.enable {
- secrets.keys = roundcubemail.keys;
-
- services.websites.env.tools.modules =
- [ "proxy_fcgi" ]
- ++ rainloop.apache.modules
- ++ roundcubemail.apache.modules;
-
- services.websites.env.tools.vhostConfs.mail = {
- certName = "mail";
- addToCerts = true;
- hosts = ["mail.immae.eu"];
- root = ./www;
- extraConfig = [
- (rainloop.apache.vhostConf pcfg.rainloop.socket)
- (roundcubemail.apache.vhostConf pcfg.roundcubemail.socket)
- ''
-
- Require all granted
- Options -Indexes
-
- ''
- ];
- };
- systemd.services = {
- phpfpm-rainloop = {
- after = lib.mkAfter rainloop.phpFpm.serviceDeps;
- wants = rainloop.phpFpm.serviceDeps;
- };
- phpfpm-roundcubemail = {
- after = lib.mkAfter roundcubemail.phpFpm.serviceDeps;
- wants = roundcubemail.phpFpm.serviceDeps;
- };
- };
-
- services.phpfpm.pools.roundcubemail = {
- user = "wwwrun";
- group = "wwwrun";
- settings = roundcubemail.phpFpm.pool;
- phpOptions = config.services.phpfpm.phpOptions + ''
- date.timezone = 'CET'
- '';
- phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.imagick ]);
- };
- services.phpfpm.pools.rainloop = {
- user = "wwwrun";
- group = "wwwrun";
- settings = rainloop.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- system.activationScripts = {
- roundcubemail = roundcubemail.activationScript;
- rainloop = rainloop.activationScript;
- };
- };
-
-}
diff --git a/modules/private/websites/tools/mail/mta-sts.nix b/modules/private/websites/tools/mail/mta-sts.nix
deleted file mode 100644
index 77ba2d4..0000000
--- a/modules/private/websites/tools/mail/mta-sts.nix
+++ /dev/null
@@ -1,54 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- domains = (lib.remove null (lib.flatten (map
- (zone: map
- (e: if e.receive
- then {
- domain = "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}";
- mail = zone.name;
- }
- else null
- )
- (zone.withEmail or [])
- )
- config.myEnv.dns.masterZones
- )));
- mxes = lib.mapAttrsToList
- (n: v: v.mx.subdomain)
- (lib.attrsets.filterAttrs (n: v: v.mx.enable) config.myEnv.servers);
- # FIXME: increase the id number in modules/private/dns.nix when this
- # file change (date -u +'%Y%m%d%H%M%S'Z)
- file = domain: pkgs.writeText "mta-sts-${domain.domain}.txt" (
- builtins.concatStringsSep "\r\n" ([ "version: STSv1" "mode: testing" ]
- ++ (map (v: "mx: ${v}.${domain.mail}") mxes)
- ++ [ "max_age: 604800" ]
- ));
- root = pkgs.runCommand "mta-sts_root" {} ''
- mkdir -p $out
- ${builtins.concatStringsSep "\n" (map (d:
- "cp ${file d} $out/${d.domain}.txt"
- ) domains)}
- '';
- cfg = config.myServices.websites.tools.email;
-in
-{
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.vhostConfs.mta_sts = {
- certName = "mail";
- addToCerts = true;
- hosts = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.domain}") domains;
- root = root;
- extraConfig = [
- ''
- RewriteEngine on
- RewriteCond %{HTTP_HOST} ^mta-sts.(.*)$
- RewriteRule ^/.well-known/mta-sts.txt$ %{DOCUMENT_ROOT}/%1.txt [L]
-
- Require all granted
- Options -Indexes
-
- ''
- ];
- };
- };
-}
diff --git a/modules/private/websites/tools/mail/rainloop.nix b/modules/private/websites/tools/mail/rainloop.nix
deleted file mode 100644
index 20e43a1..0000000
--- a/modules/private/websites/tools/mail/rainloop.nix
+++ /dev/null
@@ -1,54 +0,0 @@
-{ lib, rainloop, writeText, stdenv, fetchurl }:
-rec {
- varDir = "/var/lib/rainloop";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/data
- '';
- };
- webRoot = rainloop.override { dataPath = "${varDir}/data"; };
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /rainloop "${root}"
-
- DirectoryIndex index.php
- AllowOverride All
- Options -FollowSymlinks
- Require all granted
-
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
-
-
- Require all denied
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" ];
- basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "RainloopPHPSESSID";
- "php_admin_value[upload_max_filesize]" = "200M";
- "php_admin_value[post_max_size]" = "200M";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
diff --git a/modules/private/websites/tools/mail/roundcubemail.nix b/modules/private/websites/tools/mail/roundcubemail.nix
deleted file mode 100644
index 2661b55..0000000
--- a/modules/private/websites/tools/mail/roundcubemail.nix
+++ /dev/null
@@ -1,118 +0,0 @@
-{ env, roundcubemail, apacheHttpd, config }:
-rec {
- varDir = "/var/lib/roundcubemail";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/cache ${varDir}/logs
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- '';
- };
- keys."webapps/tools-roundcube" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text =
- let
- psql_url = with env.postgresql; "pgsql://${user}:${password}@unix(${socket}:${port})/${database}";
- in ''
- "mail.immae.eu"
- );
- $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false));
- $config['smtp_server'] = 'tls://smtp.immae.eu';
- $config['smtp_port'] = '587';
- $config['managesieve_host'] = 'imap.immae.eu';
- $config['managesieve_port'] = '4190';
- $config['managesieve_usetls'] = true;
- $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false));
-
- $config['imap_cache'] = 'db';
- $config['messages_cache'] = 'db';
-
- $config['support_url'] = ''';
-
- $config['des_key'] = '${env.secret}';
-
- $config['skin'] = 'elastic';
- $config['plugins'] = array(
- 'attachment_reminder',
- 'emoticons',
- 'filesystem_attachments',
- 'hide_blockquote',
- 'identicon',
- 'identity_select',
- 'jqueryui',
- 'markasjunk',
- 'managesieve',
- 'newmail_notifier',
- 'vcard_attachments',
- 'zipdownload',
-
- 'automatic_addressbook',
- 'message_highlight',
- 'carddav',
- // Ne marche pas ?: 'ident_switch',
- // Ne marche pas ?: 'thunderbird_labels',
- );
-
- $config['language'] = 'fr_FR';
-
- $config['drafts_mbox'] = 'Drafts';
- $config['junk_mbox'] = 'Junk';
- $config['sent_mbox'] = 'Sent';
- $config['trash_mbox'] = 'Trash';
- $config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
- $config['draft_autosave'] = 60;
- $config['enable_installer'] = false;
- $config['log_driver'] = 'file';
- $config['temp_dir'] = '${varDir}/cache';
- $config['mime_types'] = '${apacheHttpd}/conf/mime.types';
- '';
- };
- webRoot = (roundcubemail.override { roundcube_config = config.secrets.fullPaths."webapps/tools-roundcube"; }).withPlugins (p: [ p.automatic_addressbook p.carddav p.contextmenu p.contextmenu_folder p.html5_notifier p.ident_switch p.message_highlight p.thunderbird_labels ]);
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /roundcube "${root}"
-
- DirectoryIndex index.php
- AllowOverride All
- Options FollowSymlinks
- Require all granted
-
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" ];
- basedir = builtins.concatStringsSep ":" (
- [ webRoot config.secrets.fullPaths."webapps/tools-roundcube" varDir ]
- ++ webRoot.plugins
- ++ webRoot.skins);
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "RoundcubemailPHPSESSID";
- "php_admin_value[upload_max_filesize]" = "200M";
- "php_admin_value[post_max_size]" = "200M";
- "php_admin_value[open_basedir]" = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
diff --git a/modules/private/websites/tools/mail/www/index.html b/modules/private/websites/tools/mail/www/index.html
deleted file mode 100644
index 88b0ebd..0000000
--- a/modules/private/websites/tools/mail/www/index.html
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
- E-mail configuration
-
-
-
-
- Email configuration. For automatic configuration in your smart e-mail
- client, use login@mail.immae.eu . If it
- doesn’t work, the details are there:
-
- IMAP: imap.immae.eu
-
- No unencrypted access
- STARTTLS: 143
- SSL: 993
-
-
- POP3: pop3.immae.eu
-
- No unencrypted access
- STARTTLS: 110
- SSL: 995
-
-
- SMTP: smtp.immae.eu
-
- No unencrypted access
- STARTTLS: 587
- SSL: 465
-
-
- Sieve: imap.immae.eu
-
- No unencrypted access
- STARTTLS: 4190
-
-
-
-
- Webmails:
-
-
-
-
-
diff --git a/modules/private/websites/tools/mastodon/default.nix b/modules/private/websites/tools/mastodon/default.nix
deleted file mode 100644
index 173a4b8..0000000
--- a/modules/private/websites/tools/mastodon/default.nix
+++ /dev/null
@@ -1,136 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- env = config.myEnv.tools.mastodon;
- root = "${mcfg.workdir}/public/";
- cfg = config.myServices.websites.tools.mastodon;
- mcfg = config.services.mastodon;
-in {
- options.myServices.websites.tools.mastodon = {
- enable = lib.mkEnableOption "enable mastodon's website";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys."webapps/tools-mastodon" = {
- user = "mastodon";
- group = "mastodon";
- permissions = "0400";
- text = ''
- REDIS_HOST=${env.redis.host}
- REDIS_PORT=${env.redis.port}
- REDIS_DB=${env.redis.db}
- DB_HOST=${env.postgresql.socket}
- DB_USER=${env.postgresql.user}
- DB_NAME=${env.postgresql.database}
- DB_PASS=${env.postgresql.password}
- DB_PORT=${env.postgresql.port}
-
- LOCAL_DOMAIN=mastodon.immae.eu
- LOCAL_HTTPS=true
- ALTERNATE_DOMAINS=immae.eu
-
- PAPERCLIP_SECRET=${env.paperclip_secret}
- SECRET_KEY_BASE=${env.secret_key_base}
- OTP_SECRET=${env.otp_secret}
-
- VAPID_PRIVATE_KEY=${env.vapid.private}
- VAPID_PUBLIC_KEY=${env.vapid.public}
-
- SMTP_DELIVERY_METHOD=sendmail
- SMTP_FROM_ADDRESS=mastodon@tools.immae.eu
- SENDMAIL_LOCATION="/run/wrappers/bin/sendmail"
- PAPERCLIP_ROOT_PATH=${mcfg.dataDir}
-
- STREAMING_CLUSTER_NUM=1
-
- RAILS_LOG_LEVEL=warn
-
- # LDAP authentication (optional)
- LDAP_ENABLED=true
- LDAP_HOST=${env.ldap.host}
- LDAP_PORT=636
- LDAP_METHOD=simple_tls
- LDAP_BASE="${env.ldap.base}"
- LDAP_BIND_DN="${env.ldap.dn}"
- LDAP_PASSWORD="${env.ldap.password}"
- LDAP_UID="uid"
- LDAP_SEARCH_FILTER="${env.ldap.filter}"
- '';
- };
- services.mastodon = {
- enable = true;
- configFile = config.secrets.fullPaths."webapps/tools-mastodon";
- socketsPrefix = "live_immae";
- dataDir = "/var/lib/mastodon_immae";
- };
- services.filesWatcher.mastodon-streaming = {
- restart = true;
- paths = [ mcfg.configFile ];
- };
- services.filesWatcher.mastodon-web = {
- restart = true;
- paths = [ mcfg.configFile ];
- };
- services.filesWatcher.mastodon-sidekiq = {
- restart = true;
- paths = [ mcfg.configFile ];
- };
-
-
- services.websites.env.tools.modules = [
- "headers" "proxy" "proxy_wstunnel" "proxy_http"
- ];
- services.websites.env.tools.vhostConfs.mastodon = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["mastodon.immae.eu" ];
- root = root;
- extraConfig = [ ''
- Header always set Referrer-Policy "strict-origin-when-cross-origin"
- Header always set Strict-Transport-Security "max-age=31536000"
-
-
- Header always set Cache-Control "public, max-age=31536000, immutable"
- Require all granted
-
-
- ProxyPreserveHost On
- RequestHeader set X-Forwarded-Proto "https"
-
- RewriteEngine On
-
- ProxyPass /500.html !
- ProxyPass /sw.js !
- ProxyPass /embed.js !
- ProxyPass /robots.txt !
- ProxyPass /manifest.json !
- ProxyPass /browserconfig.xml !
- ProxyPass /mask-icon.svg !
- ProxyPassMatch ^(/.*\.(png|ico|gif)$) !
- ProxyPassMatch ^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge) !
-
- RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L]
- RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L]
- ProxyPass / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/
- ProxyPassReverse / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/
-
- Alias /system ${mcfg.dataDir}
-
-
- Require all granted
- Options -MultiViews
-
-
-
- Require all granted
- Options -MultiViews +FollowSymlinks
-
-
- ErrorDocument 500 /500.html
- ErrorDocument 501 /500.html
- ErrorDocument 502 /500.html
- ErrorDocument 503 /500.html
- ErrorDocument 504 /500.html
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/tools/mgoblin/default.nix b/modules/private/websites/tools/mgoblin/default.nix
deleted file mode 100644
index 1e5f5a0..0000000
--- a/modules/private/websites/tools/mgoblin/default.nix
+++ /dev/null
@@ -1,134 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- env = config.myEnv.tools.mediagoblin;
- cfg = config.myServices.websites.tools.mediagoblin;
- mcfg = config.services.mediagoblin;
-in {
- options.myServices.websites.tools.mediagoblin = {
- enable = lib.mkEnableOption "enable mediagoblin's website";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys."webapps/tools-mediagoblin" = {
- user = "mediagoblin";
- group = "mediagoblin";
- permissions = "0400";
- text =
- let
- psql_url = with env.postgresql; "postgresql://${user}:${password}@:${port}/${database}?host=${socket}";
- redis_url = with env.redis; "redis+socket://${socket}?virtual_host=${db}";
- in
- ''
- [DEFAULT]
- data_basedir = "${mcfg.dataDir}"
-
- [mediagoblin]
- direct_remote_path = /mgoblin_static/
- email_sender_address = "mediagoblin@tools.immae.eu"
-
- #sql_engine = sqlite:///%(data_basedir)s/mediagoblin.db
- sql_engine = ${psql_url}
-
- email_debug_mode = false
- allow_registration = false
- allow_reporting = true
-
- theme = airymodified
-
- user_privilege_scheme = "uploader,commenter,reporter"
-
- # We need to redefine them here since we override data_basedir
- # cf /usr/share/webapps/mediagoblin/mediagoblin/config_spec.ini
- workbench_path = %(data_basedir)s/media/workbench
- crypto_path = %(data_basedir)s/crypto
- theme_install_dir = %(data_basedir)s/themes/
- theme_linked_assets_dir = %(data_basedir)s/theme_static/
- plugin_linked_assets_dir = %(data_basedir)s/plugin_static/
-
- [storage:queuestore]
- base_dir = %(data_basedir)s/media/queue
-
- [storage:publicstore]
- base_dir = %(data_basedir)s/media/public
- base_url = /mgoblin_media/
-
- [celery]
- CELERY_RESULT_DBURI = ${redis_url}
- BROKER_URL = ${redis_url}
- CELERYD_CONCURRENCY = 1
-
- [plugins]
- [[mediagoblin.plugins.geolocation]]
- [[mediagoblin.plugins.ldap]]
- [[[immae.eu]]]
- LDAP_SERVER_URI = 'ldaps://${env.ldap.host}:636'
- LDAP_SEARCH_BASE = '${env.ldap.base}'
- LDAP_BIND_DN = '${env.ldap.dn}'
- LDAP_BIND_PW = '${env.ldap.password}'
- LDAP_SEARCH_FILTER = '${env.ldap.filter}'
- EMAIL_SEARCH_FIELD = 'mail'
- [[mediagoblin.plugins.basicsearch]]
- [[mediagoblin.plugins.piwigo]]
- [[mediagoblin.plugins.processing_info]]
- [[mediagoblin.media_types.image]]
- [[mediagoblin.media_types.video]]
- '';
- };
-
- users.users.mediagoblin.extraGroups = [ "keys" ];
-
- services.mediagoblin = {
- enable = true;
- package = pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch]);
- configFile = config.secrets.fullPaths."webapps/tools-mediagoblin";
- };
- services.filesWatcher.mediagoblin-web = {
- restart = true;
- paths = [ mcfg.configFile ];
- };
- services.filesWatcher.mediagoblin-celeryd = {
- restart = true;
- paths = [ mcfg.configFile ];
- };
-
- services.websites.env.tools.modules = [
- "proxy" "proxy_http"
- ];
- users.users.wwwrun.extraGroups = [ "mediagoblin" ];
- services.websites.env.tools.vhostConfs.mgoblin = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["mgoblin.immae.eu" ];
- root = null;
- extraConfig = [ ''
- Alias /mgoblin_media ${mcfg.dataDir}/media/public
-
- Options -Indexes +FollowSymLinks +MultiViews +Includes
- Require all granted
-
-
- Alias /theme_static ${mcfg.dataDir}/theme_static
-
- Options -Indexes +FollowSymLinks +MultiViews +Includes
- Require all granted
-
-
- Alias /plugin_static ${mcfg.dataDir}/plugin_static
-
- Options -Indexes +FollowSymLinks +MultiViews +Includes
- Require all granted
-
-
- ProxyPreserveHost on
- ProxyVia On
- ProxyRequests Off
- ProxyPass /mgoblin_media !
- ProxyPass /theme_static !
- ProxyPass /plugin_static !
- ProxyPassMatch ^/.well-known/acme-challenge !
- ProxyPass / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/
- ProxyPassReverse / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/tools/peertube/default.nix b/modules/private/websites/tools/peertube/default.nix
deleted file mode 100644
index 68c992f..0000000
--- a/modules/private/websites/tools/peertube/default.nix
+++ /dev/null
@@ -1,94 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- env = config.myEnv.tools.peertube;
- cfg = config.myServices.websites.tools.peertube;
- pcfg = config.services.peertube;
-in {
- options.myServices.websites.tools.peertube = {
- enable = lib.mkEnableOption "enable Peertube's website";
- };
-
- config = lib.mkIf cfg.enable {
- services.peertube = {
- enable = true;
- configFile = config.secrets.fullPaths."webapps/tools-peertube";
- };
- users.users.peertube.extraGroups = [ "keys" ];
-
- secrets.keys."webapps/tools-peertube" = {
- user = "peertube";
- group = "peertube";
- permissions = "0640";
- text = ''
- listen:
- hostname: 'localhost'
- port: ${toString config.myEnv.ports.peertube}
- webserver:
- https: true
- hostname: 'peertube.immae.eu'
- port: 443
- database:
- hostname: '${env.postgresql.socket}'
- port: 5432
- suffix: '_prod'
- username: '${env.postgresql.user}'
- password: '${env.postgresql.password}'
- pool:
- max: 5
- redis:
- socket: '${env.redis.socket}'
- auth: null
- db: ${env.redis.db}
- smtp:
- transport: sendmail
- sendmail: '/run/wrappers/bin/sendmail'
- from_address: 'peertube@tools.immae.eu'
- storage:
- tmp: '${pcfg.dataDir}/storage/tmp/'
- avatars: '${pcfg.dataDir}/storage/avatars/'
- videos: '${pcfg.dataDir}/storage/videos/'
- streaming_playlists: '${pcfg.dataDir}/storage/streaming-playlists/'
- redundancy: '${pcfg.dataDir}/storage/videos/'
- logs: '${pcfg.dataDir}/storage/logs/'
- previews: '${pcfg.dataDir}/storage/previews/'
- thumbnails: '${pcfg.dataDir}/storage/thumbnails/'
- torrents: '${pcfg.dataDir}/storage/torrents/'
- captions: '${pcfg.dataDir}/storage/captions/'
- cache: '${pcfg.dataDir}/storage/cache/'
- plugins: '${pcfg.dataDir}/storage/plugins/'
- client_overrides: '${pcfg.dataDir}/storage/client-overrides/'
- '';
- };
-
- services.websites.env.tools.modules = [
- "headers" "proxy" "proxy_http" "proxy_wstunnel"
- ];
- services.filesWatcher.peertube = {
- restart = true;
- paths = [ pcfg.configFile ];
- };
-
- services.websites.env.tools.vhostConfs.peertube = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "peertube.immae.eu" ];
- root = null;
- extraConfig = [ ''
- RewriteEngine On
-
- RewriteCond %{REQUEST_URI} ^/socket.io [NC]
- RewriteCond %{QUERY_STRING} transport=websocket [NC]
- RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
-
- RewriteCond %{REQUEST_URI} ^/tracker/socket [NC]
- RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
-
- ProxyPass / http://localhost:${toString env.listenPort}/
- ProxyPassReverse / http://localhost:${toString env.listenPort}/
-
- ProxyPreserveHost On
- RequestHeader set X-Real-IP %{REMOTE_ADDR}s
- '' ];
- };
- };
-}
diff --git a/modules/private/websites/tools/performance/default.nix b/modules/private/websites/tools/performance/default.nix
deleted file mode 100644
index 5715ff0..0000000
--- a/modules/private/websites/tools/performance/default.nix
+++ /dev/null
@@ -1,88 +0,0 @@
-{ pkgs, lib, config, ... }:
-let
- env = config.myEnv.tools.status_engine;
- package = pkgs.status_engine.interface.override({ config_file = config.secrets.fullPaths."status_engine_ui"; });
- apacheRoot = "${package}/public";
- cfg = config.myServices.websites.tools.performance;
-in
-{
- options.myServices.websites.tools.performance = {
- enable = lib.mkEnableOption "Enable performance website";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- status_engine_ui = {
- permissions = "0400";
- user = "wwwrun";
- group = "wwwrun";
- text = ''
- allow_anonymous: 0
- anonymous_can_submit_commands: 0
- urls_without_login:
- - login
- - loginstate
- auth_type: ldap
- ldap_server: ${env.ldap.host}
- ldap_use_ssl: 1
- ldap_port: 636
- ldap_bind_dn: ${env.ldap.dn}
- ldap_bind_password: ${env.ldap.password}
- ldap_base_dn: ${env.ldap.base}
- ldap_filter: "${env.ldap.filter}"
- ldap_attribute:
- - memberOf
- use_crate: 0
- use_mysql: 1
- mysql:
- host: 127.0.0.1
- port: ${env.mysql.port}
- username: ${env.mysql.user}
- password: ${env.mysql.password}
- database: ${env.mysql.database}
- display_perfdata: 1
- perfdata_backend: mysql
- '';
- };
- };
-
- services.websites.env.tools.modules = [ "proxy_fcgi" ];
-
- services.websites.env.tools.vhostConfs.performance = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "performance.immae.eu" ];
- root = apacheRoot;
- extraConfig = [
- ''
-
- DirectoryIndex index.html
- AllowOverride None
- Require all granted
-
- SetHandler "proxy:unix:${config.services.phpfpm.pools.status_engine.socket}|fcgi://localhost"
-
-
- ''
- ];
- };
-
- services.phpfpm.pools.status_engine = {
- user = "wwwrun";
- group = "wwwrun";
- settings = {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "dynamic";
- "pm.max_children" = "60";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "10";
-
- "php_admin_value[open_basedir]" = "${package}:/tmp:${config.secrets.fullPaths."status_engine_ui"}";
- };
- phpPackage = pkgs.php74;
- };
-
- };
-}
diff --git a/modules/private/websites/tools/stats/default.nix b/modules/private/websites/tools/stats/default.nix
deleted file mode 100644
index 71e31a3..0000000
--- a/modules/private/websites/tools/stats/default.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ config, lib, pkgs, ... }:
-let
- cfg = config.myServices.websites.tools.stats;
- myCfg = config.myEnv.tools.umami;
-in
-{
- options.myServices.websites.tools.stats.enable = lib.mkEnableOption "Enable stats site";
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "uami/env" = {
- permission = "0400";
- text = ''
- PORT=${toString myCfg.listenPort}
- HOSTNAME=127.0.0.1
- DATABASE_URL=postgresql://${myCfg.postgresql.user}:${myCfg.postgresql.password}@localhost:${myCfg.postgresql.port}/${myCfg.postgresql.database}?sslmode=disable&host=${myCfg.postgresql.socket}
- HASH_SALT=${myCfg.hashSalt}
- '';
- };
- };
-
- services.websites.env.tools.vhostConfs.stats = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "stats.immae.eu" ];
- root = null;
- extraConfig = [
- ''
- ProxyPass / http://localhost:${toString myCfg.listenPort}/
- ProxyPassReverse / http://localhost:${toString myCfg.listenPort}/
- ProxyPreserveHost On
- ''
- ];
- };
- systemd.services.umami = {
- description = "Umami service";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- wants = [ "postgresql.service" ];
- path = [ pkgs.nodejs pkgs.bashInteractive ];
- serviceConfig = {
- Type = "simple";
- User = "umami";
- Group = "umami";
- DynamicUser = true;
- SupplementaryGroups = [ "keys" ];
- ExecStart = "${pkgs.umami}/bin/umami";
- EnvironmentFile = config.secrets.fullPaths."umami/env";
- };
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/adminer.nix b/modules/private/websites/tools/tools/adminer.nix
deleted file mode 100644
index c280684..0000000
--- a/modules/private/websites/tools/tools/adminer.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-{ webapps, php74, myPhpPackages, lib, forcePhpSocket ? null }:
-rec {
- activationScript = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/adminer
- '';
- };
- webRoot = webapps.adminer;
- phpFpm = rec {
- user = apache.user;
- group = apache.group;
- phpPackage = php74.withExtensions ({ enabled, all }: (lib.remove all.mysqli enabled) ++ [myPhpPackages.mysqli_pam]);
- settings = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "5";
- "pm.process_idle_timeout" = "60";
- #"php_admin_flag[log_errors]" = "on";
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "AdminerPHPSESSID";
- "php_admin_value[open_basedir]" = "${webRoot}:/tmp:/var/lib/php/sessions/adminer";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/adminer";
- };
- };
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /adminer ${webRoot}
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${if forcePhpSocket != null then forcePhpSocket else socket}|fcgi://localhost"
-
-
- Use LDAPConnect
- Require ldap-group cn=users,cn=mysql,cn=pam,ou=services,dc=immae,dc=eu
- Require ldap-group cn=users,cn=postgresql,cn=pam,ou=services,dc=immae,dc=eu
-
- '';
- };
-}
diff --git a/modules/private/websites/tools/tools/csp_reports.nix b/modules/private/websites/tools/tools/csp_reports.nix
deleted file mode 100644
index 9b3f0cf..0000000
--- a/modules/private/websites/tools/tools/csp_reports.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ env }:
-rec {
- keys."webapps/tools-csp-reports.conf" = {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0400";
- text = with env.postgresql; ''
- env[CSP_REPORT_URI] = "host=${socket} dbname=${database} user=${user} password=${password}"
- '';
- };
-}
diff --git a/modules/private/websites/tools/tools/default.nix b/modules/private/websites/tools/tools/default.nix
deleted file mode 100644
index 90fcbe1..0000000
--- a/modules/private/websites/tools/tools/default.nix
+++ /dev/null
@@ -1,429 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- flakeCompat = import ../../../../../lib/flake-compat.nix;
-
- adminer = pkgs.callPackage ./adminer.nix {};
- ympd = pkgs.callPackage ./ympd.nix {
- env = config.myEnv.tools.ympd;
- };
- ttrss = pkgs.callPackage ./ttrss.nix {
- inherit (pkgs.webapps) ttrss ttrss-plugins;
- env = config.myEnv.tools.ttrss;
- php = pkgs.php72;
- inherit config;
- };
- kanboard = pkgs.callPackage ./kanboard.nix {
- inherit config;
- env = config.myEnv.tools.kanboard;
- };
- wallabag = pkgs.callPackage ./wallabag.nix {
- wallabag = pkgs.webapps.wallabag.override {
- composerEnv = pkgs.composerEnv.override {
- php = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]);
- };
- };
- env = config.myEnv.tools.wallabag;
- inherit config;
- };
- yourls = pkgs.callPackage ./yourls.nix {
- inherit (pkgs.webapps) yourls yourls-plugins;
- env = config.myEnv.tools.yourls;
- inherit config;
- };
- rompr = pkgs.callPackage ./rompr.nix {
- inherit (pkgs.webapps) rompr;
- env = config.myEnv.tools.rompr;
- };
- shaarli = pkgs.callPackage ./shaarli.nix {
- env = config.myEnv.tools.shaarli;
- inherit config;
- };
- dokuwiki = pkgs.callPackage ./dokuwiki.nix {
- inherit (pkgs.webapps) dokuwiki dokuwiki-plugins;
- };
- ldap = pkgs.callPackage ./ldap.nix {
- inherit (pkgs.webapps) phpldapadmin;
- env = config.myEnv.tools.phpldapadmin;
- inherit config;
- };
- grocy = pkgs.callPackage ./grocy.nix {
- grocy = pkgs.webapps.grocy.override { composerEnv = pkgs.composerEnv.override { php = pkgs.php72; }; };
- };
- phpbb = pkgs.callPackage ./phpbb.nix {
- phpbb = (pkgs.webapps.phpbb.withLangs (l: [ l.fr ])).withExts (e: [
- e.alfredoramos.markdown e.davidiq.mailinglist e.dmzx.mchat
- e.empteintesduweb.monitoranswers e.lr94.autosubscribe
- e.phpbbmodders.adduser ]);
- };
- webhooks = pkgs.callPackage ./webhooks.nix {
- env = config.myEnv.tools.webhooks;
- };
- dmarc-reports = pkgs.callPackage ./dmarc_reports.nix {
- env = config.myEnv.tools.dmarc_reports;
- inherit config;
- };
- csp-reports = pkgs.callPackage ./csp_reports.nix {
- env = config.myEnv.tools.csp_reports;
- };
-
- landing = pkgs.callPackage ./landing.nix {};
-
- cfg = config.myServices.websites.tools.tools;
- pcfg = config.services.phpfpm.pools;
-in {
- imports =
- builtins.attrValues (flakeCompat ../../../../../flakes/private/paste).nixosModules;
-
- options.myServices.websites.tools.tools = {
- enable = lib.mkEnableOption "enable tools website";
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys =
- kanboard.keys
- // ldap.keys
- // shaarli.keys
- // ttrss.keys
- // wallabag.keys
- // yourls.keys
- // dmarc-reports.keys
- // csp-reports.keys
- // webhooks.keys;
-
- services.websites.env.tools.modules =
- [ "proxy_fcgi" ]
- ++ adminer.apache.modules
- ++ ympd.apache.modules
- ++ ttrss.apache.modules
- ++ wallabag.apache.modules
- ++ yourls.apache.modules
- ++ rompr.apache.modules
- ++ shaarli.apache.modules
- ++ dokuwiki.apache.modules
- ++ dmarc-reports.apache.modules
- ++ phpbb.apache.modules
- ++ ldap.apache.modules
- ++ kanboard.apache.modules;
-
- services.websites.env.integration.vhostConfs.devtools = {
- certName = "integration";
- certMainHost = "tools.immae.dev";
- addToCerts = true;
- hosts = [ "tools.immae.dev" ];
- root = "/var/lib/ftp/immae/devtools";
- extraConfig = [
- ''
- Use Apaxy "/var/lib/ftp/immae/devtools" "title"
- Timeout 600
- ProxyTimeout 600
- Header always set Content-Security-Policy-Report-Only "${config.myEnv.tools.csp_reports.policies.inline}"
-
- DirectoryIndex index.php index.htm index.html
- AllowOverride all
- Require all granted
-
- SetHandler "proxy:unix:${pcfg.devtools.socket}|fcgi://localhost"
-
-
- ''
- ];
- };
-
- services.websites.env.tools.vhostConfs.tools = {
- certName = "eldiron";
- addToCerts = true;
- hosts = ["tools.immae.eu" ];
- root = landing;
- extraConfig = [
- ''
- RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1
- RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
- RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse
-
-
- DirectoryIndex index.html
- AllowOverride None
- Require all granted
-
-
- SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost"
-
-
- ''
- (adminer.apache.vhostConf pcfg.adminer.socket)
- ympd.apache.vhostConf
- (ttrss.apache.vhostConf pcfg.ttrss.socket)
- (wallabag.apache.vhostConf pcfg.wallabag.socket)
- (yourls.apache.vhostConf pcfg.yourls.socket)
- (rompr.apache.vhostConf pcfg.rompr.socket)
- (shaarli.apache.vhostConf pcfg.shaarli.socket)
- (dokuwiki.apache.vhostConf pcfg.dokuwiki.socket)
- (ldap.apache.vhostConf pcfg.ldap.socket)
- (kanboard.apache.vhostConf pcfg.kanboard.socket)
- (grocy.apache.vhostConf pcfg.grocy.socket)
- (phpbb.apache.vhostConf pcfg.phpbb.socket)
- (dmarc-reports.apache.vhostConf pcfg.dmarc-reports.socket)
- ''
-
- ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
- ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
- ProxyPreserveHost on
-
-
- ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
- ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
- ProxyPreserveHost on
-
-
- Alias /BIP39 /var/lib/buildbot/outputs/immae/bip39
-
- DirectoryIndex index.html
- AllowOverride None
- Require all granted
-
-
- Alias /webhooks ${config.secrets.fullPaths."webapps/webhooks"}
-
- Options -Indexes
- Require all granted
- AllowOverride None
-
- SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost"
-
-
- ''
- ];
- };
-
- services.websites.env.tools.vhostConfs.outils = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "outils.immae.eu" ];
- root = null;
- extraConfig = [
- ''
- RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1
-
- RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1
-
- RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1
- RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1
-
- RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1
- RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1
- RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1
- RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1
-
- RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1
-
- RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
-
- RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse
-
- RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1
-
- RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1
- ''
- ];
- };
-
- systemd.services = {
- phpfpm-dokuwiki = {
- after = lib.mkAfter dokuwiki.phpFpm.serviceDeps;
- wants = dokuwiki.phpFpm.serviceDeps;
- };
- phpfpm-phpbb = {
- after = lib.mkAfter phpbb.phpFpm.serviceDeps;
- wants = phpbb.phpFpm.serviceDeps;
- };
- phpfpm-kanboard = {
- after = lib.mkAfter kanboard.phpFpm.serviceDeps;
- wants = kanboard.phpFpm.serviceDeps;
- };
- phpfpm-ldap = {
- after = lib.mkAfter ldap.phpFpm.serviceDeps;
- wants = ldap.phpFpm.serviceDeps;
- };
- phpfpm-shaarli = {
- after = lib.mkAfter shaarli.phpFpm.serviceDeps;
- wants = shaarli.phpFpm.serviceDeps;
- };
- phpfpm-ttrss = {
- after = lib.mkAfter ttrss.phpFpm.serviceDeps;
- wants = ttrss.phpFpm.serviceDeps;
- };
- phpfpm-wallabag = {
- after = lib.mkAfter wallabag.phpFpm.serviceDeps;
- wants = wallabag.phpFpm.serviceDeps;
- preStart = lib.mkAfter wallabag.phpFpm.preStart;
- };
- phpfpm-yourls = {
- after = lib.mkAfter yourls.phpFpm.serviceDeps;
- wants = yourls.phpFpm.serviceDeps;
- };
- ympd = {
- description = "Standalone MPD Web GUI written in C";
- wantedBy = [ "multi-user.target" ];
- script = ''
- export MPD_PASSWORD=$(cat ${config.secrets.fullPaths."mpd"})
- ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody
- '';
- };
- tt-rss = {
- description = "Tiny Tiny RSS feeds update daemon";
- serviceConfig = {
- User = "wwwrun";
- ExecStart = "${pkgs.php72}/bin/php ${ttrss.webRoot}/update.php --daemon";
- StandardOutput = "syslog";
- StandardError = "syslog";
- PermissionsStartOnly = true;
- };
-
- wantedBy = [ "multi-user.target" ];
- requires = ["postgresql.service"];
- after = ["network.target" "postgresql.service"];
- };
- };
-
- services.filesWatcher.ympd = {
- restart = true;
- paths = [ config.secrets.fullPaths."mpd" ];
- };
-
- services.phpfpm.pools = {
- tools = {
- user = "wwwrun";
- group = "wwwrun";
- settings = {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "dynamic";
- "pm.max_children" = "60";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "10";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "ToolsPHPSESSID";
- "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" [
- "/run/wrappers/bin/sendmail" landing "/tmp"
- config.secrets.fullPaths."webapps/webhooks"
- ];
- "include" = config.secrets.fullPaths."webapps/tools-csp-reports.conf";
- };
- phpEnv = {
- CONTACT_EMAIL = config.myEnv.tools.contact;
- };
- phpPackage = pkgs.php72;
- };
- devtools = {
- user = "wwwrun";
- group = "wwwrun";
- settings = {
- "listen.owner" = "wwwrun";
- "listen.group" = "wwwrun";
- "pm" = "dynamic";
- "pm.max_children" = "60";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "10";
-
- "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:/var/lib/ftp/immae/devtools:/tmp";
- };
- phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.mysqli all.redis all.apcu all.opcache ]);
- };
- adminer = adminer.phpFpm;
- ttrss = {
- user = "wwwrun";
- group = "wwwrun";
- settings = ttrss.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- wallabag = {
- user = "wwwrun";
- group = "wwwrun";
- settings = wallabag.phpFpm.pool;
- phpPackage = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]);
- };
- yourls = {
- user = "wwwrun";
- group = "wwwrun";
- settings = yourls.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- rompr = {
- user = "wwwrun";
- group = "wwwrun";
- settings = rompr.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- shaarli = {
- user = "wwwrun";
- group = "wwwrun";
- settings = shaarli.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- dmarc-reports = {
- user = "wwwrun";
- group = "wwwrun";
- settings = dmarc-reports.phpFpm.pool;
- phpEnv = dmarc-reports.phpFpm.phpEnv;
- phpPackage = pkgs.php72;
- };
- dokuwiki = {
- user = "wwwrun";
- group = "wwwrun";
- settings = dokuwiki.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- phpbb = {
- user = "wwwrun";
- group = "wwwrun";
- settings = phpbb.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- ldap = {
- user = "wwwrun";
- group = "wwwrun";
- settings = ldap.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- kanboard = {
- user = "wwwrun";
- group = "wwwrun";
- settings = kanboard.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- grocy = {
- user = "wwwrun";
- group = "wwwrun";
- settings = grocy.phpFpm.pool;
- phpPackage = pkgs.php72;
- };
- };
-
- system.activationScripts = {
- adminer = adminer.activationScript;
- grocy = grocy.activationScript;
- ttrss = ttrss.activationScript;
- wallabag = wallabag.activationScript;
- yourls = yourls.activationScript;
- rompr = rompr.activationScript;
- shaarli = shaarli.activationScript;
- dokuwiki = dokuwiki.activationScript;
- phpbb = phpbb.activationScript;
- kanboard = kanboard.activationScript;
- ldap = ldap.activationScript;
- };
-
- services.websites.env.tools.watchPaths = [
- config.secrets.fullPaths."webapps/tools-shaarli"
- ];
- services.filesWatcher.phpfpm-wallabag = {
- restart = true;
- paths = [ config.secrets.fullPaths."webapps/tools-wallabag" ];
- };
-
- };
-}
-
diff --git a/modules/private/websites/tools/tools/dmarc_reports.nix b/modules/private/websites/tools/tools/dmarc_reports.nix
deleted file mode 100644
index 8a77b13..0000000
--- a/modules/private/websites/tools/tools/dmarc_reports.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{ env, config }:
-rec {
- keys."webapps/tools-dmarc-reports.php" = {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0400";
- text = ''
-
- '';
- };
- webRoot = ./dmarc_reports;
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /dmarc-reports "${root}"
-
- DirectoryIndex index.html
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride None
- Options +FollowSymlinks
-
- SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
- Use LDAPConnect
- Require all granted
- Require ldap-attribute uid=immae
-
- '';
- };
- phpFpm = rec {
- basedir = builtins.concatStringsSep ":"
- [ webRoot config.secrets.fullPaths."webapps/tools-dmarc-reports.php" ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- };
- phpEnv = {
- SECRETS_FILE = config.secrets.fullPaths."webapps/tools-dmarc-reports.php";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/dmarc_reports/api.php b/modules/private/websites/tools/tools/dmarc_reports/api.php
deleted file mode 100644
index 850f9ce..0000000
--- a/modules/private/websites/tools/tools/dmarc_reports/api.php
+++ /dev/null
@@ -1,122 +0,0 @@
- "ok",
-);
-$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname, $dbport);
-
-function error_die($text, $number) {
- http_response_code("500");
- $message = array(
- "status" => "error",
- "message" => $text,
- "code" => $number
- );
-
- die(json_encode($message));
-}
-
-$anonymous = isset($_GET['anonymous']) && $_GET['anonymous'];
-function maybe_anonymize($string, $long = false) {
- global $anonymous_key;
- global $anonymous;
- if ($anonymous) {
- if ($long) {
- return md5($anonymous_key . ":" . $string);
- } else {
- return substr(md5($anonymous_key . ":" . $string), 0, 6);
- }
- } else {
- return $string;
- }
-}
-
-if (!$anonymous && (!isset($_SERVER['HTTP_AUTHORIZATION']) || $_SERVER['HTTP_AUTHORIZATION'] === "")) {
- header('WWW-Authenticate: Basic realm="Immae"');
- header('HTTP/1.0 401 Unauthorized');
- echo "You need to be authenticated to access private information";
- exit;
-}
-
-if ($mysqli->connect_errno) {
- error_die($mysqli->connect_error, $mysqli->connect_errno);
-}
-
-if (!isset($_GET['serial'])) {
- $response["domains"] = array();
- $query = $mysqli->query("SELECT DISTINCT domain FROM `report` ORDER BY domain");
- if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
- while($row = $query->fetch_assoc()) {
- $response["domains"][] = maybe_anonymize($row['domain']);
- }
-
- $response["orgs"] = array();
- $query = $mysqli->query("SELECT DISTINCT org FROM `report` ORDER BY org");
- if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
- while($row = $query->fetch_assoc()) {
- $response["orgs"][] = maybe_anonymize($row['org']);
- }
-
- $response["dates"] = array();
- $query = $mysqli->query("SELECT DISTINCT DISTINCT year(mindate) as year, month(mindate) as month FROM `report` ORDER BY year DESC,month DESC");
- if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
- while($row = $query->fetch_assoc()) {
- $response["dates"][] = sprintf( "%'.04d-%'.02d", $row['year'], $row['month'] );
- }
-
- $response["summaries"] = array();
- if (isset($_GET['errors_only'])) {
- $where = " WHERE (spfresult != 'pass' or dkimresult != 'pass')";
- } else {
- $where = "";
- }
-
- $sql = "SELECT report.* , sum(rptrecord.rcount) AS rcount, MIN(rptrecord.dkimresult) AS dkimresult, MIN(rptrecord.spfresult) AS spfresult FROM report LEFT JOIN (SELECT rcount, COALESCE(dkimresult, 'neutral') AS dkimresult, COALESCE(spfresult, 'neutral') AS spfresult, serial FROM rptrecord) AS rptrecord ON report.serial = rptrecord.serial$where GROUP BY serial ORDER BY mindate ASC, maxdate ASC, org";
- $query = $mysqli->query($sql);
- if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
- while($row = $query->fetch_assoc()) {
- $wanted_keys = array(
- 'domain', 'org', 'reportid', 'mindate', 'maxdate', 'rcount', 'serial', 'policy_adkim', 'policy_aspf', 'policy_none', 'policy_sp', 'policy_pct', 'spfresult', 'dkimresult'
- );
- $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1'));
- $row["domain"] = maybe_anonymize($row["domain"]);
- $row["org"] = maybe_anonymize($row["org"]);
- $row["reportid"] = maybe_anonymize($row["reportid"], true);
- $response["summaries"][] = $row;
- }
-} else {
- $response["rptrecord"] = [];
- $sql = $mysqli->prepare("SELECT * FROM rptrecord where serial = ?");
- $sql->bind_param("s", $_GET["serial"]);
- $sql->execute();
- $query = $sql->get_result();
- if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
- while($row = $query->fetch_assoc()) {
- if ($row['ip']) {
- $ip = long2ip($row['ip']);
- $host = gethostbyaddr($ip);
- } elseif ( $row['ip6'] ) {
- $ip = inet_ntop($row['ip6']);
- $host = gethostbyaddr($ip);
- } else {
- $ip = "-";
- $host = "-";
- }
- $wanted_keys = array(
- 'ip', 'host', 'rcount', 'disposition', 'reason', 'dkimdomain', 'dkimresult', 'spfdomain', 'spfresult'
- );
- $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1'));
- $row['ip'] = maybe_anonymize($ip);
- $row['host'] = maybe_anonymize($host);
- $row['dkimdomain'] = maybe_anonymize($row['dkimdomain']);
- $row['spfdomain'] = maybe_anonymize($row['spfdomain']);
- $response["rptrecord"][] = $row;
- }
-}
-
-header("Content-Type: application/json");
-
-echo json_encode($response, JSON_PRETTY_PRINT);
-?>
diff --git a/modules/private/websites/tools/tools/dmarc_reports/app.js b/modules/private/websites/tools/tools/dmarc_reports/app.js
deleted file mode 100644
index 8e8a6c4..0000000
--- a/modules/private/websites/tools/tools/dmarc_reports/app.js
+++ /dev/null
@@ -1,103 +0,0 @@
-const app = new Vue({
- el: '#app',
- data: {
- info: null,
- summaries: null,
- selectedSummary: null,
- filterGreen: true,
- filterDomain: null,
- filterOrg: null,
- //filterDate: (new Date()).toISOString().substring(0, 7),
- filterDate: null,
- reverse: true,
- anonymous: true,
- },
- created: async function () {
- let that = this;
-
- if ('anonymous' in localStorage) {
- this.anonymous = JSON.parse(localStorage.anonymous);
- }
- this.fetchAll();
- },
- methods: {
- fetchAll: async function() {
- try {
- this.info = await this.getInfo();
- this.summaries = this.info.summaries;
- } catch (error) {
- this.info = null;
- this.summaries = null;
- }
- },
- toggleAnonymous: function() {
- this.anonymous = !this.anonymous;
- localStorage.anonymous = this.anonymous;
- this.fetchAll();
- },
- filtered: function () {
- let that = this;
- let filtered = this.summaries.filter(function (summary) {
- return (!that.filterGreen || that.getColor(summary) !== "lime")
- && (!that.filterDomain || summary.domain === that.filterDomain)
- && (!that.filterOrg || summary.org === that.filterOrg)
- && (!that.filterDate || that.inDates(summary));
- });
- if (this.reverse) {
- return filtered.reverse();
- } else {
- return filtered;
- }
- },
- toggle: async function(summary) {
- if (this.selectedSummary && this.selectedSummary.serial === summary.serial) {
- this.selectedSummary = null;
- } else {
- if (!summary.details) {
- summary.details = await this.getDetails(summary.serial);
- }
- this.selectedSummary = summary;
- }
- },
- inDates: function(summary) {
- if (!this.filterDate) { return true; }
-
- let mindate = (new Date(summary.mindate)).toISOString().substring(0, 7);
- let maxdate = (new Date(summary.maxdate)).toISOString().substring(0, 7);
-
- return mindate === this.filterDate || maxdate === this.filterDate;
- },
- printDate: function (date) {
- return (new Date(date)).toISOString().replace("T", " ").replace(/\..*Z$/, " UTC");
- },
- getColor: function (element) {
- if (element.dkimresult === "fail" && element.spfresult === "fail") {
- return "red";
- } else if (element.dkimresult === "fail" || element.spfresult === "fail") {
- return "orange";
- } else if (element.dkimresult === "pass" && element.spfresult === "pass") {
- return "lime";
- } else {
- return "yellow";
- }
- },
- getInfo: function (event) {
- let anonymous = this.anonymous ? "anonymous=1" : "";
- return fetch(`api.php?${anonymous}`).then(function (response) {
- if (response.status != 200) { return; }
- return response.text().then(function (body) {
- return JSON.parse(body);
- });
- });
- },
- getDetails: function (serial) {
- let anonymous = this.anonymous ? "&anonymous=1" : "";
- return fetch(`api.php?serial=${serial}${anonymous}`).then(function (response) {
- if (response.status != 200) { return; }
- return response.text().then(function (body) {
- return JSON.parse(body);
- });
- });
- }
- }
-});
diff --git a/modules/private/websites/tools/tools/dmarc_reports/default.css b/modules/private/websites/tools/tools/dmarc_reports/default.css
deleted file mode 100644
index 9e0c63f..0000000
--- a/modules/private/websites/tools/tools/dmarc_reports/default.css
+++ /dev/null
@@ -1,130 +0,0 @@
-h1 {
- text-align: center;
-}
-
-p.warninginfo {
- text-align: center;
-}
-
-table.reportlist {
- margin: 2em auto 2em auto;
- border-collapse: collapse;
- clear: both;
-}
-
-table.reportlist td, table.reportlist th {
- padding:3px;
-}
-
-table.reportlist thead {
- border-top: 1px solid grey;
- border-bottom: 1px solid grey;
-
-}
-table.reportlist tbody tr:first-child td {
- padding-top: 10px;
-}
-table.reportlist tr.sum {
- border-top: 1px solid grey;
-}
-table.reportlist tr.selected {
- background-color: lightgrey;
-}
-.reportdesc {
- font-weight: bold;
- width: 90%;
- margin-left: auto;
- margin-right: auto;
-}
-
-tr.summaryrow {
- cursor: pointer;
-}
-
-tr.summaryrow:hover, tr.summaryrow.selected {
- background-color: lightgray;
- border-left: 1px solid lightgray;
-}
-
-td.reportcell {
- border-bottom: 1px solid lightgray;
- border-left: 1px solid lightgray;
- border-right: 1px solid lightgray;
-}
-
-table.reportdata {
- margin: 0px auto 0px auto;
- border-collapse: separate;
- border-spacing: 2px;
-}
-
-table.reportdata tr th, table.reportdata tr td {
- text-align: center;
- padding: 3px;
-}
-
-table.reportdata tr.red {
- background-color: #FF0000;
-}
-
-table.reportdata tr.orange {
- background-color: #FFA500;
-}
-
-table.reportdata tr.lime {
- background-color: #00FF00;
-}
-
-table.reportdata tr.yellow {
- background-color: #FFFF00;
-}
-
-.optionblock {
- background: lightgrey;
- padding: 0.4em;
- float: right;
- margin: auto 2em 1em auto;
- white-space: nowrap;
-}
-
-.optionlabel {
- font-weight: bold;
- float: left; clear: left;
- margin-right: 1em;
-}
-
-.options {
- font-size: 70%;
- text-align: right;
- border: none;
- width: 97%;
- padding: 0.4em;
-}
-
-.center {
- text-align:center;
-}
-
-.circle_lime:before {
- content: ' \25CF';
- font-size: 25px;
- color: #00FF00;
-}
-
-.circle_red:before {
- content: ' \25CF';
- font-size: 25px;
- color: #FF0000;
-}
-
-.circle_yellow:before {
- content: ' \25CF';
- font-size: 25px;
- color: #FFFF00;
-}
-
-.circle_orange:before {
- content: ' \25CF';
- font-size: 25px;
- color: #FFA500;
-}
diff --git a/modules/private/websites/tools/tools/dmarc_reports/index.html b/modules/private/websites/tools/tools/dmarc_reports/index.html
deleted file mode 100644
index 0afc82f..0000000
--- a/modules/private/websites/tools/tools/dmarc_reports/index.html
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
- Dmarc reports
-
-
-
-
-
-
-
-
DMARC Reports
-
- No information could be fetched. If in non-anonymous mode you need to be logged-in
-
-
-
-
-
- Start Date
- End Date
- Domain
- Reporting Organization
- Report ID
- Messages
-
-
-
-
-
-
- {{ printDate(summary.mindate) }}
- {{ printDate(summary.maxdate) }}
- {{ summary.domain }}
- {{ summary.org }}
- {{ summary.reportid }}
- {{ summary.rcount }}
-
-
-
-
-
Policies: adkim={{ summary.policy_adkim }}, aspf={{ summary.policy_aspf }}, p={{ summary.policy_none }}, sp={{ summary.policy_sp }}, pct={{ summary.policy_pct }}
-
-
-
-
- IP Address
- Host Name
- Message Count
- Disposition
- Reason
- DKIM Domain
- Raw DKIM Result
- SPF Domain
- Raw SPF Result
-
-
-
-
- {{ record.ip }}
- {{ record.host }}
- {{ record.rcount }}
- {{ record.disposition }}
- {{ record.reason }}
- {{ record.dkimdomain }}
- {{ record.dkimresult }}
- {{ record.spfdomain }}
- {{ record.spfresult }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/private/websites/tools/tools/dokuwiki.nix b/modules/private/websites/tools/tools/dokuwiki.nix
deleted file mode 100644
index aee495a..0000000
--- a/modules/private/websites/tools/tools/dokuwiki.nix
+++ /dev/null
@@ -1,56 +0,0 @@
-{ lib, stdenv, dokuwiki, dokuwiki-plugins }:
-rec {
- varDir = "/var/lib/dokuwiki";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- if [ ! -d ${varDir} ]; then
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/animals
- cp -a ${webRoot}/conf.dist ${varDir}/conf
- cp -a ${webRoot}/data.dist ${varDir}/data
- cp -a ${webRoot}/
- chown -R ${apache.user}:${apache.user} ${varDir}/config ${varDir}/data
- chmod -R 755 ${varDir}/config ${varDir}/data
- fi
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- '';
- };
- webRoot = dokuwiki.withPlugins (p: [ p.farmer p.todo ]);
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /dokuwiki "${root}"
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride All
- Options +FollowSymlinks
- Require all granted
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "openldap.service" ];
- basedir = builtins.concatStringsSep ":" (
- [ webRoot varDir ] ++ webRoot.plugins);
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "DokuwikiPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/grocy.nix b/modules/private/websites/tools/tools/grocy.nix
deleted file mode 100644
index 3c45261..0000000
--- a/modules/private/websites/tools/tools/grocy.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{ lib, stdenv, grocy }:
-rec {
- varDir = "/var/lib/grocy";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- '';
- };
- webRoot = grocy.webRoot;
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /grocy "${root}"
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride All
- Options +FollowSymlinks
- Require all granted
-
- '';
- };
- phpFpm = rec {
- basedir = builtins.concatStringsSep ":" (
- [ grocy grocy.yarnModules varDir ]);
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "grocyPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
-
diff --git a/modules/private/websites/tools/tools/kanboard.nix b/modules/private/websites/tools/tools/kanboard.nix
deleted file mode 100644
index 4809a42..0000000
--- a/modules/private/websites/tools/tools/kanboard.nix
+++ /dev/null
@@ -1,80 +0,0 @@
-{ env, kanboard, config }:
-rec {
- varDir = "/var/lib/kanboard";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- install -TDm644 ${webRoot}/dataold/.htaccess ${varDir}/data/.htaccess
- install -TDm644 ${webRoot}/dataold/web.config ${varDir}/data/web.config
- '';
- };
- keys."webapps/tools-kanboard" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
-
- '';
- };
- webRoot = kanboard { kanboard_config = config.secrets.fullPaths."webapps/tools-kanboard"; };
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /kanboard "${root}"
-
- DirectoryIndex index.php
- AllowOverride All
- Options FollowSymlinks
- Require all granted
-
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
-
- Require all denied
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" [ webRoot varDir config.secrets.fullPaths."webapps/tools-kanboard" ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "KanboardPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/landing.nix b/modules/private/websites/tools/tools/landing.nix
deleted file mode 100644
index 2acc323..0000000
--- a/modules/private/websites/tools/tools/landing.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{ sources, stdenv, yarn2nix-moretea }:
-let
- yarnModules = yarn2nix-moretea.mkYarnModules rec {
- name = "landing";
- pname = name;
- version = "v1.0.0";
- packageJSON = "${sources.webapps-landing}/package.json";
- yarnLock = "${sources.webapps-landing}/yarn.lock";
- yarnNix = ./landing/yarn-packages.nix;
- };
-in
- stdenv.mkDerivation rec {
- pname = "landing";
- version = "v1.0.0";
- src = sources.webapps-landing;
-
- buildInputs = [ yarnModules yarn2nix-moretea.yarn ];
- configurePhase = ''
- ln -s ${yarnModules}/node_modules .
- '';
- buildPhase = ''
- yarn build
- '';
- installPhase = ''
- cp -a dist $out
- cp ${./landing}/*.php $out/
- ln -s service-worker.js $out/worker.js
- '';
- }
diff --git a/modules/private/websites/tools/tools/landing/ldap_password.php b/modules/private/websites/tools/tools/landing/ldap_password.php
deleted file mode 100644
index b6079e5..0000000
--- a/modules/private/websites/tools/tools/landing/ldap_password.php
+++ /dev/null
@@ -1,140 +0,0 @@
-
- * @website: http://technology.mattrude.com/2010/11/ldap-php-change-password-webpage/
- *
- *
- * GNU GENERAL PUBLIC LICENSE
- * Version 2, June 1991
- *
- * Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- * Everyone is permitted to copy and distribute verbatim copies
- * of this license document, but changing it is not allowed.
- */
-
-$message = array();
-$message_css = "";
-
-function changePassword($user,$oldPassword,$newPassword,$newPasswordCnf){
- global $message;
- global $message_css;
-
- $server = "ldaps://ldap.immae.eu";
-
- error_reporting(0);
- $con = ldap_connect($server);
- ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
-
- $user_dn = "uid=$user,ou=users,dc=immae,dc=eu";
-
- if (ldap_bind($con, $user_dn, $oldPassword) === false) {
- $user_dn = "uid=$user,ou=group_users,dc=immae,dc=eu";
- if (ldap_bind($con, $user_dn, $oldPassword) === false) {
- $message[] = "Error E101 - Current Username or Password is wrong.";
- return false;
- }
- }
- if ($newPassword != $newPasswordCnf ) {
- $message[] = "Error E102 - Your New passwords do not match!";
- return false;
- }
- if (strlen($newPassword) < 6 ) {
- $message[] = "Error E103 - Your new password is too short. Your password must be at least 6 characters long.";
- return false;
- }
-
- $salt = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',4)),0,4);
- $encoded_newPassword = "{SSHA}" . base64_encode(pack("H*", sha1($newPassword.$salt)).$salt);
-
- $user_search = ldap_search($con,"dc=immae,dc=eu","(uid=$user)");
- $auth_entry = ldap_first_entry($con, $user_search);
-
- $mail_addresses = ldap_get_values($con, $auth_entry, "mail");
- $given_names = ldap_get_values($con, $auth_entry, "givenName");
- $mail_address = $mail_addresses[0];
- $first_name = $given_names[0];
-
- /* And Finally, Change the password */
- $entry = array();
- $entry["userPassword"] = "$encoded_newPassword";
-
- if (ldap_modify($con,$user_dn,$entry) === false){
- $error = ldap_error($con);
- $errno = ldap_errno($con);
- $message[] = "E201 - Your password cannot be changed, please contact the administrator.";
- $message[] = "$errno - $error";
- } else {
- $message_css = "yes";
- mail($mail_address,"Password change notice","Dear $first_name,
-Your password on https://tools.immae.eu/ldap_password.php for account $user was just changed.
-If you did not make this change, please contact me.
-If you were the one who changed your password, you may disregard this message.
-
-Thanks
---
-Immae / Ismaël", "From: " . getenv("CONTACT_EMAIL"));
- $message[] = "The password for $user has been changed. An informational email has been sent to $mail_address. Your new password is now fully active.";
- }
-}
-
-?>
-
-
-
-Password Change Page
-
-
-
-
-
-
-
-
-
diff --git a/modules/private/websites/tools/tools/landing/ldap_ssh_keys.php b/modules/private/websites/tools/tools/landing/ldap_ssh_keys.php
deleted file mode 100644
index 259e28d..0000000
--- a/modules/private/websites/tools/tools/landing/ldap_ssh_keys.php
+++ /dev/null
@@ -1,348 +0,0 @@
-
-
-
- ImmaeEu Account
-
-
-
-
-
-
-
-
Gestion des clés SSH
- $apps,
- 'public_key' => $publicKey,
- 'comment' => $comment,
- ];
- }
-
- return $keys;
-}
-
-function pushLdapInfos($keys)
-{
- $con = doConnect();
- if (!isset($_SESSION["user_dn"]))
- return false;
-
- return ldap_mod_replace($con, $_SESSION["user_dn"], array("immaeSshKey" => $keys));
-}
-
-
-// Script
-if (isset($_POST['deconnexion'])) {
- $_SESSION = [];
-}
-
-if (isset($_POST['sauvegarder'])) {
- $editedKeys = [];
- $errors = false;
- $keysToSave = [];
- foreach($_POST['keys'] as $id => $key) {
- $editedKeys[$id] = $key;
- if (!checkSshKey($key['public_key'])) {
- $editedKeys[$id]['error'] = true;
- $errors = true;
- }
-
- if (!isset($key['apps'])) {
- $editedKeys[$id]['apps'] = $key['apps'] = [];
-
- }
- foreach ($key['apps'] as $app) {
- if (!in_array($app, apps)) {
- die("integrity");
- }
- }
-
- if (!isset($editedKeys[$id]['error']) || $editedKeys[$id]['error'] !== true) {
- $keysToSave[] = implode('|', $key['apps']) . ' ' . $key['public_key'] . ' ' . $key['comment'];
- }
- }
-
- if (!$errors) {
- $successSave = pushLdapInfos($keysToSave);
- }
-}
-
-$loginErrors = "";
-if (isset($_POST['login'])) {
- if (empty($_POST['username']) || empty($_POST['password'])) {
- $loginErrors = "Le nom d'utilisateur et le mot de passe sont requis.";
- } elseif (!checkLogin($_POST['username'], $_POST['password'])) {
- $loginErrors = "Identifiants incorrects.";
- } else {
- $_SESSION['login'] = $_POST['username'];
- }
-}
-
-if (isUserLogged()) :
- $keys = isset($editedKeys) ? $editedKeys : getLdapInfo();
-?>
-
Connecté en tant que = $_SESSION['login']; ?>
-
-
-
-
-
Clés enregistrées avec succès.
-
-
-
-
-
-
- Login
-
-
- = $loginErrors; ?>
-
-
- Utilisateur :
-
-
- Mot de passe :
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/private/websites/tools/tools/landing/myip.php b/modules/private/websites/tools/tools/landing/myip.php
deleted file mode 100644
index 9ec1c6c..0000000
--- a/modules/private/websites/tools/tools/landing/myip.php
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/modules/private/websites/tools/tools/landing/node-packages.nix b/modules/private/websites/tools/tools/landing/node-packages.nix
deleted file mode 100644
index 9ebf254..0000000
--- a/modules/private/websites/tools/tools/landing/node-packages.nix
+++ /dev/null
@@ -1,130 +0,0 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
-
-{nodeEnv, fetchurl, fetchgit, src, globalBuildInputs ? []}:
-
-let
- sources = {
- "@fortawesome/fontawesome-free-5.13.1" = {
- name = "_at_fortawesome_slash_fontawesome-free";
- packageName = "@fortawesome/fontawesome-free";
- version = "5.13.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz";
- sha512 = "D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw==";
- };
- };
- "argparse-1.0.10" = {
- name = "argparse";
- packageName = "argparse";
- version = "1.0.10";
- src = fetchurl {
- url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
- sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
- };
- };
- "bulma-0.8.2" = {
- name = "bulma";
- packageName = "bulma";
- version = "0.8.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/bulma/-/bulma-0.8.2.tgz";
- sha512 = "vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA==";
- };
- };
- "core-js-3.6.5" = {
- name = "core-js";
- packageName = "core-js";
- version = "3.6.5";
- src = fetchurl {
- url = "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz";
- sha512 = "vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==";
- };
- };
- "esprima-4.0.1" = {
- name = "esprima";
- packageName = "esprima";
- version = "4.0.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
- sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
- };
- };
- "js-yaml-3.14.0" = {
- name = "js-yaml";
- packageName = "js-yaml";
- version = "3.14.0";
- src = fetchurl {
- url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz";
- sha512 = "/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==";
- };
- };
- "lodash.merge-4.6.2" = {
- name = "lodash.merge";
- packageName = "lodash.merge";
- version = "4.6.2";
- src = fetchurl {
- url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz";
- sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==";
- };
- };
- "register-service-worker-1.7.1" = {
- name = "register-service-worker";
- packageName = "register-service-worker";
- version = "1.7.1";
- src = fetchurl {
- url = "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.1.tgz";
- sha512 = "IdTfUZ4u8iJL8o1w8es8l6UMGPmkwHolUdT+UmM1UypC80IB4KbpuIlvwWVj8UDS7eJwkEYRcKRgfRX+oTmJsw==";
- };
- };
- "sprintf-js-1.0.3" = {
- name = "sprintf-js";
- packageName = "sprintf-js";
- version = "1.0.3";
- src = fetchurl {
- url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
- sha1 = "04e6926f662895354f3dd015203633b857297e2c";
- };
- };
- "vue-2.6.11" = {
- name = "vue";
- packageName = "vue";
- version = "2.6.11";
- src = fetchurl {
- url = "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz";
- sha512 = "VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==";
- };
- };
- };
- args = {
- name = "homer";
- packageName = "homer";
- version = "20.06.1";
- inherit src;
- dependencies = [
- sources."@fortawesome/fontawesome-free-5.13.1"
- sources."argparse-1.0.10"
- sources."bulma-0.8.2"
- sources."core-js-3.6.5"
- sources."esprima-4.0.1"
- sources."js-yaml-3.14.0"
- sources."lodash.merge-4.6.2"
- sources."register-service-worker-1.7.1"
- sources."sprintf-js-1.0.3"
- sources."vue-2.6.11"
- ];
- buildInputs = globalBuildInputs;
- meta = {
- license = "Apache-2.0";
- };
- production = true;
- bypassCache = true;
- reconstructLock = true;
- };
-in
-{
- args = args;
- sources = sources;
- tarball = nodeEnv.buildNodeSourceDist args;
- package = nodeEnv.buildNodePackage args;
- shell = nodeEnv.buildNodeShell args;
-}
diff --git a/modules/private/websites/tools/tools/landing/report_csp_violation.php b/modules/private/websites/tools/tools/landing/report_csp_violation.php
deleted file mode 100644
index 30140b2..0000000
--- a/modules/private/websites/tools/tools/landing/report_csp_violation.php
+++ /dev/null
@@ -1,22 +0,0 @@
-custom->appearance['show_clear_password'] = true;
- $config->custom->appearance['hide_template_warning'] = true;
- $config->custom->appearance['theme'] = "tango";
- $config->custom->appearance['minimalMode'] = false;
- $config->custom->appearance['tree'] = 'AJAXTree';
-
- $servers = new Datastore();
-
- $servers->newServer('ldap_pla');
- $servers->setValue('server','name','Immae’s LDAP');
- $servers->setValue('server','host','ldaps://${env.ldap.host}');
- $servers->setValue('login','auth_type','cookie');
- $servers->setValue('login','bind_id','${env.ldap.dn}');
- $servers->setValue('login','bind_pass','${env.ldap.password}');
- $servers->setValue('appearance','pla_password_hash','ssha');
- $servers->setValue('login','attr','uid');
- $servers->setValue('login','fallback_dn',true);
- '';
- };
- webRoot = phpldapadmin.override { config = config.secrets.fullPaths."webapps/tools-ldap"; };
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = "${webRoot}/htdocs";
- vhostConf = socket: ''
- Alias /ldap "${root}"
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride None
- Require all granted
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "openldap.service" ];
- basedir = builtins.concatStringsSep ":" [ webRoot config.secrets.fullPaths."webapps/tools-ldap" ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "LdapPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/phpldapadmin";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/phpldapadmin";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/phpbb.nix b/modules/private/websites/tools/tools/phpbb.nix
deleted file mode 100644
index 77845c3..0000000
--- a/modules/private/websites/tools/tools/phpbb.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ lib, phpbb, gnused }:
-rec {
- varDir = "/var/lib/phpbb";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- if [ ! -d ${varDir} ]; then
- install -m 0755 -o ${apache.user} -g ${apache.user} -d ${varDir}
- cp -a ${phpbb}/vars/* ${varDir}
- chown -R ${apache.user}:${apache.user} ${varDir}
- fi
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- '';
- };
- webRoot = phpbb;
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /forum "${root}"
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride All
- Options FollowSymlinks
- Require all granted
-
- # add instal to the list after install
-
- Require all denied
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" ];
- basedir = builtins.concatStringsSep ":" [ "/run/wrappers/bin/sendmail" phpbb varDir ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "PhpBBPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/rompr.nix b/modules/private/websites/tools/tools/rompr.nix
deleted file mode 100644
index e80d6b2..0000000
--- a/modules/private/websites/tools/tools/rompr.nix
+++ /dev/null
@@ -1,72 +0,0 @@
-{ lib, env, rompr }:
-rec {
- varDir = "/var/lib/rompr";
- activationScript = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/prefs ${varDir}/albumart ${varDir}/phpSessions
- '';
- webRoot = rompr;
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "headers" "mime" "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /rompr ${root}
-
-
- Options Indexes FollowSymLinks
- DirectoryIndex index.php
- AllowOverride all
- Require all granted
- Order allow,deny
- Allow from all
- ErrorDocument 404 /rompr/404.php
- AddType image/x-icon .ico
-
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
-
-
- Header Set Cache-Control "max-age=0, no-store"
- Header Set Cache-Control "no-cache, must-revalidate"
-
-
-
- Header Set Cache-Control "max-age=0, no-store"
- Header Set Cache-Control "no-cache, must-revalidate"
-
-
-
- Use LDAPConnect
- Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu
-
- '';
- };
- phpFpm = rec {
- basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "RomprPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- "php_flag[magic_quotes_gpc]" = "Off";
- "php_flag[track_vars]" = "On";
- "php_flag[register_globals]" = "Off";
- "php_admin_flag[allow_url_fopen]" = "On";
- "php_value[include_path]" = "${webRoot}";
- "php_admin_value[upload_tmp_dir]" = "${varDir}/prefs";
- "php_admin_value[post_max_size]" = "32M";
- "php_admin_value[upload_max_filesize]" = "32M";
- "php_admin_value[memory_limit]" = "256M";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/shaarli.nix b/modules/private/websites/tools/tools/shaarli.nix
deleted file mode 100644
index d128465..0000000
--- a/modules/private/websites/tools/tools/shaarli.nix
+++ /dev/null
@@ -1,66 +0,0 @@
-{ lib, env, stdenv, fetchurl, shaarli, config }:
-let
- varDir = "/var/lib/shaarli";
-in rec {
- activationScript = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/cache ${varDir}/pagecache ${varDir}/tmp ${varDir}/data \
- ${varDir}/phpSessions
- '';
- webRoot = shaarli varDir;
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" "rewrite" "env" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /Shaarli "${root}"
-
- Include ${config.secrets.fullPaths."webapps/tools-shaarli"}
-
- Header set Access-Control-Allow-Origin "*"
- Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
- Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, Client-Security-Token, Accept-Encoding"
-
-
- DirectoryIndex index.php index.htm index.html
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- '';
- };
- keys."webapps/tools-shaarli" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
- SetEnv SHAARLI_LDAP_PASSWORD "${env.ldap.password}"
- SetEnv SHAARLI_LDAP_DN "${env.ldap.dn}"
- SetEnv SHAARLI_LDAP_HOST "ldaps://${env.ldap.host}"
- SetEnv SHAARLI_LDAP_BASE "${env.ldap.base}"
- SetEnv SHAARLI_LDAP_FILTER "${env.ldap.filter}"
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "openldap.service" ];
- basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "ShaarliPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- "php_admin_value[upload_max_filesize]" = "200M";
- "php_admin_value[post_max_size]" = "200M";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/ttrss.nix b/modules/private/websites/tools/tools/ttrss.nix
deleted file mode 100644
index 1dc99ed..0000000
--- a/modules/private/websites/tools/tools/ttrss.nix
+++ /dev/null
@@ -1,129 +0,0 @@
-{ php, env, ttrss, ttrss-plugins, config }:
-rec {
- varDir = "/var/lib/ttrss";
- activationScript = {
- deps = [ "wrappers" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/lock ${varDir}/cache ${varDir}/feed-icons
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/cache/export/ \
- ${varDir}/cache/feeds/ \
- ${varDir}/cache/images/ \
- ${varDir}/cache/js/ \
- ${varDir}/cache/simplepie/ \
- ${varDir}/cache/upload/
- touch ${varDir}/feed-icons/index.html
- install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
- '';
- };
- keys."webapps/tools-ttrss" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
-
- DirectoryIndex index.php
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride All
- Options FollowSymlinks
- Require all granted
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "postgresql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" (
- [ webRoot config.secrets.fullPaths."webapps/tools-ttrss" varDir ]
- ++ webRoot.plugins);
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "TtrssPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
- "php_admin_value[session.save_path]" = "${varDir}/phpSessions";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/wallabag.nix b/modules/private/websites/tools/tools/wallabag.nix
deleted file mode 100644
index 0ebdb0b..0000000
--- a/modules/private/websites/tools/tools/wallabag.nix
+++ /dev/null
@@ -1,142 +0,0 @@
-{ env, wallabag, mylibs, config }:
-rec {
- varDir = "/var/lib/wallabag";
- keys."webapps/tools-wallabag" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
- # This file is auto-generated during the composer install
- parameters:
- database_driver: pdo_pgsql
- database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver
- database_host: ${env.postgresql.socket}
- database_port: ${env.postgresql.port}
- database_name: ${env.postgresql.database}
- database_user: ${env.postgresql.user}
- database_password: ${env.postgresql.password}
- database_path: null
- database_table_prefix: wallabag_
- database_socket: null
- database_charset: utf8
- domain_name: https://tools.immae.eu/wallabag
- mailer_transport: sendmail
- mailer_host: 127.0.0.1
- mailer_user: null
- mailer_password: null
- locale: fr
- secret: ${env.secret}
- twofactor_auth: true
- twofactor_sender: wallabag@tools.immae.eu
- fosuser_registration: false
- fosuser_confirmation: true
- from_email: wallabag@tools.immae.eu
- rss_limit: 50
- rabbitmq_host: localhost
- rabbitmq_port: 5672
- rabbitmq_user: guest
- rabbitmq_password: guest
- rabbitmq_prefetch_count: 10
- redis_scheme: unix
- redis_host: null
- redis_port: null
- redis_path: ${env.redis.socket}
- redis_password: null
- sites_credentials: { }
- ldap_enabled: true
- ldap_host: ${env.ldap.host}
- ldap_port: 636
- ldap_tls: false
- ldap_ssl: true
- ldap_bind_requires_dn: true
- ldap_base: '${env.ldap.base}'
- ldap_manager_dn: '${env.ldap.dn}'
- ldap_manager_pw: ${env.ldap.password}
- ldap_filter: '${env.ldap.filter}'
- ldap_admin_filter: '${env.ldap.admin_filter}'
- ldap_username_attribute: uid
- ldap_email_attribute: mail
- ldap_name_attribute: cn
- ldap_enabled_attribute: null
- services:
- swiftmailer.mailer.default.transport:
- class: Swift_SendmailTransport
- arguments: ['/run/wrappers/bin/sendmail -bs']
- '';
- };
- webappDir = wallabag.override { ldap = true; wallabag_config = config.secrets.fullPaths."webapps/tools-wallabag"; };
- activationScript = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/var ${varDir}/data/db ${varDir}/assets/images
- '';
- webRoot = "${webappDir}/web";
- # Domain migration: Table wallabag_entry contains whole
- # https://tools.immae.eu/wallabag domain name in preview_picture
- apache = rec {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- root = webRoot;
- vhostConf = socket: ''
- Alias /wallabag "${root}"
-
- AllowOverride None
- Require all granted
- # For OAuth (apps)
- CGIPassAuth On
-
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
-
- Options -MultiViews
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ app.php [QSA,L]
-
-
-
-
- RewriteEngine Off
-
-
-
- AllowOverride None
- Require all granted
-
- '';
- };
- phpFpm = rec {
- preStart = ''
- if [ ! -f "${varDir}/currentWebappDir" -o \
- ! -f "${varDir}/currentKey" -o \
- "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \
- || ! sha512sum -c --status ${varDir}/currentKey; then
- pushd ${webappDir} > /dev/null
- /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear
- rm -rf /var/lib/wallabag/var/cache/pro_
- /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction
- popd > /dev/null
- echo -n "${webappDir}" > ${varDir}/currentWebappDir
- sha512sum ${config.secrets.fullPaths."webapps/tools-wallabag"} > ${varDir}/currentKey
- fi
- '';
- serviceDeps = [ "postgresql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" [ webappDir config.secrets.fullPaths."webapps/tools-wallabag" varDir ];
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "dynamic";
- "pm.max_children" = "60";
- "pm.start_servers" = "2";
- "pm.min_spare_servers" = "1";
- "pm.max_spare_servers" = "10";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "WallabagPHPSESSID";
- "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/tmp";
- "php_value[max_execution_time]" = "300";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/webhooks.nix b/modules/private/websites/tools/tools/webhooks.nix
deleted file mode 100644
index 785e22b..0000000
--- a/modules/private/websites/tools/tools/webhooks.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ lib, env }:
-{
- keys = lib.attrsets.mapAttrs' (k: v:
- lib.nameValuePair "webapps/webhooks/${k}.php" {
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0400";
- text = v;
- }) env // {
- "webapps/webhooks" = {
- isDir = true;
- user = "wwwrun";
- group = "wwwrun";
- permissions = "0500";
- };
- };
-}
diff --git a/modules/private/websites/tools/tools/ympd.nix b/modules/private/websites/tools/tools/ympd.nix
deleted file mode 100644
index 531b1a9..0000000
--- a/modules/private/websites/tools/tools/ympd.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ env }:
-let
- ympd = rec {
- config = {
- webPort = "localhost:${toString env.listenPort}";
- host = env.mpd.host;
- port = env.mpd.port;
- };
- apache = {
- modules = [
- "proxy_wstunnel"
- ];
- vhostConf = ''
-
- Use LDAPConnect
- Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu
-
-
- RedirectMatch permanent "^/mpd$" "/mpd/"
-
- ProxyPass http://${config.webPort}/
- ProxyPassReverse http://${config.webPort}/
- ProxyPreserveHost on
-
-
- ProxyPass ws://${config.webPort}/ws
-
-
- ProxyPass unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3
- ProxyPassReverse unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3
-
-
- ProxyPass unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg
- ProxyPassReverse unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg
-
- '';
- };
- };
-in
- ympd
diff --git a/modules/private/websites/tools/tools/yourls.nix b/modules/private/websites/tools/tools/yourls.nix
deleted file mode 100644
index 3717520..0000000
--- a/modules/private/websites/tools/tools/yourls.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-{ env, yourls, yourls-plugins, config }:
-rec {
- activationScript = {
- deps = [ "httpd" ];
- text = ''
- install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/yourls
- '';
- };
- keys."webapps/tools-yourls" = {
- user = apache.user;
- group = apache.group;
- permissions = "0400";
- text = ''
-
-
- SetHandler "proxy:unix:${socket}|fcgi://localhost"
-
-
- AllowOverride None
- Require all granted
-
- RewriteEngine On
- RewriteBase /url/
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^.*$ /url/yourls-loader.php [L]
-
- DirectoryIndex index.php
-
- '';
- };
- phpFpm = rec {
- serviceDeps = [ "mysql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" (
- [ webRoot config.secrets.fullPaths."webapps/tools-yourls" ]
- ++ webRoot.plugins);
- pool = {
- "listen.owner" = apache.user;
- "listen.group" = apache.group;
- "pm" = "ondemand";
- "pm.max_children" = "60";
- "pm.process_idle_timeout" = "60";
-
- # Needed to avoid clashes in browser cookies (same domain)
- "php_value[session.name]" = "YourlsPHPSESSID";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/yourls";
- "php_admin_value[session.save_path]" = "/var/lib/php/sessions/yourls";
- };
- };
-}
diff --git a/modules/private/websites/tools/vpn/default.nix b/modules/private/websites/tools/vpn/default.nix
deleted file mode 100644
index 9cd499b..0000000
--- a/modules/private/websites/tools/vpn/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- cfg = config.myServices.vpn;
-in {
- config = lib.mkIf cfg.enable {
- services.websites.env.tools.vhostConfs.vpn = {
- certName = "eldiron";
- addToCerts = true;
- hosts = [ "vpn.immae.eu" ];
- root = ./www;
- };
- };
-}
diff --git a/modules/private/websites/tools/vpn/www/index.html b/modules/private/websites/tools/vpn/www/index.html
deleted file mode 100644
index fc2618a..0000000
--- a/modules/private/websites/tools/vpn/www/index.html
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
- VPN configuration
-
-
-
-
-
-
-
Installation
-
- Installer tinc
- Créer un fichier /etc/tinc/Immae/tinc.conf sur ce modèle, en remplaçant la ligne A choisir
par un nom de la forme DomaineMachine. La machine sera accessible par machine.domaine.immae.eu
par la suite
-
-Name = A choisir
-Mode = switch
-Interface = vpn6
-ConnectTo = ImmaeEu
-
-# The tap device tinc will use.
-# Default is /dev/tap0 for ethertap or FreeBSD,
-# /dev/tun0 for Solaris and OpenBSD,
-# and /dev/net/tun for Linux tun/tap device.
-Device = /dev/net/tun
-LocalDiscovery = yes
-
-
- Vérifier l'existence du device indiqué à la ligne "Device
" dans le système.
- ls /dev/net/tun
-
- Si tinc tourne déjà, l'arrêter !!
- Générer les clés :
- tincd -K -n Immae
- Stocker la clé privée dans /etc/tinc/Immae/rsa_key.priv
et la clé publique dans un autre dossier
- (pas /etc/tinc/Immae/hosts/
comme proposé par défaut ).
- L'endroit importe peu, elle ne sera pas conservée.
- M'envoyer le nom choisi dans tinc.conf
, et la clé publique
- Cloner le dépôt des hôtes du réseau
-
-cd /etc/tinc/Immae
-git clone https://git.immae.eu/perso/Immae/Config/tinc/hosts
-
-
- Une fois que j'ai confirmé avoir reçu la clé :
-
-cd /etc/tinc/Immae/hosts
-git pull origin master
-
-
- Uniquement pour Debian/Ubuntu: Ajouter Immae
dans /etc/tinc/nets.boot
(créer le fichier si nécessaire).
- Selon le système, démarrer tinc :
-
-/etc/init.d/tinc start
-
- ou
-
-systemctl enable tincd@Immae.service
-systemctl start tincd@Immae.service
-
-
-
-
-
Choix d'ip
-
-
-
-
diff --git a/modules/private/websites/tools/vpn/www/style.css b/modules/private/websites/tools/vpn/www/style.css
deleted file mode 100644
index b177fec..0000000
--- a/modules/private/websites/tools/vpn/www/style.css
+++ /dev/null
@@ -1,61 +0,0 @@
-* {
- margin:0;
- padding:0;
- -webkit-box-sizing:border-box;
- -moz-box-sizing:border-box;
- box-sizing: border-box;
-}
-
-html {
- min-height:100%;
- border-top:10px solid #ECEEF1;
- border-bottom:10px solid #ECEEF1;
- color:#61666c;
- font-weight:400;
- font-size:1em;
- font-family:'Open Sans', sans-serif;
- line-height:2em;
-}
-body {
- padding:20px;
- -webkit-backface-visibility:hidden;
-}
-code {
- font-family:consolas,monospace;
-}
-a {
- color:#61666c;
- text-decoration:none;
-}
-a, img {
- border:none;
- outline:none
-}
-a:hover {
- color:#2a2a2a;
-}
-
-.instructions {
- margin:0 auto;
- padding-top:20px;
- max-width:80%;
-}
-
-.instructions a {
- text-decoration: underline;
-}
-
-.instructions h2 {
- margin-top: 10px;
-}
-.instructions em.important:before {
- content: "⚠ Important ⚠ ";
- color: red;
-}
-.instructions pre {
- width: 50em;
- padding: 10px 15px;
- display: table;
- border: 1px inset black;
- line-height: 1em;
-}
diff --git a/modules/webapps/diaspora.nix b/modules/webapps/diaspora.nix
deleted file mode 100644
index d9e9989..0000000
--- a/modules/webapps/diaspora.nix
+++ /dev/null
@@ -1,173 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- name = "diaspora";
- cfg = config.services.diaspora;
-
- uid = config.ids.uids.diaspora;
- gid = config.ids.gids.diaspora;
-in
-{
- options.services.diaspora = {
- enable = lib.mkEnableOption "Enable Diaspora’s service";
- user = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "User account under which Diaspora runs";
- };
- group = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "Group under which Diaspora runs";
- };
- adminEmail = lib.mkOption {
- type = lib.types.str;
- example = "admin@example.com";
- description = "Admin e-mail for Diaspora";
- };
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/${name}";
- description = ''
- The directory where Diaspora stores its data.
- '';
- };
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/${name}";
- description = ''
- The directory where Diaspora puts runtime files and sockets.
- '';
- };
- configDir = lib.mkOption {
- type = lib.types.path;
- description = ''
- The configuration path for Diaspora.
- '';
- };
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.webapps.diaspora;
- description = ''
- Diaspora package to use.
- '';
- };
- # Output variables
- systemdStateDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if varDir is outside of /var/lib
- default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir;
- lib.strings.removePrefix "/var/lib/" cfg.dataDir;
- description = ''
- Adjusted Diaspora data directory for systemd
- '';
- readOnly = true;
- };
- systemdRuntimeDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if socketsDir is outside of /run
- default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir;
- lib.strings.removePrefix "/run/" cfg.socketsDir;
- description = ''
- Adjusted Diaspora sockets directory for systemd
- '';
- readOnly = true;
- };
- workdir = lib.mkOption {
- type = lib.types.package;
- default = cfg.package.override {
- varDir = cfg.dataDir;
- podmin_email = cfg.adminEmail;
- config_dir = cfg.configDir;
- };
- description = ''
- Adjusted diaspora package with overriden values
- '';
- readOnly = true;
- };
- sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- rails = "${cfg.socketsDir}/diaspora.sock";
- eye = "${cfg.socketsDir}/eye.sock";
- };
- readOnly = true;
- description = ''
- Diaspora sockets
- '';
- };
- pids = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- eye = "${cfg.socketsDir}/eye.pid";
- };
- readOnly = true;
- description = ''
- Diaspora pids
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users = lib.optionalAttrs (cfg.user == name) {
- "${name}" = {
- inherit uid;
- group = cfg.group;
- description = "Diaspora user";
- home = cfg.dataDir;
- packages = [ cfg.workdir.gems pkgs.nodejs cfg.workdir.gems.ruby ];
- useDefaultShell = true;
- };
- };
- users.groups = lib.optionalAttrs (cfg.group == name) {
- "${name}" = {
- inherit gid;
- };
- };
-
- systemd.services.diaspora = {
- description = "Diaspora";
- wantedBy = [ "multi-user.target" ];
- after = [
- "network.target" "redis.service" "postgresql.service"
- ];
- wants = [
- "redis.service" "postgresql.service"
- ];
-
- environment.RAILS_ENV = "production";
- environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}";
- environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile";
- environment.EYE_SOCK = cfg.sockets.eye;
- environment.EYE_PID = cfg.pids.eye;
-
- path = [ cfg.workdir.gems pkgs.nodejs cfg.workdir.gems.ruby pkgs.curl pkgs.which pkgs.gawk ];
-
- preStart = ''
- install -m 0755 -d ${cfg.dataDir}/uploads ${cfg.dataDir}/tmp ${cfg.dataDir}/log
- install -m 0700 -d ${cfg.dataDir}/tmp/pids
- if [ ! -f ${cfg.dataDir}/schedule.yml ]; then
- echo "{}" > ${cfg.dataDir}/schedule.yml
- fi
- ./bin/bundle exec rails db:migrate
- '';
-
- script = ''
- exec ${cfg.workdir}/script/server
- '';
-
- serviceConfig = {
- User = cfg.user;
- PrivateTmp = true;
- Restart = "always";
- Type = "simple";
- WorkingDirectory = cfg.workdir;
- StateDirectory = cfg.systemdStateDirectory;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- StandardInput = "null";
- KillMode = "control-group";
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
- };
-}
diff --git a/modules/webapps/etherpad-lite.nix b/modules/webapps/etherpad-lite.nix
deleted file mode 100644
index 2e09952..0000000
--- a/modules/webapps/etherpad-lite.nix
+++ /dev/null
@@ -1,162 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- name = "etherpad-lite";
- cfg = config.services.etherpad-lite;
-
- uid = config.ids.uids.etherpad-lite;
- gid = config.ids.gids.etherpad-lite;
-in
-{
- options.services.etherpad-lite = {
- enable = lib.mkEnableOption "Enable Etherpad lite’s service";
- user = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "User account under which Etherpad lite runs";
- };
- group = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "Group under which Etherpad lite runs";
- };
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/${name}";
- description = ''
- The directory where Etherpad lite stores its data.
- '';
- };
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/${name}";
- description = ''
- The directory where Etherpad lite stores its sockets.
- '';
- };
- configFile = lib.mkOption {
- type = lib.types.path;
- description = ''
- The config file path for Etherpad lite.
- '';
- };
- sessionKeyFile = lib.mkOption {
- type = lib.types.path;
- description = ''
- The Session key file path for Etherpad lite.
- '';
- };
- apiKeyFile = lib.mkOption {
- type = lib.types.path;
- description = ''
- The API key file path for Etherpad lite.
- '';
- };
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.webapps.etherpad-lite;
- description = ''
- Etherpad lite package to use.
- '';
- example = lib.literalExample ''
- pkgs.webapps.etherpad-lite.withModules (p: [ p.ep_align ]);
- '';
- };
- modules = lib.mkOption {
- type = lib.types.listOf lib.types.package;
- default = [];
- description = ''
- Etherpad lite modules to use.
- DEPRECATED: use package directly
- '';
- };
- # Output variables
- workdir = lib.mkOption {
- type = lib.types.package;
- default = cfg.package.withModules (_: cfg.modules);
- description = ''
- Adjusted Etherpad lite package with plugins
- '';
- readOnly = true;
- };
- systemdStateDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if varDir is outside of /var/lib
- default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir;
- lib.strings.removePrefix "/var/lib/" cfg.dataDir;
- description = ''
- Adjusted Etherpad lite data directory for systemd
- '';
- readOnly = true;
- };
- systemdRuntimeDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if socketsDir is outside of /run
- default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir;
- lib.strings.removePrefix "/run/" cfg.socketsDir;
- description = ''
- Adjusted Etherpad lite sockets directory for systemd
- '';
- readOnly = true;
- };
- sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- node = "${cfg.socketsDir}/etherpad-lite.sock";
- };
- readOnly = true;
- description = ''
- Etherpad lite sockets
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- systemd.services.etherpad-lite = {
- description = "Etherpad-lite";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" "postgresql.service" ];
- wants = [ "postgresql.service" ];
-
- environment.NODE_ENV = "production";
- environment.HOME = cfg.workdir;
-
- path = [ pkgs.nodejs ];
-
- script = ''
- exec ${pkgs.nodejs}/bin/node ${cfg.workdir}/src/node/server.js \
- --sessionkey ${cfg.sessionKeyFile} \
- --apikey ${cfg.apiKeyFile} \
- --settings ${cfg.configFile}
- '';
-
- postStart = ''
- while [ ! -S ${cfg.sockets.node} ]; do
- sleep 0.5
- done
- chmod a+w ${cfg.sockets.node}
- '';
- serviceConfig = {
- DynamicUser = true;
- User = cfg.user;
- Group = cfg.group;
- WorkingDirectory = cfg.workdir;
- PrivateTmp = true;
- NoNewPrivileges = true;
- PrivateDevices = true;
- ProtectHome = true;
- ProtectControlGroups = true;
- ProtectKernelModules = true;
- Restart = "always";
- Type = "simple";
- TimeoutSec = 60;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- StateDirectory= cfg.systemdStateDirectory;
- ExecStartPre = [
- "+${pkgs.coreutils}/bin/install -d -m 0755 -o ${cfg.user} -g ${cfg.group} ${cfg.dataDir}/ep_initialized"
- "+${pkgs.coreutils}/bin/chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir} ${cfg.configFile} ${cfg.sessionKeyFile} ${cfg.apiKeyFile}"
- ];
- };
- };
-
- };
-}
diff --git a/modules/webapps/mastodon.nix b/modules/webapps/mastodon.nix
deleted file mode 100644
index df2dbb2..0000000
--- a/modules/webapps/mastodon.nix
+++ /dev/null
@@ -1,265 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- name = "mastodon";
- cfg = config.services.mastodon;
-
- uid = config.ids.uids.mastodon;
- gid = config.ids.gids.mastodon;
-in
-{
- options.services.mastodon = {
- enable = lib.mkEnableOption "Enable Mastodon’s service";
- user = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "User account under which Mastodon runs";
- };
- group = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "Group under which Mastodon runs";
- };
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/${name}";
- description = ''
- The directory where Mastodon stores its data.
- '';
- };
- socketsPrefix = lib.mkOption {
- type = lib.types.str;
- default = "live";
- description = ''
- The prefix to use for Mastodon sockets.
- '';
- };
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/${name}";
- description = ''
- The directory where Mastodon puts runtime files and sockets.
- '';
- };
- configFile = lib.mkOption {
- type = lib.types.path;
- description = ''
- The configuration file path for Mastodon.
- '';
- };
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.webapps.mastodon;
- description = ''
- Mastodon package to use.
- '';
- };
- # Output variables
- workdir = lib.mkOption {
- type = lib.types.package;
- default = cfg.package.override { varDir = cfg.dataDir; };
- description = ''
- Adjusted mastodon package with overriden varDir
- '';
- readOnly = true;
- };
- systemdStateDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if varDir is outside of /var/lib
- default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir;
- lib.strings.removePrefix "/var/lib/" cfg.dataDir;
- description = ''
- Adjusted Mastodon data directory for systemd
- '';
- readOnly = true;
- };
- systemdRuntimeDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if socketsDir is outside of /run
- default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir;
- lib.strings.removePrefix "/run/" cfg.socketsDir;
- description = ''
- Adjusted Mastodon sockets directory for systemd
- '';
- readOnly = true;
- };
- sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- node = "${cfg.socketsDir}/${cfg.socketsPrefix}_node.sock";
- rails = "${cfg.socketsDir}/${cfg.socketsPrefix}_puma.sock";
- };
- readOnly = true;
- description = ''
- Mastodon sockets
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users = lib.optionalAttrs (cfg.user == name) {
- "${name}" = {
- inherit uid;
- group = cfg.group;
- description = "Mastodon user";
- home = cfg.dataDir;
- useDefaultShell = true;
- };
- };
- users.groups = lib.optionalAttrs (cfg.group == name) {
- "${name}" = {
- inherit gid;
- };
- };
-
- systemd.slices.mastodon = {
- description = "Mastodon slice";
- };
-
- systemd.services.mastodon-streaming = {
- description = "Mastodon Streaming";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" "mastodon-web.service" ];
-
- environment.NODE_ENV = "production";
- environment.SOCKET = cfg.sockets.node;
-
- path = [ pkgs.nodejs pkgs.bashInteractive ];
-
- script = ''
- exec npm run start
- '';
-
- postStart = ''
- while [ ! -S $SOCKET ]; do
- sleep 0.5
- done
- chmod a+w $SOCKET
- '';
-
- postStop = ''
- rm $SOCKET
- '';
-
- serviceConfig = {
- Slice = "mastodon.slice";
- User = cfg.user;
- EnvironmentFile = cfg.configFile;
- PrivateTmp = true;
- Restart = "always";
- TimeoutSec = 15;
- Type = "simple";
- WorkingDirectory = cfg.workdir;
- StateDirectory = cfg.systemdStateDirectory;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- RuntimeDirectoryPreserve = "yes";
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
-
- systemd.services.mastodon-web = {
- description = "Mastodon Web app";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
-
- environment.RAILS_ENV = "production";
- environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}";
- environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile";
- environment.SOCKET = cfg.sockets.rails;
-
- path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file pkgs.imagemagick ];
-
- preStart = ''
- install -m 0755 -d ${cfg.dataDir}/tmp/cache
- ./bin/bundle exec rails db:migrate
- '';
-
- script = ''
- exec ./bin/bundle exec puma -C config/puma.rb
- '';
-
- postStart = ''
- exec ./bin/tootctl cache clear
- '';
- serviceConfig = {
- Slice = "mastodon.slice";
- User = cfg.user;
- EnvironmentFile = cfg.configFile;
- PrivateTmp = true;
- Restart = "always";
- TimeoutSec = 60;
- Type = "simple";
- WorkingDirectory = cfg.workdir;
- StateDirectory = cfg.systemdStateDirectory;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- RuntimeDirectoryPreserve = "yes";
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
-
- systemd.services.mastodon-cleanup = {
- description = "Cleanup mastodon";
- startAt = "daily";
- restartIfChanged = false;
-
- environment.RAILS_ENV = "production";
- environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}";
- environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile";
- environment.SOCKET = cfg.sockets.rails;
-
- path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file ];
-
- script = ''
- exec ./bin/tootctl media remove --days 30
- '';
-
- serviceConfig = {
- User = cfg.user;
- EnvironmentFile = cfg.configFile;
- PrivateTmp = true;
- Type = "oneshot";
- WorkingDirectory = cfg.workdir;
- StateDirectory = cfg.systemdStateDirectory;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- RuntimeDirectoryPreserve = "yes";
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
-
- systemd.services.mastodon-sidekiq = {
- description = "Mastodon Sidekiq";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" "mastodon-web.service" ];
-
- environment.RAILS_ENV="production";
- environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}";
- environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile";
- environment.DB_POOL="5";
-
- path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.imagemagick pkgs.ffmpeg pkgs.file ];
-
- script = ''
- exec ./bin/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push
- '';
-
- serviceConfig = {
- Slice = "mastodon.slice";
- User = cfg.user;
- EnvironmentFile = cfg.configFile;
- PrivateTmp = true;
- Restart = "always";
- TimeoutSec = 15;
- Type = "simple";
- WorkingDirectory = cfg.workdir;
- StateDirectory = cfg.systemdStateDirectory;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- RuntimeDirectoryPreserve = "yes";
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
-
- };
-}
diff --git a/modules/webapps/mediagoblin.nix b/modules/webapps/mediagoblin.nix
deleted file mode 100644
index 3fe5e38..0000000
--- a/modules/webapps/mediagoblin.nix
+++ /dev/null
@@ -1,231 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- name = "mediagoblin";
- cfg = config.services.mediagoblin;
-
- uid = config.ids.uids.mediagoblin;
- gid = config.ids.gids.mediagoblin;
-
- paste_local = pkgs.writeText "paste_local.ini" ''
- [DEFAULT]
- debug = false
-
- [pipeline:main]
- pipeline = mediagoblin
-
- [app:mediagoblin]
- use = egg:mediagoblin#app
- config = ${cfg.configFile} ${cfg.package}/mediagoblin.ini
- /mgoblin_static = ${cfg.package}/mediagoblin/static
-
- [loggers]
- keys = root
-
- [handlers]
- keys = console
-
- [formatters]
- keys = generic
-
- [logger_root]
- level = INFO
- handlers = console
-
- [handler_console]
- class = StreamHandler
- args = (sys.stderr,)
- level = NOTSET
- formatter = generic
-
- [formatter_generic]
- format = %(levelname)-7.7s [%(name)s] %(message)s
-
- [filter:errors]
- use = egg:mediagoblin#errors
- debug = false
-
- [server:main]
- use = egg:waitress#main
- unix_socket = ${cfg.sockets.paster}
- unix_socket_perms = 777
- url_scheme = https
- '';
-in
-{
- options.services.mediagoblin = {
- enable = lib.mkEnableOption "Enable Mediagoblin’s service";
- user = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "User account under which Mediagoblin runs";
- };
- group = lib.mkOption {
- type = lib.types.str;
- default = name;
- description = "Group under which Mediagoblin runs";
- };
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/${name}";
- description = ''
- The directory where Mediagoblin stores its data.
- '';
- };
- socketsDir = lib.mkOption {
- type = lib.types.path;
- default = "/run/${name}";
- description = ''
- The directory where Mediagoblin puts runtime files and sockets.
- '';
- };
- configFile = lib.mkOption {
- type = lib.types.path;
- description = ''
- The configuration file path for Mediagoblin.
- '';
- };
- package = lib.mkOption {
- type = lib.types.package;
- default = pkgs.webapps.mediagoblin;
- example = lib.literalExample ''
- pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch])
- '';
- description = ''
- Mediagoblin package to use.
- '';
- };
- systemdStateDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if varDir is outside of /var/lib
- default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir;
- lib.strings.removePrefix "/var/lib/" cfg.dataDir;
- description = ''
- Adjusted Mediagoblin data directory for systemd
- '';
- readOnly = true;
- };
- systemdRuntimeDirectory = lib.mkOption {
- type = lib.types.str;
- # Use ReadWritePaths= instead if socketsDir is outside of /run
- default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir;
- lib.strings.removePrefix "/run/" cfg.socketsDir;
- description = ''
- Adjusted Mediagoblin sockets directory for systemd
- '';
- readOnly = true;
- };
- sockets = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- paster = "${cfg.socketsDir}/mediagoblin.sock";
- };
- readOnly = true;
- description = ''
- Mediagoblin sockets
- '';
- };
- pids = lib.mkOption {
- type = lib.types.attrsOf lib.types.path;
- default = {
- paster = "${cfg.socketsDir}/mediagoblin.pid";
- celery = "${cfg.socketsDir}/mediagoblin-celeryd.pid";
- };
- readOnly = true;
- description = ''
- Mediagoblin pid files
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- users.users = lib.optionalAttrs (cfg.user == name) {
- "${name}" = {
- inherit uid;
- group = cfg.group;
- description = "Mediagoblin user";
- home = cfg.dataDir;
- useDefaultShell = true;
- };
- };
- users.groups = lib.optionalAttrs (cfg.group == name) {
- "${name}" = {
- inherit gid;
- };
- };
-
- systemd.slices.mediagoblin = {
- description = "Mediagoblin slice";
- };
- systemd.services.mediagoblin-web = {
- description = "Mediagoblin service";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- wants = [ "postgresql.service" "redis.service" ];
-
- environment.SCRIPT_NAME = "/mediagoblin/";
-
- script = ''
- exec ./bin/paster serve \
- ${paste_local} \
- --pid-file=${cfg.pids.paster}
- '';
- preStop = ''
- exec ./bin/paster serve \
- --pid-file=${cfg.pids.paster} \
- ${paste_local} stop
- '';
- preStart = ''
- if [ -d ${cfg.dataDir}/plugin_static/ ]; then
- rm ${cfg.dataDir}/plugin_static/coreplugin_basic_auth
- ln -sf ${cfg.package}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth
- fi
- ./bin/gmg -cf ${cfg.configFile} dbupdate
- '';
-
- serviceConfig = {
- Slice = "mediagoblin.slice";
- User = cfg.user;
- PrivateTmp = true;
- Restart = "always";
- TimeoutSec = 15;
- Type = "simple";
- WorkingDirectory = cfg.package;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- StateDirectory= cfg.systemdStateDirectory;
- PIDFile = cfg.pids.paster;
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
-
- systemd.services.mediagoblin-celeryd = {
- description = "Mediagoblin service";
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" "mediagoblin-web.service" ];
-
- environment.MEDIAGOBLIN_CONFIG = cfg.configFile;
- environment.CELERY_CONFIG_MODULE = "mediagoblin.init.celery.from_celery";
-
- script = ''
- exec ./bin/celery worker \
- --logfile=${cfg.dataDir}/celery.log \
- --loglevel=INFO
- '';
-
- serviceConfig = {
- Slice = "mediagoblin.slice";
- User = cfg.user;
- PrivateTmp = true;
- Restart = "always";
- TimeoutSec = 60;
- Type = "simple";
- WorkingDirectory = cfg.package;
- RuntimeDirectory = cfg.systemdRuntimeDirectory;
- StateDirectory= cfg.systemdStateDirectory;
- PIDFile = cfg.pids.celery;
- };
-
- unitConfig.RequiresMountsFor = cfg.dataDir;
- };
- };
-}
diff --git a/modules/webapps/webstats/default.nix b/modules/webapps/webstats/default.nix
deleted file mode 100644
index e873af2..0000000
--- a/modules/webapps/webstats/default.nix
+++ /dev/null
@@ -1,80 +0,0 @@
-{ lib, pkgs, config, ... }:
-let
- name = "goaccess";
- cfg = config.services.webstats;
-in {
- options.services.webstats = {
- dataDir = lib.mkOption {
- type = lib.types.path;
- default = "/var/lib/${name}";
- description = ''
- The directory where Goaccess stores its data.
- '';
- };
- sites = lib.mkOption {
- type = lib.types.listOf (lib.types.submodule {
- options = {
- conf = lib.mkOption {
- type = lib.types.nullOr lib.types.path;
- default = null;
- description = ''
- use custom goaccess configuration file instead of the
- default one.
- '';
- };
- name = lib.mkOption {
- type = lib.types.str;
- description = ''
- Domain name. Corresponds to the Apache file name and the
- folder name in which the state will be saved.
- '';
- };
- };
- });
- default = [];
- description = "Sites to generate stats";
- };
- };
-
- config = lib.mkIf (builtins.length cfg.sites > 0) {
- users.users.root.packages = [
- pkgs.goaccess
- ];
-
- services.cron = {
- enable = true;
- systemCronJobs = let
- stats = domain: conf: let
- config = if builtins.isNull conf
- then pkgs.runCommand "goaccess.conf" {
- dbPath = "${cfg.dataDir}/${domain}";
- } "substituteAll ${./goaccess.conf} $out"
- else conf;
- d = pkgs.writeScriptBin "stats-${domain}" ''
- #!${pkgs.stdenv.shell}
- set -e
- shopt -s nullglob
- TMPFILE=$(mktemp)
- trap "rm -f $TMPFILE" EXIT
-
- mkdir -p ${cfg.dataDir}/${domain}
- for i in /var/log/httpd/access-${domain}*.gz; do
- zcat "$i" >> $TMPFILE
- done
- cat /var/log/httpd/access-${domain}.log > $TMPFILE
- ${pkgs.goaccess}/bin/goaccess $TMPFILE --no-progress -o ${cfg.dataDir}/${domain}/index.html -p ${config}
- '';
- in "${d}/bin/stats-${domain}";
- allStats = sites: pkgs.writeScript "stats" ''
- #!${pkgs.stdenv.shell}
-
- mkdir -p ${cfg.dataDir}
- ${builtins.concatStringsSep "\n" (map (v: stats v.name v.conf) sites)}
- '';
- in
- [
- "5 0 * * * root ${allStats cfg.sites}"
- ];
- };
- };
-}
diff --git a/modules/webapps/webstats/goaccess.conf b/modules/webapps/webstats/goaccess.conf
deleted file mode 100644
index c6c244a..0000000
--- a/modules/webapps/webstats/goaccess.conf
+++ /dev/null
@@ -1,100 +0,0 @@
-time-format %H:%M:%S
-date-format %d/%b/%Y
-
-log-format VCOMBINED
-#= %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
-
-html-prefs {"theme":"bright","layout":"vertical"}
-
-# old
-exclude-ip 188.165.209.148
-exclude-ip 178.33.252.96
-exclude-ip 2001:41d0:2:9c94::1
-exclude-ip 2001:41d0:2:9c94::
-# eldiron
-exclude-ip 176.9.151.89
-exclude-ip 2a01:4f8:160:3445::
-# monitoring-1
-exclude-ip 95.216.164.150
-exclude-ip 2a01:4f9:c010:1c95::
-
-no-query-string true
-
-persist true
-restore true
-db-path @dbPath@
-
-ignore-panel REFERRERS
-ignore-panel KEYPHRASES
-
-static-file .css
-static-file .js
-static-file .jpg
-static-file .png
-static-file .gif
-static-file .ico
-static-file .jpeg
-static-file .pdf
-static-file .csv
-static-file .mpeg
-static-file .mpg
-static-file .swf
-static-file .woff
-static-file .woff2
-static-file .xls
-static-file .xlsx
-static-file .doc
-static-file .docx
-static-file .ppt
-static-file .pptx
-static-file .txt
-static-file .zip
-static-file .ogg
-static-file .mp3
-static-file .mp4
-static-file .exe
-static-file .iso
-static-file .gz
-static-file .rar
-static-file .svg
-static-file .bmp
-static-file .tar
-static-file .tgz
-static-file .tiff
-static-file .tif
-static-file .ttf
-static-file .flv
-#static-file .less
-#static-file .ac3
-#static-file .avi
-#static-file .bz2
-#static-file .class
-#static-file .cue
-#static-file .dae
-#static-file .dat
-#static-file .dts
-#static-file .ejs
-#static-file .eot
-#static-file .eps
-#static-file .img
-#static-file .jar
-#static-file .map
-#static-file .mid
-#static-file .midi
-#static-file .ogv
-#static-file .webm
-#static-file .mkv
-#static-file .odp
-#static-file .ods
-#static-file .odt
-#static-file .otf
-#static-file .pict
-#static-file .pls
-#static-file .ps
-#static-file .qt
-#static-file .rm
-#static-file .svgz
-#static-file .wav
-#static-file .webp
-
-
diff --git a/modules/websites/default.nix b/modules/websites/default.nix
deleted file mode 100644
index 6658c66..0000000
--- a/modules/websites/default.nix
+++ /dev/null
@@ -1,281 +0,0 @@
-{ lib, config, pkgs, ... }: with lib;
-let
- cfg = config.services.websites;
-in
-{
- options.services.websites = with types; {
- certs = mkOption {
- description = "Default websites configuration for certificates as accepted by acme";
- };
- env = mkOption {
- default = {};
- description = "Each type of website to enable will target a distinct httpd server";
- type = attrsOf (submodule {
- options = {
- enable = mkEnableOption "Enable websites of this type";
- adminAddr = mkOption {
- type = str;
- description = "Admin e-mail address of the instance";
- };
- httpdName = mkOption {
- type = str;
- description = "Name of the httpd instance to assign this type to";
- };
- ips = mkOption {
- type = listOf str;
- default = [];
- description = "ips to listen to";
- };
- modules = mkOption {
- type = listOf str;
- default = [];
- description = "Additional modules to load in Apache";
- };
- extraConfig = mkOption {
- type = listOf lines;
- default = [];
- description = "Additional configuration to append to Apache";
- };
- nosslVhost = mkOption {
- description = "A default nossl vhost for captive portals";
- default = {};
- type = submodule {
- options = {
- enable = mkEnableOption "Add default no-ssl vhost for this instance";
- host = mkOption {
- type = str;
- description = "The hostname to use for this vhost";
- };
- root = mkOption {
- type = path;
- default = ./nosslVhost;
- description = "The root folder to serve";
- };
- indexFile = mkOption {
- type = str;
- default = "index.html";
- description = "The index file to show.";
- };
- };
- };
- };
- fallbackVhost = mkOption {
- description = "The fallback vhost that will be defined as first vhost in Apache";
- type = submodule {
- options = {
- certName = mkOption { type = str; };
- hosts = mkOption { type = listOf str; };
- root = mkOption { type = nullOr path; };
- forceSSL = mkOption {
- type = bool;
- default = true;
- description = ''
- Automatically create a corresponding non-ssl vhost
- that will only redirect to the ssl version
- '';
- };
- extraConfig = mkOption { type = listOf lines; default = []; };
- };
- };
- };
- vhostNoSSLConfs = mkOption {
- default = {};
- description = "List of no ssl vhosts to define for Apache";
- type = attrsOf (submodule {
- options = {
- hosts = mkOption { type = listOf str; };
- root = mkOption { type = nullOr path; };
- extraConfig = mkOption { type = listOf lines; default = []; };
- };
- });
- };
- vhostConfs = mkOption {
- default = {};
- description = "List of vhosts to define for Apache";
- type = attrsOf (submodule {
- options = {
- certName = mkOption { type = str; };
- addToCerts = mkOption {
- type = bool;
- default = false;
- description = "Use these to certificates. Is ignored (considered true) if certMainHost is not null";
- };
- certMainHost = mkOption {
- type = nullOr str;
- description = "Use that host as 'main host' for acme certs";
- default = null;
- };
- hosts = mkOption { type = listOf str; };
- root = mkOption { type = nullOr path; };
- forceSSL = mkOption {
- type = bool;
- default = true;
- description = ''
- Automatically create a corresponding non-ssl vhost
- that will only redirect to the ssl version
- '';
- };
- extraConfig = mkOption { type = listOf lines; default = []; };
- };
- });
- };
- watchPaths = mkOption {
- type = listOf str;
- default = [];
- description = ''
- Paths to watch that should trigger a reload of httpd
- '';
- };
- };
- });
- };
- };
-
- config.services.httpd = let
- nosslVhost = ips: cfg: {
- listen = map (ip: { inherit ip; port = 80; }) ips;
- hostName = cfg.host;
- logFormat = "combinedVhost";
- documentRoot = cfg.root;
- extraConfig = ''
-
- DirectoryIndex ${cfg.indexFile}
- AllowOverride None
- Require all granted
-
- RewriteEngine on
- RewriteRule ^/(.+) / [L]
-
- '';
- };
- toVhost = ips: vhostConf: {
- forceSSL = vhostConf.forceSSL or true;
- useACMEHost = vhostConf.certName;
- logFormat = "combinedVhost";
- listen = if vhostConf.forceSSL
- then lists.flatten (map (ip: [{ inherit ip; port = 443; ssl = true; } { inherit ip; port = 80; }]) ips)
- else map (ip: { inherit ip; port = 443; ssl = true; }) ips;
- hostName = builtins.head vhostConf.hosts;
- serverAliases = builtins.tail vhostConf.hosts or [];
- documentRoot = vhostConf.root;
- extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig;
- };
- toVhostNoSSL = ips: vhostConf: {
- logFormat = "combinedVhost";
- listen = map (ip: { inherit ip; port = 80; }) ips;
- hostName = builtins.head vhostConf.hosts;
- serverAliases = builtins.tail vhostConf.hosts or [];
- documentRoot = vhostConf.root;
- extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig;
- };
- in attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- icfg.httpdName (mkIf icfg.enable {
- enable = true;
- logPerVirtualHost = true;
- multiProcessingModule = "worker";
- # https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=intermediate&openssl=1.0.2t&guideline=5.4
- # test with https://www.ssllabs.com/ssltest/analyze.html?d=www.immae.eu&s=176.9.151.154&latest
- sslProtocols = "all -SSLv3 -TLSv1 -TLSv1.1";
- sslCiphers = builtins.concatStringsSep ":" [
- "ECDHE-ECDSA-AES128-GCM-SHA256" "ECDHE-RSA-AES128-GCM-SHA256"
- "ECDHE-ECDSA-AES256-GCM-SHA384" "ECDHE-RSA-AES256-GCM-SHA384"
- "ECDHE-ECDSA-CHACHA20-POLY1305" "ECDHE-RSA-CHACHA20-POLY1305"
- "DHE-RSA-AES128-GCM-SHA256" "DHE-RSA-AES256-GCM-SHA384"
- ];
- inherit (icfg) adminAddr;
- logFormat = "combinedVhost";
- extraModules = lists.unique icfg.modules;
- extraConfig = builtins.concatStringsSep "\n" icfg.extraConfig;
-
- virtualHosts = with attrsets; {
- ___fallbackVhost = toVhost icfg.ips icfg.fallbackVhost;
- } // (optionalAttrs icfg.nosslVhost.enable {
- nosslVhost = nosslVhost icfg.ips icfg.nosslVhost;
- }) // (mapAttrs' (n: v: nameValuePair ("nossl_" + n) (toVhostNoSSL icfg.ips v)) icfg.vhostNoSSLConfs)
- // (mapAttrs' (n: v: nameValuePair ("ssl_" + n) (toVhost icfg.ips v)) icfg.vhostConfs);
- })
- ) cfg.env;
-
- config.services.filesWatcher = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- "httpd${icfg.httpdName}" {
- paths = icfg.watchPaths;
- waitTime = 5;
- }
- ) cfg.env;
-
- config.security.acme.certs = let
- typesToManage = attrsets.filterAttrs (k: v: v.enable) cfg.env;
- flatVhosts = lists.flatten (attrsets.mapAttrsToList (k: v:
- attrValues v.vhostConfs
- ) typesToManage);
- groupedCerts = attrsets.filterAttrs
- (_: group: builtins.any (v: v.addToCerts || !isNull v.certMainHost) group)
- (lists.groupBy (v: v.certName) flatVhosts);
- groupToDomain = group:
- let
- nonNull = builtins.filter (v: !isNull v.certMainHost) group;
- domains = lists.unique (map (v: v.certMainHost) nonNull);
- in
- if builtins.length domains == 0
- then null
- else assert (builtins.length domains == 1); (elemAt domains 0);
- extraDomains = group:
- let
- mainDomain = groupToDomain group;
- in
- lists.remove mainDomain (
- lists.unique (
- lists.flatten (map (c: optionals (c.addToCerts || !isNull c.certMainHost) c.hosts) group)
- )
- );
- in attrsets.mapAttrs (k: g:
- if (!isNull (groupToDomain g))
- then cfg.certs // {
- domain = groupToDomain g;
- extraDomains = builtins.listToAttrs (
- map (d: attrsets.nameValuePair d null) (extraDomains g));
- }
- else {
- extraDomains = builtins.listToAttrs (
- map (d: attrsets.nameValuePair d null) (extraDomains g));
- }
- ) groupedCerts;
-
- config.systemd.services = let
- package = httpdName: config.services.httpd.${httpdName}.package.out;
- cfgFile = httpdName: config.services.httpd.${httpdName}.configFile;
- serviceChange = attrsets.mapAttrs' (name: icfg:
- attrsets.nameValuePair
- "httpd${icfg.httpdName}" {
- stopIfChanged = false;
- serviceConfig.ExecStart =
- lib.mkForce "@${package icfg.httpdName}/bin/httpd httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf";
- serviceConfig.ExecStop =
- lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful-stop";
- serviceConfig.ExecReload =
- lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful";
- }
- ) cfg.env;
- serviceReload = attrsets.mapAttrs' (name: icfg:
- attrsets.nameValuePair
- "httpd${icfg.httpdName}-config-reload" {
- wants = [ "httpd${icfg.httpdName}.service" ];
- wantedBy = [ "multi-user.target" ];
- restartTriggers = [ (cfgFile icfg.httpdName) ];
- # commented, because can cause extra delays during activate for this config:
- # services.nginx.virtualHosts."_".locations."/".proxyPass = "http://blabla:3000";
- # stopIfChanged = false;
- serviceConfig.Type = "oneshot";
- serviceConfig.TimeoutSec = 60;
- script = ''
- if ${pkgs.systemd}/bin/systemctl -q is-active httpd${icfg.httpdName}.service ; then
- ${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -t && \
- ${pkgs.systemd}/bin/systemctl reload httpd${icfg.httpdName}.service
- fi
- '';
- serviceConfig.RemainAfterExit = true;
- }
- ) cfg.env;
- in
- serviceChange // serviceReload;
-}
diff --git a/modules/websites/httpd-service-builder.nix b/modules/websites/httpd-service-builder.nix
deleted file mode 100644
index 1f7488d..0000000
--- a/modules/websites/httpd-service-builder.nix
+++ /dev/null
@@ -1,735 +0,0 @@
-# to help backporting this builder should stay as close as possible to
-# nixos/modules/services/web-servers/apache-httpd/default.nix
-{ httpdName, withUsers ? true }:
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
-
- cfg = config.services.httpd."${httpdName}";
-
- runtimeDir = "/run/httpd_${httpdName}";
-
- pkg = cfg.package.out;
-
- httpdConf = cfg.configFile;
-
- php = cfg.phpPackage.override { apacheHttpd = pkg.dev; /* otherwise it only gets .out */ };
-
- phpMajorVersion = lib.versions.major (lib.getVersion php);
-
- mod_perl = pkgs.apacheHttpdPackages.mod_perl.override { apacheHttpd = pkg; };
-
- vhosts = attrValues cfg.virtualHosts;
-
- mkListenInfo = hostOpts:
- if hostOpts.listen != [] then hostOpts.listen
- else (
- optional (hostOpts.onlySSL || hostOpts.addSSL || hostOpts.forceSSL) { ip = "*"; port = 443; ssl = true; } ++
- optional (!hostOpts.onlySSL) { ip = "*"; port = 80; ssl = false; }
- );
-
- listenInfo = unique (concatMap mkListenInfo vhosts);
-
- enableHttp2 = any (vhost: vhost.http2) vhosts;
- enableSSL = any (listen: listen.ssl) listenInfo;
- enableUserDir = any (vhost: vhost.enableUserDir) vhosts;
-
- # NOTE: generally speaking order of modules is very important
- modules =
- [ # required apache modules our httpd service cannot run without
- "authn_core" "authz_core"
- "log_config"
- "mime" "autoindex" "negotiation" "dir"
- "alias" "rewrite"
- "unixd" "slotmem_shm" "socache_shmcb"
- "mpm_${cfg.multiProcessingModule}"
- ]
- ++ (if cfg.multiProcessingModule == "prefork" then [ "cgi" ] else [ "cgid" ])
- ++ optional enableHttp2 "http2"
- ++ optional enableSSL "ssl"
- ++ optional enableUserDir "userdir"
- ++ optional cfg.enableMellon { name = "auth_mellon"; path = "${pkgs.apacheHttpdPackages.mod_auth_mellon}/modules/mod_auth_mellon.so"; }
- ++ optional cfg.enablePHP { name = "php${phpMajorVersion}"; path = "${php}/modules/libphp${phpMajorVersion}.so"; }
- ++ optional cfg.enablePerl { name = "perl"; path = "${mod_perl}/modules/mod_perl.so"; }
- ++ cfg.extraModules;
-
- loggingConf = (if cfg.logFormat != "none" then ''
- ErrorLog ${cfg.logDir}/error.log
-
- LogLevel notice
-
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- LogFormat "%h %l %u %t \"%r\" %>s %b" common
- LogFormat "%{Referer}i -> %U" referer
- LogFormat "%{User-agent}i" agent
-
- CustomLog ${cfg.logDir}/access.log ${cfg.logFormat}
- '' else ''
- ErrorLog /dev/null
- '');
-
-
- browserHacks = ''
-
- BrowserMatch "Mozilla/2" nokeepalive
- BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
- BrowserMatch "RealPlayer 4\.0" force-response-1.0
- BrowserMatch "Java/1\.0" force-response-1.0
- BrowserMatch "JDK/1\.0" force-response-1.0
- BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
- BrowserMatch "^WebDrive" redirect-carefully
- BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
- BrowserMatch "^gnome-vfs" redirect-carefully
-
- '';
-
-
- sslConf = ''
-
- SSLSessionCache shmcb:${runtimeDir}/ssl_scache(512000)
-
- Mutex posixsem
-
- SSLRandomSeed startup builtin
- SSLRandomSeed connect builtin
-
- SSLProtocol ${cfg.sslProtocols}
- SSLCipherSuite ${cfg.sslCiphers}
- SSLHonorCipherOrder on
-
- '';
-
-
- mimeConf = ''
- TypesConfig ${pkg}/conf/mime.types
-
- AddType application/x-x509-ca-cert .crt
- AddType application/x-pkcs7-crl .crl
- AddType application/x-httpd-php .php .phtml
-
-
- MIMEMagicFile ${pkg}/conf/magic
-
- '';
-
- mkVHostConf = hostOpts:
- let
- adminAddr = if hostOpts.adminAddr != null then hostOpts.adminAddr else cfg.adminAddr;
- listen = filter (listen: !listen.ssl) (mkListenInfo hostOpts);
- listenSSL = filter (listen: listen.ssl) (mkListenInfo hostOpts);
-
- useACME = hostOpts.enableACME || hostOpts.useACMEHost != null;
- sslCertDir =
- if hostOpts.enableACME then config.security.acme.certs.${hostOpts.hostName}.directory
- else if hostOpts.useACMEHost != null then config.security.acme.certs.${hostOpts.useACMEHost}.directory
- else abort "This case should never happen.";
-
- sslServerCert = if useACME then "${sslCertDir}/full.pem" else hostOpts.sslServerCert;
- sslServerKey = if useACME then "${sslCertDir}/key.pem" else hostOpts.sslServerKey;
- sslServerChain = if useACME then "${sslCertDir}/fullchain.pem" else hostOpts.sslServerChain;
-
- acmeChallenge = optionalString useACME ''
- Alias /.well-known/acme-challenge/ "${hostOpts.acmeRoot}/.well-known/acme-challenge/"
-
- AllowOverride None
- Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
- Require method GET POST OPTIONS
- Require all granted
-
- '';
- in
- optionalString (listen != []) ''
-
- ServerName ${hostOpts.hostName}
- ${concatMapStrings (alias: "ServerAlias ${alias}\n") hostOpts.serverAliases}
- ServerAdmin ${adminAddr}
-
- SSLEngine off
-
- ${acmeChallenge}
- ${if hostOpts.forceSSL then ''
-
- RewriteEngine on
- RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge [NC]
- RewriteCond %{HTTPS} off
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
-
- '' else mkVHostCommonConf hostOpts}
-
- '' +
- optionalString (listenSSL != []) ''
-
- ServerName ${hostOpts.hostName}
- ${concatMapStrings (alias: "ServerAlias ${alias}\n") hostOpts.serverAliases}
- ServerAdmin ${adminAddr}
- SSLEngine on
- SSLCertificateFile ${sslServerCert}
- SSLCertificateKeyFile ${sslServerKey}
- ${optionalString hostOpts.http2 "Protocols h2 h2c http/1.1"}
- ${acmeChallenge}
- ${mkVHostCommonConf hostOpts}
-
- ''
- ;
-
- mkVHostCommonConf = hostOpts:
- let
- documentRoot = if hostOpts.documentRoot != null
- then hostOpts.documentRoot
- else pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out"
- ;
-
- mkLocations = locations: concatStringsSep "\n" (map (config: ''
-
- ${optionalString (config.proxyPass != null) ''
-
- ProxyPass ${config.proxyPass}
- ProxyPassReverse ${config.proxyPass}
-
- ''}
- ${optionalString (config.index != null) ''
-
- DirectoryIndex ${config.index}
-
- ''}
- ${optionalString (config.alias != null) ''
-
- Alias "${config.alias}"
-
- ''}
- ${config.extraConfig}
-
- '') (sortProperties (mapAttrsToList (k: v: v // { location = k; }) locations)));
- in
- ''
- ${optionalString cfg.logPerVirtualHost ''
- ErrorLog ${cfg.logDir}/error-${hostOpts.hostName}.log
- CustomLog ${cfg.logDir}/access-${hostOpts.hostName}.log ${hostOpts.logFormat}
- ''}
-
- ${optionalString (hostOpts.robotsEntries != "") ''
- Alias /robots.txt ${pkgs.writeText "robots.txt" hostOpts.robotsEntries}
- ''}
-
- DocumentRoot "${documentRoot}"
-
-
- Options Indexes FollowSymLinks
- AllowOverride None
- Require all granted
-
-
- ${optionalString hostOpts.enableUserDir ''
- UserDir public_html
- UserDir disabled root
-
- AllowOverride FileInfo AuthConfig Limit Indexes
- Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
-
- Require all granted
-
-
- Require all denied
-
-
- ''}
-
- ${optionalString (hostOpts.globalRedirect != null && hostOpts.globalRedirect != "") ''
- RedirectPermanent / ${hostOpts.globalRedirect}
- ''}
-
- ${
- let makeDirConf = elem: ''
- Alias ${elem.urlPath} ${elem.dir}/
-
- Options +Indexes
- Require all granted
- AllowOverride All
-
- '';
- in concatMapStrings makeDirConf hostOpts.servedDirs
- }
-
- ${mkLocations hostOpts.locations}
- ${hostOpts.extraConfig}
- ''
- ;
-
-
- confFile = pkgs.writeText "httpd.conf" ''
-
- ServerRoot ${pkg}
- ServerName ${config.networking.hostName}
- DefaultRuntimeDir ${runtimeDir}/runtime
-
- PidFile ${runtimeDir}/httpd.pid
-
- ${optionalString (cfg.multiProcessingModule != "prefork") ''
- # mod_cgid requires this.
- ScriptSock ${runtimeDir}/cgisock
- ''}
-
-
- MaxClients ${toString cfg.maxClients}
- MaxRequestsPerChild ${toString cfg.maxRequestsPerChild}
-
-
- ${let
- toStr = listen: "Listen ${listen.ip}:${toString listen.port} ${if listen.ssl then "https" else "http"}";
- uniqueListen = uniqList {inputList = map toStr listenInfo;};
- in concatStringsSep "\n" uniqueListen
- }
-
- User ${cfg.user}
- Group ${cfg.group}
-
- ${let
- mkModule = module:
- if isString module then { name = module; path = "${pkg}/modules/mod_${module}.so"; }
- else if isAttrs module then { inherit (module) name path; }
- else throw "Expecting either a string or attribute set including a name and path.";
- in
- concatMapStringsSep "\n" (module: "LoadModule ${module.name}_module ${module.path}") (unique (map mkModule modules))
- }
-
- AddHandler type-map var
-
-
- Require all denied
-
-
- ${mimeConf}
- ${loggingConf}
- ${browserHacks}
-
- Include ${pkg}/conf/extra/httpd-default.conf
- Include ${pkg}/conf/extra/httpd-autoindex.conf
- Include ${pkg}/conf/extra/httpd-multilang-errordoc.conf
- Include ${pkg}/conf/extra/httpd-languages.conf
-
- TraceEnable off
-
- ${sslConf}
-
- # Fascist default - deny access to everything.
-
- Options FollowSymLinks
- AllowOverride None
- Require all denied
-
-
- ${cfg.extraConfig}
-
- ${concatMapStringsSep "\n" mkVHostConf vhosts}
- '';
-
- # Generate the PHP configuration file. Should probably be factored
- # out into a separate module.
- phpIni = pkgs.runCommand "php.ini"
- { options = cfg.phpOptions;
- preferLocalBuild = true;
- }
- ''
- cat ${php}/etc/php.ini > $out
- echo "$options" >> $out
- '';
-
-in
-
-
-{
-
- imports = [
- (mkRemovedOptionModule [ "services" "httpd" httpdName "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.")
-
- # virtualHosts options
- (mkRemovedOptionModule [ "services" "httpd" httpdName "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- ];
-
- # interface
-
- options = {
-
- services.httpd."${httpdName}" = {
-
- enable = mkEnableOption "the Apache HTTP Server";
-
- package = mkOption {
- type = types.package;
- default = pkgs.apacheHttpd;
- defaultText = "pkgs.apacheHttpd";
- description = ''
- Overridable attribute of the Apache HTTP Server package to use.
- '';
- };
-
- configFile = mkOption {
- type = types.path;
- default = confFile;
- defaultText = "confFile";
- example = literalExample ''pkgs.writeText "httpd.conf" "# my custom config file ..."'';
- description = ''
- Override the configuration file used by Apache. By default,
- NixOS generates one automatically.
- '';
- };
-
- extraConfig = mkOption {
- type = types.lines;
- default = "";
- description = ''
- Configuration lines appended to the generated Apache
- configuration file. Note that this mechanism will not work
- when configFile is overridden.
- '';
- };
-
- extraModules = mkOption {
- type = types.listOf types.unspecified;
- default = [];
- example = literalExample ''
- [
- "proxy_connect"
- { name = "jk"; path = "''${pkgs.tomcat_connectors}/modules/mod_jk.so"; }
- ]
- '';
- description = ''
- Additional Apache modules to be used. These can be
- specified as a string in the case of modules distributed
- with Apache, or as an attribute set specifying the
- name and path of the
- module.
- '';
- };
-
- adminAddr = mkOption {
- type = types.str;
- example = "admin@example.org";
- description = "E-mail address of the server administrator.";
- };
-
- logFormat = mkOption {
- type = types.str;
- default = "common";
- example = "combined";
- description = ''
- Log format for log files. Possible values are: combined, common, referer, agent.
- See for more details.
- '';
- };
-
- logPerVirtualHost = mkOption {
- type = types.bool;
- default = true;
- description = ''
- If enabled, each virtual host gets its own
- access.log and
- error.log , namely suffixed by the
- hostName of the virtual host.
- '';
- };
-
- user = mkOption {
- type = types.str;
- default = "wwwrun";
- description = ''
- User account under which httpd runs.
- '';
- };
-
- group = mkOption {
- type = types.str;
- default = "wwwrun";
- description = ''
- Group under which httpd runs.
- '';
- };
-
- logDir = mkOption {
- type = types.path;
- default = "/var/log/httpd";
- description = ''
- Directory for Apache's log files. It is created automatically.
- '';
- };
-
- virtualHosts = mkOption {
- type = with types; attrsOf (submodule (import ));
- default = {
- localhost = {
- documentRoot = "${pkg}/htdocs";
- };
- };
- example = literalExample ''
- {
- "foo.example.com" = {
- forceSSL = true;
- documentRoot = "/var/www/foo.example.com"
- };
- "bar.example.com" = {
- addSSL = true;
- documentRoot = "/var/www/bar.example.com";
- };
- }
- '';
- description = ''
- Specification of the virtual hosts served by Apache. Each
- element should be an attribute set specifying the
- configuration of the virtual host.
- '';
- };
-
- enableMellon = mkOption {
- type = types.bool;
- default = false;
- description = "Whether to enable the mod_auth_mellon module.";
- };
-
- enablePHP = mkOption {
- type = types.bool;
- default = false;
- description = "Whether to enable the PHP module.";
- };
-
- phpPackage = mkOption {
- type = types.package;
- default = pkgs.php;
- defaultText = "pkgs.php";
- description = ''
- Overridable attribute of the PHP package to use.
- '';
- };
-
- enablePerl = mkOption {
- type = types.bool;
- default = false;
- description = "Whether to enable the Perl module (mod_perl).";
- };
-
- phpOptions = mkOption {
- type = types.lines;
- default = "";
- example =
- ''
- date.timezone = "CET"
- '';
- description = ''
- Options appended to the PHP configuration file php.ini .
- '';
- };
-
- multiProcessingModule = mkOption {
- type = types.enum [ "event" "prefork" "worker" ];
- default = "prefork";
- example = "worker";
- description =
- ''
- Multi-processing module to be used by Apache. Available
- modules are prefork (the default;
- handles each request in a separate child process),
- worker (hybrid approach that starts a
- number of child processes each running a number of
- threads) and event (a recent variant of
- worker that handles persistent
- connections more efficiently).
- '';
- };
-
- maxClients = mkOption {
- type = types.int;
- default = 150;
- example = 8;
- description = "Maximum number of httpd processes (prefork)";
- };
-
- maxRequestsPerChild = mkOption {
- type = types.int;
- default = 0;
- example = 500;
- description = ''
- Maximum number of httpd requests answered per httpd child (prefork), 0 means unlimited.
- '';
- };
-
- sslCiphers = mkOption {
- type = types.str;
- default = "HIGH:!aNULL:!MD5:!EXP";
- description = "Cipher Suite available for negotiation in SSL proxy handshake.";
- };
-
- sslProtocols = mkOption {
- type = types.str;
- default = "All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1";
- example = "All -SSLv2 -SSLv3";
- description = "Allowed SSL/TLS protocol versions.";
- };
- };
-
- };
-
- # implementation
-
- config = mkIf cfg.enable {
-
- assertions = [
- {
- assertion = all (hostOpts: !hostOpts.enableSSL) vhosts;
- message = ''
- The option `services.httpd.virtualHosts..enableSSL` no longer has any effect; please remove it.
- Select one of `services.httpd.virtualHosts..addSSL`, `services.httpd.virtualHosts..forceSSL`,
- or `services.httpd.virtualHosts..onlySSL`.
- '';
- }
- {
- assertion = all (hostOpts: with hostOpts; !(addSSL && onlySSL) && !(forceSSL && onlySSL) && !(addSSL && forceSSL)) vhosts;
- message = ''
- Options `services.httpd.virtualHosts..addSSL`,
- `services.httpd.virtualHosts..onlySSL` and `services.httpd.virtualHosts..forceSSL`
- are mutually exclusive.
- '';
- }
- {
- assertion = all (hostOpts: !(hostOpts.enableACME && hostOpts.useACMEHost != null)) vhosts;
- message = ''
- Options `services.httpd.virtualHosts..enableACME` and
- `services.httpd.virtualHosts..useACMEHost` are mutually exclusive.
- '';
- }
- ];
-
- warnings =
- mapAttrsToList (name: hostOpts: ''
- Using config.services.httpd.virtualHosts."${name}".servedFiles is deprecated and will become unsupported in a future release. Your configuration will continue to work as is but please migrate your configuration to config.services.httpd.virtualHosts."${name}".locations before the 20.09 release of NixOS.
- '') (filterAttrs (name: hostOpts: hostOpts.servedFiles != []) cfg.virtualHosts);
-
- users.users = optionalAttrs (withUsers && cfg.user == "wwwrun") {
- wwwrun = {
- group = cfg.group;
- description = "Apache httpd user";
- uid = config.ids.uids.wwwrun;
- };
- };
-
- users.groups = optionalAttrs (withUsers && cfg.group == "wwwrun") {
- wwwrun.gid = config.ids.gids.wwwrun;
- };
-
- security.acme.certs = mapAttrs (name: hostOpts: {
- user = cfg.user;
- group = mkDefault cfg.group;
- email = if hostOpts.adminAddr != null then hostOpts.adminAddr else cfg.adminAddr;
- webroot = hostOpts.acmeRoot;
- extraDomains = genAttrs hostOpts.serverAliases (alias: null);
- postRun = "systemctl reload httpd.service";
- }) (filterAttrs (name: hostOpts: hostOpts.enableACME) cfg.virtualHosts);
-
- environment.systemPackages = [ pkg ];
-
- # required for "apachectl configtest"
- environment.etc."httpd/httpd_${httpdName}.conf".source = httpdConf;
-
- services.httpd."${httpdName}" = { phpOptions =
- ''
- ; Needed for PHP's mail() function.
- sendmail_path = sendmail -t -i
-
- ; Don't advertise PHP
- expose_php = off
- '' + optionalString (config.time.timeZone != null) ''
-
- ; Apparently PHP doesn't use $TZ.
- date.timezone = "${config.time.timeZone}"
- '';
-
- extraModules = mkBefore [
- # HTTP authentication mechanisms: basic and digest.
- "auth_basic" "auth_digest"
-
- # Authentication: is the user who he claims to be?
- "authn_file" "authn_dbm" "authn_anon"
-
- # Authorization: is the user allowed access?
- "authz_user" "authz_groupfile" "authz_host"
-
- # Other modules.
- "ext_filter" "include" "env" "mime_magic"
- "cern_meta" "expires" "headers" "usertrack" "setenvif"
- "dav" "status" "asis" "info" "dav_fs"
- "vhost_alias" "imagemap" "actions" "speling"
- "proxy" "proxy_http"
- "cache" "cache_disk"
-
- # For compatibility with old configurations, the new module mod_access_compat is provided.
- "access_compat"
- ];
- };
-
- systemd.tmpfiles.rules =
- let
- svc = config.systemd.services."httpd${httpdName}".serviceConfig;
- in
- [
- "d '${cfg.logDir}' 0700 ${svc.User} ${svc.Group}"
- "Z '${cfg.logDir}' - ${svc.User} ${svc.Group}"
- ];
-
- systemd.services."httpd${httpdName}" =
- let
- vhostsACME = filter (hostOpts: hostOpts.enableACME) vhosts;
- in
- { description = "Apache HTTPD";
-
- wantedBy = [ "multi-user.target" ];
- wants = concatLists (map (hostOpts: [ "acme-${hostOpts.hostName}.service" "acme-selfsigned-${hostOpts.hostName}.service" ]) vhostsACME);
- after = [ "network.target" "fs.target" ] ++ map (hostOpts: "acme-selfsigned-${hostOpts.hostName}.service") vhostsACME;
-
- path =
- [ pkg pkgs.coreutils pkgs.gnugrep ]
- ++ optional cfg.enablePHP pkgs.system-sendmail; # Needed for PHP's mail() function.
-
- environment =
- optionalAttrs cfg.enablePHP { PHPRC = phpIni; }
- // optionalAttrs cfg.enableMellon { LD_LIBRARY_PATH = "${pkgs.xmlsec}/lib"; };
-
- preStart =
- ''
- # Get rid of old semaphores. These tend to accumulate across
- # server restarts, eventually preventing it from restarting
- # successfully.
- for i in $(${pkgs.utillinux}/bin/ipcs -s | grep ' ${cfg.user} ' | cut -f2 -d ' '); do
- ${pkgs.utillinux}/bin/ipcrm -s $i
- done
- '';
-
- serviceConfig = {
- ExecStart = "@${pkg}/bin/httpd httpd -f ${httpdConf}";
- ExecStop = "${pkg}/bin/httpd -f ${httpdConf} -k graceful-stop";
- ExecReload = "${pkg}/bin/httpd -f ${httpdConf} -k graceful";
- User = "root";
- Group = cfg.group;
- Type = "forking";
- PIDFile = "${runtimeDir}/httpd.pid";
- Restart = "always";
- RestartSec = "5s";
- RuntimeDirectory = "httpd_${httpdName} httpd_${httpdName}/runtime";
- RuntimeDirectoryMode = "0750";
- };
- };
-
- };
-}
diff --git a/modules/websites/httpd-service-builder.patch b/modules/websites/httpd-service-builder.patch
deleted file mode 100644
index f0ad836..0000000
--- a/modules/websites/httpd-service-builder.patch
+++ /dev/null
@@ -1,150 +0,0 @@
---- /nix/store/xj651aslybfsma20hpbi5nznfcffq8ky-nixexprs.tar.xz/nixos/modules/services/web-servers/apache-httpd/default.nix 1970-01-01 01:00:01.000000000 +0100
-+++ modules/websites/httpd-service-builder.nix 2020-04-04 03:08:29.068490345 +0200
-@@ -1,12 +1,15 @@
-+# to help backporting this builder should stay as close as possible to
-+# nixos/modules/services/web-servers/apache-httpd/default.nix
-+{ httpdName, withUsers ? true }:
- { config, lib, pkgs, ... }:
-
- with lib;
-
- let
-
-- cfg = config.services.httpd;
-+ cfg = config.services.httpd."${httpdName}";
-
-- runtimeDir = "/run/httpd";
-+ runtimeDir = "/run/httpd_${httpdName}";
-
- pkg = cfg.package.out;
-
-@@ -318,13 +321,6 @@
- Require all denied
-
-
-- # But do allow access to files in the store so that we don't have
-- # to generate clauses for every generated file that we
-- # want to serve.
--
-- Require all granted
--
--
- ${cfg.extraConfig}
-
- ${concatMapStringsSep "\n" mkVHostConf vhosts}
-@@ -347,30 +343,30 @@
- {
-
- imports = [
-- (mkRemovedOptionModule [ "services" "httpd" "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.")
-- (mkRemovedOptionModule [ "services" "httpd" "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.")
-
- # virtualHosts options
-- (mkRemovedOptionModule [ "services" "httpd" "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-- (mkRemovedOptionModule [ "services" "httpd" "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
-+ (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
- ];
-
- # interface
-
- options = {
-
-- services.httpd = {
-+ services.httpd."${httpdName}" = {
-
- enable = mkEnableOption "the Apache HTTP Server";
-
-@@ -622,7 +618,7 @@
- Using config.services.httpd.virtualHosts."${name}".servedFiles is deprecated and will become unsupported in a future release. Your configuration will continue to work as is but please migrate your configuration to config.services.httpd.virtualHosts."${name}".locations before the 20.09 release of NixOS.
- '') (filterAttrs (name: hostOpts: hostOpts.servedFiles != []) cfg.virtualHosts);
-
-- users.users = optionalAttrs (cfg.user == "wwwrun") {
-+ users.users = optionalAttrs (withUsers && cfg.user == "wwwrun") {
- wwwrun = {
- group = cfg.group;
- description = "Apache httpd user";
-@@ -630,7 +626,7 @@
- };
- };
-
-- users.groups = optionalAttrs (cfg.group == "wwwrun") {
-+ users.groups = optionalAttrs (withUsers && cfg.group == "wwwrun") {
- wwwrun.gid = config.ids.gids.wwwrun;
- };
-
-@@ -646,9 +642,9 @@
- environment.systemPackages = [ pkg ];
-
- # required for "apachectl configtest"
-- environment.etc."httpd/httpd.conf".source = httpdConf;
-+ environment.etc."httpd/httpd_${httpdName}.conf".source = httpdConf;
-
-- services.httpd.phpOptions =
-+ services.httpd."${httpdName}" = { phpOptions =
- ''
- ; Needed for PHP's mail() function.
- sendmail_path = sendmail -t -i
-@@ -661,7 +657,7 @@
- date.timezone = "${config.time.timeZone}"
- '';
-
-- services.httpd.extraModules = mkBefore [
-+ extraModules = mkBefore [
- # HTTP authentication mechanisms: basic and digest.
- "auth_basic" "auth_digest"
-
-@@ -682,17 +678,18 @@
- # For compatibility with old configurations, the new module mod_access_compat is provided.
- "access_compat"
- ];
-+ };
-
- systemd.tmpfiles.rules =
- let
-- svc = config.systemd.services.httpd.serviceConfig;
-+ svc = config.systemd.services."httpd${httpdName}".serviceConfig;
- in
- [
- "d '${cfg.logDir}' 0700 ${svc.User} ${svc.Group}"
- "Z '${cfg.logDir}' - ${svc.User} ${svc.Group}"
- ];
-
-- systemd.services.httpd =
-+ systemd.services."httpd${httpdName}" =
- let
- vhostsACME = filter (hostOpts: hostOpts.enableACME) vhosts;
- in
-@@ -730,7 +727,7 @@
- PIDFile = "${runtimeDir}/httpd.pid";
- Restart = "always";
- RestartSec = "5s";
-- RuntimeDirectory = "httpd httpd/runtime";
-+ RuntimeDirectory = "httpd_${httpdName} httpd_${httpdName}/runtime";
- RuntimeDirectoryMode = "0750";
- };
- };
diff --git a/modules/websites/nosslVhost/index.html b/modules/websites/nosslVhost/index.html
deleted file mode 100644
index 4401a80..0000000
--- a/modules/websites/nosslVhost/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- No SSL site
-
-
- No SSL on this site
- Use for wifi networks with login page that doesn't work well with
- https.
-
-
diff --git a/modules/websites/php-application.nix b/modules/websites/php-application.nix
deleted file mode 100644
index 3a43a45..0000000
--- a/modules/websites/php-application.nix
+++ /dev/null
@@ -1,224 +0,0 @@
-{ lib, config, pkgs, ... }:
-with lib;
-let
- cfg = config.services.phpApplication;
- cfgByEnv = lists.groupBy (x: x.websiteEnv) (builtins.attrValues cfg.apps);
-in
-{
- options = with types; {
- services.phpApplication.apps = mkOption {
- default = {};
- description = ''
- php applications to define
- '';
- type = attrsOf (submodule {
- options = {
- varDir = mkOption {
- type = nullOr path;
- description = ''
- Path to application’s vardir.
- '';
- };
- varDirPaths = mkOption {
- type = attrsOf str;
- default = {};
- description = ''
- Map of additional folders => mode to create under varDir
- '';
- };
- mode = mkOption {
- type = str;
- default = "0700";
- description = ''
- Mode to apply to the vardir
- '';
- };
- phpSession = mkOption {
- type = bool;
- default = true;
- description = "Handle phpsession files separately in vardir";
- };
- phpListen = mkOption {
- type = nullOr str;
- default = null;
- description = "Name of the socket to listen to. Defaults to app name if null";
- };
- phpPool = mkOption {
- type = attrsOf str;
- default = {};
- description = "Pool configuration to append";
- };
- phpEnv = mkOption {
- type = attrsOf str;
- default = {};
- description = "Pool environment to append";
- };
- phpPackage = mkOption {
- type = attrsOf str;
- default = pkgs.php;
- description = "Php package to use";
- };
- phpOptions = mkOption {
- type = lines;
- default = "";
- description = "php configuration to append";
- };
- phpOpenbasedir = mkOption {
- type = listOf path;
- default = [];
- description = ''
- paths to add to php open_basedir configuration in addition to app and vardir
- '';
- };
- phpWatchFiles = mkOption {
- type = listOf path;
- default = [];
- description = ''
- Path to other files to watch to trigger preStart scripts
- '';
- };
- websiteEnv = mkOption {
- type = str;
- description = ''
- website instance name to use
- '';
- };
- httpdUser = mkOption {
- type = str;
- default = config.services.httpd.user;
- description = ''
- httpd user to run the prestart scripts as.
- '';
- };
- httpdGroup = mkOption {
- type = str;
- default = config.services.httpd.group;
- description = ''
- httpd group to run the prestart scripts as.
- '';
- };
- httpdWatchFiles = mkOption {
- type = listOf path;
- default = [];
- description = ''
- Path to other files to watch to trigger httpd reload
- '';
- };
- app = mkOption {
- type = path;
- description = ''
- Path to application root
- '';
- };
- webRoot = mkOption {
- type = nullOr path;
- description = ''
- Path to the web root path of the application. May differ from the application itself (usually a subdirectory)
- '';
- };
- preStartActions = mkOption {
- type = listOf str;
- default = [];
- description = ''
- List of actions to run as apache user at preStart when
- whatchFiles or app dir changed.
- '';
- };
- serviceDeps = mkOption {
- type = listOf str;
- default = [];
- description = ''
- List of systemd services this application depends on
- '';
- };
- };
- });
- };
- # Read-only variables
- services.phpApplication.phpListenPaths = mkOption {
- type = attrsOf path;
- default = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- name config.services.phpfpm.pools."${name}".socket
- ) cfg.apps;
- readOnly = true;
- description = ''
- Full paths to listen for php
- '';
- };
- };
-
- config = {
- services.websites.env = attrsets.mapAttrs' (name: cfgs: attrsets.nameValuePair
- name {
- modules = [ "proxy_fcgi" ];
- watchPaths = builtins.concatLists (map (c: c.httpdWatchFiles) cfgs);
- }
- ) cfgByEnv;
-
- services.phpfpm.pools = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- name {
- user = icfg.httpdUser;
- group = icfg.httpdUser;
- settings = {
- "listen.owner" = icfg.httpdUser;
- "listen.group" = icfg.httpdGroup;
- "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" ([icfg.app icfg.varDir] ++ icfg.phpWatchFiles ++ icfg.phpOpenbasedir);
- }
- // optionalAttrs (icfg.phpSession) { "php_admin_value[session.save_path]" = "${icfg.varDir}/phpSessions"; }
- // icfg.phpPool;
- phpOptions = config.services.phpfpm.phpOptions + icfg.phpOptions;
- inherit (icfg) phpEnv phpPackage;
- }
- ) cfg.apps;
-
- services.filesWatcher = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- "phpfpm-${name}" {
- restart = true;
- paths = icfg.phpWatchFiles;
- }
- ) (attrsets.filterAttrs (n: v: builtins.length v.phpWatchFiles > 0) cfg.apps);
-
- systemd.services = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- "phpfpm-${name}" {
- after = lib.mkAfter icfg.serviceDeps;
- wants = icfg.serviceDeps;
- preStart = lib.mkAfter (optionalString (!isNull icfg.varDir) ''
- watchFilesChanged() {
- ${optionalString (builtins.length icfg.phpWatchFiles == 0) "return 1"}
- [ ! -f "${icfg.varDir}"/watchedFiles ] \
- || ! sha512sum -c --status ${icfg.varDir}/watchedFiles
- }
- appDirChanged() {
- [ ! -f "${icfg.varDir}/currentWebappDir" -o \
- "${icfg.app}" != "$(cat ${icfg.varDir}/currentWebappDir 2>/dev/null)" ]
- }
- updateWatchFiles() {
- ${optionalString (builtins.length icfg.phpWatchFiles == 0) "return 0"}
- sha512sum ${builtins.concatStringsSep " " icfg.phpWatchFiles} > ${icfg.varDir}/watchedFiles
- }
-
- if watchFilesChanged || appDirChanged; then
- pushd ${icfg.app} > /dev/null
- ${builtins.concatStringsSep "\n " (map (c: "/run/wrappers/bin/sudo -u ${icfg.httpdUser} ${c}") icfg.preStartActions) }
- popd > /dev/null
- echo -n "${icfg.app}" > ${icfg.varDir}/currentWebappDir
- updateWatchFiles
- fi
- '');
- }
- ) cfg.apps;
-
- system.activationScripts = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
- name {
- deps = [];
- text = optionalString (!isNull icfg.varDir) ''
- install -m ${icfg.mode} -o ${icfg.httpdUser} -g ${icfg.httpdGroup} -d ${icfg.varDir}
- '' + optionalString (icfg.phpSession) ''
- install -m 0700 -o ${icfg.httpdUser} -g ${icfg.httpdGroup} -d ${icfg.varDir}/phpSessions
- '' + builtins.concatStringsSep "\n" (attrsets.mapAttrsToList (n: v: ''
- install -m ${v} -o ${icfg.httpdUser} -g ${icfg.httpdGroup} -d ${icfg.varDir}/${n}
- '') icfg.varDirPaths);
- }
- ) cfg.apps;
- };
-}
diff --git a/modules/zrepl.nix b/modules/zrepl.nix
deleted file mode 100644
index 5bcc17b..0000000
--- a/modules/zrepl.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ config, lib, pkgs, ... }:
-let
- cfg = config.services.zrepl;
-in
-{
- options = {
- services.zrepl = {
- enable = lib.mkEnableOption "Enable the zrepl daemon";
-
- config = lib.mkOption {
- type = lib.types.lines;
- default = "";
- description = "Configuration";
- };
- };
- };
-
- config = lib.mkIf cfg.enable {
- secrets.keys = {
- "zrepl/zrepl.yml" = {
- permissions = "0400";
- text = cfg.config;
- user = config.systemd.services.zrepl.serviceConfig.User or "root";
- group = config.systemd.services.zrepl.serviceConfig.Group or "root";
- };
- };
- services.filesWatcher.zrepl = {
- restart = true;
- paths = [ config.secrets.fullPaths."zrepl/zrepl.yml" ];
- };
- systemd.services.zrepl = {
- description = "zrepl daemon";
- wantedBy = [ "multi-user.target" ];
- path = [ pkgs.zfs pkgs.openssh ];
- serviceConfig = {
- ExecStart =
- let configFile = config.secrets.fullPaths."zrepl/zrepl.yml";
- in "${pkgs.zrepl}/bin/zrepl daemon --config ${configFile}";
- Type = "simple";
- RuntimeDirectory= "zrepl";
- RuntimeDirectoryMode= "0700";
- };
- };
- };
-}
--
cgit v1.2.3