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 --- .envrc | 32 +- .gitconfig | 9 - .gitignore | 3 +- .gitmodules | 3 - DOCUMENTATION.md | 30 +- Makefile | 130 +- default.nix | 14 +- deploy/flake.lock | 9816 +++++++++++++++ deploy/flake.nix | 45 + environments/default.nix | 4 - environments/immae-eu.nix | 146 - flake.lock | 9825 +++++++++++++++ flake.nix | 47 + flakes/backports/flake.lock | 13 +- flakes/backports/flake.nix | 105 +- flakes/copanier/default.nix | 30 + flakes/copanier/fix_reduce.patch | 13 + flakes/copanier/flake.lock | 59 + flakes/copanier/flake.nix | 28 + flakes/copanier/poetry.lock | 995 ++ flakes/copanier/pyproject.toml | 40 + flakes/diaspora/default.nix | 74 + flakes/diaspora/flake.lock | 75 + flakes/diaspora/flake.nix | 214 + flakes/diaspora/gemset.nix | 3047 +++++ flakes/diaspora/gemset_ldap.nix | 3056 +++++ flakes/diaspora/ldap.patch | 256 + flakes/etherpad-lite/default.nix | 68 + flakes/etherpad-lite/etherpad_cleanup.sql | 30 + flakes/etherpad-lite/flake.lock | 150 + flakes/etherpad-lite/flake.nix | 227 + flakes/etherpad-lite/libreoffice_patch.diff | 12 + .../ep_aa_file_menu_toolbar/node-packages.json | 1 + .../ep_aa_file_menu_toolbar/node-packages.nix | 26 + .../modules/ep_adminpads/node-packages.json | 1 + .../modules/ep_adminpads/node-packages.nix | 27 + .../modules/ep_align/node-packages.json | 1 + .../modules/ep_align/node-packages.nix | 26 + .../modules/ep_bookmark/node-packages.json | 1 + .../modules/ep_bookmark/node-packages.nix | 26 + .../modules/ep_clear_formatting/node-packages.json | 1 + .../modules/ep_clear_formatting/node-packages.nix | 25 + .../modules/ep_colors/node-packages.json | 1 + .../modules/ep_colors/node-packages.nix | 25 + .../modules/ep_comments_page/node-packages.json | 1 + .../modules/ep_comments_page/node-packages.nix | 342 + .../ep_copy_paste_select_all/node-packages.json | 1 + .../ep_copy_paste_select_all/node-packages.nix | 26 + .../modules/ep_cursortrace/node-packages.json | 1 + .../modules/ep_cursortrace/node-packages.nix | 26 + .../ep_delete_empty_pads/node-packages.json | 1 + .../modules/ep_delete_empty_pads/node-packages.nix | 26 + .../etherpad-lite/modules/ep_embedmedia/fix.patch | 85 + .../modules/ep_embedmedia/node-packages.json | 1 + .../modules/ep_embedmedia/node-packages.nix | 29 + .../modules/ep_font_family/node-packages.json | 1 + .../modules/ep_font_family/node-packages.nix | 27 + .../modules/ep_font_size/node-packages.json | 1 + .../modules/ep_font_size/node-packages.nix | 27 + .../modules/ep_headings2/node-packages.json | 1 + .../modules/ep_headings2/node-packages.nix | 26 + .../etherpad-lite/modules/ep_immae_buttons/ep.json | 13 + .../modules/ep_immae_buttons/hooks.js | 6 + .../modules/ep_immae_buttons/node-packages.nix | 22 + .../modules/ep_immae_buttons/package.json | 10 + .../modules/ep_immae_buttons/static/js/main.js | 67 + .../ep_immae_buttons/templates/editbarButtons.ejs | 12 + .../modules/ep_ldapauth/node-packages.json | 1 + .../modules/ep_ldapauth/node-packages.nix | 392 + .../etherpad-lite/modules/ep_line_height/fix.patch | 30 + .../modules/ep_line_height/node-packages.json | 1 + .../modules/ep_line_height/node-packages.nix | 28 + .../modules/ep_markdown/node-packages.json | 1 + .../modules/ep_markdown/node-packages.nix | 300 + .../etherpad-lite/modules/ep_mypads/fix_ldap.patch | 59 + .../modules/ep_mypads/node-packages.json | 1 + .../modules/ep_mypads/node-packages.nix | 2156 ++++ .../modules/ep_page_view/node-packages.json | 1 + .../modules/ep_page_view/node-packages.nix | 26 + .../modules/ep_previewimages/node-packages.json | 1 + .../modules/ep_previewimages/node-packages.nix | 26 + .../modules/ep_private_pad/node-packages.json | 1 + .../modules/ep_private_pad/node-packages.nix | 2056 +++ .../modules/ep_ruler/node-packages.json | 1 + .../modules/ep_ruler/node-packages.nix | 27 + .../modules/ep_scrollto/node-packages.json | 1 + .../modules/ep_scrollto/node-packages.nix | 29 + .../modules/ep_set_title_on_pad/node-packages.json | 1 + .../modules/ep_set_title_on_pad/node-packages.nix | 26 + .../ep_subscript_and_superscript/font.patch | 22 + .../node-packages.json | 1 + .../ep_subscript_and_superscript/node-packages.nix | 28 + .../modules/ep_timesliderdiff/node-packages.json | 1 + .../modules/ep_timesliderdiff/node-packages.nix | 26 + flakes/etherpad-lite/node-packages.nix | 2934 +++++ flakes/files-watcher/flake.nix | 2 + flakes/flake.lock | 9669 +++++++++++++++ flakes/flake.nix | 67 + flakes/grocy/default.nix | 47 + flakes/grocy/flake.lock | 150 + flakes/grocy/flake.nix | 35 + flakes/grocy/php-packages.nix | 457 + flakes/grocy/yarn-packages.nix | 1085 ++ flakes/grocy/yarn.patch | 67 + flakes/lib/flake.lock | 272 +- flakes/lib/flake.nix | 76 +- flakes/loginctl-linger/flake.nix | 56 + flakes/mastodon/default.nix | 94 + flakes/mastodon/flake.lock | 75 + flakes/mastodon/flake.nix | 331 + flakes/mastodon/gemset.nix | 2816 +++++ flakes/mastodon/yarn-packages.nix | 12344 +++++++++++++++++++ flakes/mediagoblin/bower-packages.nix | 8 + flakes/mediagoblin/default.nix | 213 + flakes/mediagoblin/flake.lock | 78 + flakes/mediagoblin/flake.nix | 271 + flakes/mediagoblin/ldap_fix.py | 93 + flakes/mediagoblin/plugins/basicsearch/default.nix | 18 + flakes/multi-apache-container/flake.lock | 36 + flakes/multi-apache-container/flake.nix | 389 + flakes/mypackages/flake.lock | 83 + flakes/mypackages/flake.nix | 43 + flakes/mypackages/lib/default.nix | 37 + flakes/mypackages/lib/flake-parts-lib.nix | 10 + flakes/mypackages/lib/node-env.nix | 542 + flakes/mypackages/lib/private/default.nix | 20 + .../overlays/bitlbee-discord/default.nix | 12 + .../overlays/bitlbee/bitlbee_long_nicks.patch | 56 + flakes/mypackages/overlays/bitlbee/default.nix | 5 + .../overlays/databases/mysql/default.nix | 28 + .../overlays/databases/postgresql/default.nix | 8 + flakes/mypackages/overlays/default.nix | 25 + flakes/mypackages/overlays/gitolite/default.nix | 8 + flakes/mypackages/overlays/gitolite/invite | 172 + flakes/mypackages/overlays/gitweb/default.nix | 7 + .../overlays/gitweb/theme/git-favicon.png | Bin 0 -> 1125 bytes .../mypackages/overlays/gitweb/theme/git-logo.png | Bin 0 -> 2412 bytes flakes/mypackages/overlays/gitweb/theme/gitweb.css | 783 ++ flakes/mypackages/overlays/gitweb/theme/gitweb.js | 27 + flakes/mypackages/overlays/goaccess/default.nix | 13 + flakes/mypackages/overlays/kanboard/default.nix | 19 + flakes/mypackages/overlays/morph/default.nix | 27 + flakes/mypackages/overlays/morph/dry-run.patch | 59 + flakes/mypackages/overlays/morph/verbose_nix.patch | 12 + .../overlays/php-packages/mysqli_patch.patch | 11 + flakes/mypackages/overlays/postfix/default.nix | 3 + .../overlays/taskwarrior/TW-1778_patch.diff | 12 + flakes/mypackages/overlays/taskwarrior/default.nix | 16 + flakes/mypackages/overlays/ympd/default.nix | 14 + .../overlays/ympd/ympd-password-env.patch | 23 + flakes/mypackages/pkgs/bash-libs/default.nix | 33 + flakes/mypackages/pkgs/boinctui/default.nix | 21 + flakes/mypackages/pkgs/cnagios/default.nix | 32 + flakes/mypackages/pkgs/commento/default.nix | 20 + flakes/mypackages/pkgs/composer-env/default.nix | 243 + .../mypackages/pkgs/crypto/cardano-cli/default.nix | 16 + flakes/mypackages/pkgs/crypto/cardano/default.nix | 35 + .../pkgs/crypto/iota-cli-app/default.nix | 29 + .../pkgs/crypto/iota-cli-app/node-packages.nix | 1814 +++ flakes/mypackages/pkgs/crypto/sia/default.nix | 21 + flakes/mypackages/pkgs/default.nix | 64 + .../dovecot/plugins/deleted_to_trash/default.nix | 30 + .../plugins/deleted_to_trash/fix_mbox.patch | 12 + flakes/mypackages/pkgs/flrn/default.nix | 22 + flakes/mypackages/pkgs/fluent-bit/default.nix | 47 + flakes/mypackages/pkgs/fluentd/Gemfile | 3 + flakes/mypackages/pkgs/fluentd/Gemfile.lock | 38 + flakes/mypackages/pkgs/fluentd/default.nix | 20 + flakes/mypackages/pkgs/fluentd/gemset.nix | 126 + flakes/mypackages/pkgs/gearmand/default.nix | 16 + flakes/mypackages/pkgs/genius/default.nix | 19 + flakes/mypackages/pkgs/ical2html/default.nix | 11 + .../mypackages/pkgs/monitoring-plugins/default.nix | 33 + flakes/mypackages/pkgs/mtop/default.nix | 24 + flakes/mypackages/pkgs/mutt-ics/default.nix | 15 + flakes/mypackages/pkgs/muttprint/0.73-4.diff.gz | Bin 0 -> 16525 bytes flakes/mypackages/pkgs/muttprint/default.nix | 44 + flakes/mypackages/pkgs/muttprint/regex.patch | 11 + flakes/mypackages/pkgs/muttprint/two_edge.patch | 19 + .../mypackages/pkgs/naemon-livestatus/default.nix | 32 + flakes/mypackages/pkgs/naemon/default.nix | 44 + flakes/mypackages/pkgs/nagios-cli/default.nix | 12 + flakes/mypackages/pkgs/nagnu/default.nix | 21 + flakes/mypackages/pkgs/nb/default.nix | 22 + flakes/mypackages/pkgs/note/default.nix | 19 + .../pkgs/notmuch/notmuch-python/default.nix | 16 + .../pkgs/notmuch/notmuch-vim/default.nix | 11 + .../pkgs/perl-ical-parser-html/default.nix | 48 + flakes/mypackages/pkgs/pgpid/default.nix | 33 + flakes/mypackages/pkgs/predixy/default.nix | 19 + flakes/mypackages/pkgs/proftpd/default.nix | 22 + flakes/mypackages/pkgs/pure-ftpd/default.nix | 30 + flakes/mypackages/pkgs/riotkit-do/default.nix | 60 + flakes/mypackages/pkgs/rrsync_sudo/default.nix | 8 + flakes/mypackages/pkgs/rrsync_sudo/sudo.patch | 20 + flakes/mypackages/pkgs/shaarli/default.nix | 24 + flakes/mypackages/pkgs/shaarli/shaarli_ldap.patch | 425 + flakes/mypackages/pkgs/signaldctl/default.nix | 13 + flakes/mypackages/pkgs/slang_1/default.nix | 25 + .../pkgs/status_engine/host_perfdata.patch | 47 + flakes/mypackages/pkgs/status_engine/interface.nix | 24 + .../pkgs/status_engine/interface_composer.lock | 1323 ++ .../pkgs/status_engine/interface_php_packages.nix | 217 + flakes/mypackages/pkgs/status_engine/module.nix | 19 + flakes/mypackages/pkgs/status_engine/worker.nix | 37 + .../pkgs/status_engine/worker_composer.lock | 2072 ++++ .../pkgs/status_engine/worker_php_packages.nix | 266 + .../pkgs/telegram-history-dump/default.nix | 18 + flakes/mypackages/pkgs/telegramircd/default.nix | 22 + flakes/mypackages/pkgs/telethon_sync/default.nix | 24 + .../mypackages/pkgs/terminal-velocity/default.nix | 37 + .../pkgs/terminal-velocity/fix_build.patch | 21 + .../pkgs/terminal-velocity/python3_support.patch | 215 + .../pkgs/terminal-velocity/sort_found_notes.patch | 73 + flakes/mypackages/pkgs/tiv/default.nix | 19 + flakes/mypackages/pkgs/tiv/tiv_builder.sh | 8 + flakes/mypackages/pkgs/twins/default.nix | 15 + flakes/mypackages/pkgs/umami/build-geo.patch | 15 + flakes/mypackages/pkgs/umami/default.nix | 72 + flakes/mypackages/pkgs/unicode/default.nix | 48 + flakes/mypackages/pkgs/upcmd/default.nix | 13 + flakes/mypackages/pkgs/webapps/adminer/default.nix | 14 + .../pkgs/webapps/apache-theme/default.nix | 88 + .../pkgs/webapps/apache-theme/theme/.htaccess | 9 + .../pkgs/webapps/apache-theme/theme/footer.html | 31 + .../pkgs/webapps/apache-theme/theme/header.html | 3 + .../webapps/apache-theme/theme/icons/archive.png | Bin 0 -> 551 bytes .../webapps/apache-theme/theme/icons/audio.png | Bin 0 -> 554 bytes .../webapps/apache-theme/theme/icons/authors.png | Bin 0 -> 492 bytes .../pkgs/webapps/apache-theme/theme/icons/bin.png | Bin 0 -> 551 bytes .../webapps/apache-theme/theme/icons/blank.png | Bin 0 -> 227 bytes .../pkgs/webapps/apache-theme/theme/icons/bmp.png | Bin 0 -> 663 bytes .../pkgs/webapps/apache-theme/theme/icons/c.png | Bin 0 -> 554 bytes .../pkgs/webapps/apache-theme/theme/icons/calc.png | Bin 0 -> 506 bytes .../pkgs/webapps/apache-theme/theme/icons/cd.png | Bin 0 -> 757 bytes .../webapps/apache-theme/theme/icons/copying.png | Bin 0 -> 699 bytes .../pkgs/webapps/apache-theme/theme/icons/cpp.png | Bin 0 -> 599 bytes .../pkgs/webapps/apache-theme/theme/icons/css.png | Bin 0 -> 592 bytes .../pkgs/webapps/apache-theme/theme/icons/deb.png | Bin 0 -> 671 bytes .../webapps/apache-theme/theme/icons/default.png | Bin 0 -> 311 bytes .../pkgs/webapps/apache-theme/theme/icons/diff.png | Bin 0 -> 586 bytes .../pkgs/webapps/apache-theme/theme/icons/doc.png | Bin 0 -> 535 bytes .../pkgs/webapps/apache-theme/theme/icons/draw.png | Bin 0 -> 679 bytes .../pkgs/webapps/apache-theme/theme/icons/eps.png | Bin 0 -> 619 bytes .../pkgs/webapps/apache-theme/theme/icons/exe.png | Bin 0 -> 846 bytes .../apache-theme/theme/icons/folder-home.png | Bin 0 -> 618 bytes .../apache-theme/theme/icons/folder-open.png | Bin 0 -> 431 bytes .../apache-theme/theme/icons/folder-page.png | Bin 0 -> 591 bytes .../apache-theme/theme/icons/folder-parent-old.png | Bin 0 -> 494 bytes .../apache-theme/theme/icons/folder-parent.png | Bin 0 -> 621 bytes .../webapps/apache-theme/theme/icons/folder.png | Bin 0 -> 395 bytes .../pkgs/webapps/apache-theme/theme/icons/gif.png | Bin 0 -> 655 bytes .../pkgs/webapps/apache-theme/theme/icons/gzip.png | Bin 0 -> 551 bytes .../pkgs/webapps/apache-theme/theme/icons/h.png | Bin 0 -> 504 bytes .../pkgs/webapps/apache-theme/theme/icons/hpp.png | Bin 0 -> 530 bytes .../pkgs/webapps/apache-theme/theme/icons/html.png | Bin 0 -> 770 bytes .../pkgs/webapps/apache-theme/theme/icons/ico.png | Bin 0 -> 792 bytes .../webapps/apache-theme/theme/icons/image.png | Bin 0 -> 671 bytes .../webapps/apache-theme/theme/icons/install.png | Bin 0 -> 788 bytes .../pkgs/webapps/apache-theme/theme/icons/java.png | Bin 0 -> 658 bytes .../pkgs/webapps/apache-theme/theme/icons/jpg.png | Bin 0 -> 675 bytes .../pkgs/webapps/apache-theme/theme/icons/js.png | Bin 0 -> 540 bytes .../pkgs/webapps/apache-theme/theme/icons/json.png | Bin 0 -> 540 bytes .../pkgs/webapps/apache-theme/theme/icons/log.png | Bin 0 -> 423 bytes .../webapps/apache-theme/theme/icons/makefile.png | Bin 0 -> 614 bytes .../webapps/apache-theme/theme/icons/markdown.png | Bin 0 -> 627 bytes .../webapps/apache-theme/theme/icons/package.png | Bin 0 -> 614 bytes .../pkgs/webapps/apache-theme/theme/icons/pdf.png | Bin 0 -> 799 bytes .../pkgs/webapps/apache-theme/theme/icons/php.png | Bin 0 -> 757 bytes .../webapps/apache-theme/theme/icons/playlist.png | Bin 0 -> 610 bytes .../pkgs/webapps/apache-theme/theme/icons/png.png | Bin 0 -> 679 bytes .../pkgs/webapps/apache-theme/theme/icons/pres.png | Bin 0 -> 629 bytes .../pkgs/webapps/apache-theme/theme/icons/ps.png | Bin 0 -> 817 bytes .../pkgs/webapps/apache-theme/theme/icons/psd.png | Bin 0 -> 622 bytes .../pkgs/webapps/apache-theme/theme/icons/py.png | Bin 0 -> 743 bytes .../pkgs/webapps/apache-theme/theme/icons/rar.png | Bin 0 -> 621 bytes .../pkgs/webapps/apache-theme/theme/icons/rb.png | Bin 0 -> 781 bytes .../webapps/apache-theme/theme/icons/readme.png | Bin 0 -> 384 bytes .../pkgs/webapps/apache-theme/theme/icons/rpm.png | Bin 0 -> 660 bytes .../pkgs/webapps/apache-theme/theme/icons/rss.png | Bin 0 -> 660 bytes .../pkgs/webapps/apache-theme/theme/icons/rtf.png | Bin 0 -> 627 bytes .../webapps/apache-theme/theme/icons/script.png | Bin 0 -> 613 bytes .../webapps/apache-theme/theme/icons/source.png | Bin 0 -> 586 bytes .../pkgs/webapps/apache-theme/theme/icons/sql.png | Bin 0 -> 510 bytes .../pkgs/webapps/apache-theme/theme/icons/tar.png | Bin 0 -> 406 bytes .../pkgs/webapps/apache-theme/theme/icons/tex.png | Bin 0 -> 677 bytes .../pkgs/webapps/apache-theme/theme/icons/text.png | Bin 0 -> 463 bytes .../pkgs/webapps/apache-theme/theme/icons/tiff.png | Bin 0 -> 654 bytes .../webapps/apache-theme/theme/icons/unknown.png | Bin 0 -> 556 bytes .../pkgs/webapps/apache-theme/theme/icons/vcal.png | Bin 0 -> 556 bytes .../webapps/apache-theme/theme/icons/video.png | Bin 0 -> 739 bytes .../pkgs/webapps/apache-theme/theme/icons/xml.png | Bin 0 -> 585 bytes .../pkgs/webapps/apache-theme/theme/icons/zip.png | Bin 0 -> 617 bytes .../pkgs/webapps/apache-theme/theme/style.css | 160 + flakes/mypackages/pkgs/webapps/awl/default.nix | 16 + flakes/mypackages/pkgs/webapps/davical/default.nix | 23 + flakes/mypackages/pkgs/webapps/default.nix | 24 + .../mypackages/pkgs/webapps/dokuwiki/default.nix | 54 + .../pkgs/webapps/dokuwiki/plugins/farmer.nix | 25 + .../pkgs/webapps/dokuwiki/plugins/todo.nix | 18 + .../mypackages/pkgs/webapps/infcloud/default.nix | 19 + .../pkgs/webapps/infcloud/infcloud_config.js | 1446 +++ .../pkgs/webapps/mantisbt_2/bug_report.php.diff | 20 + .../webapps/mantisbt_2/bug_report_page.php.diff | 53 + .../pkgs/webapps/mantisbt_2/bugnote_add.php.diff | 20 + .../webapps/mantisbt_2/bugnote_add_inc.php.diff | 52 + .../mypackages/pkgs/webapps/mantisbt_2/default.nix | 44 + .../webapps/mantisbt_2/plugins/slack/default.nix | 18 + .../plugins/source-integration/Source.API.php.diff | 12 + .../plugins/source-integration/default.nix | 22 + .../pkgs/webapps/nextcloud/apps/audioplayer.nix | 15 + .../pkgs/webapps/nextcloud/apps/bookmarks.nix | 21 + .../pkgs/webapps/nextcloud/apps/calendar.nix | 15 + .../pkgs/webapps/nextcloud/apps/carnet.nix | 15 + .../pkgs/webapps/nextcloud/apps/contacts.nix | 15 + .../pkgs/webapps/nextcloud/apps/cookbook.nix | 15 + .../pkgs/webapps/nextcloud/apps/deck.nix | 27 + .../pkgs/webapps/nextcloud/apps/drawio.nix | 24 + .../pkgs/webapps/nextcloud/apps/external.nix | 27 + .../pkgs/webapps/nextcloud/apps/extract.nix | 15 + .../pkgs/webapps/nextcloud/apps/files_markdown.nix | 15 + .../pkgs/webapps/nextcloud/apps/files_mindmap.nix | 15 + .../pkgs/webapps/nextcloud/apps/files_readmemd.nix | 14 + .../pkgs/webapps/nextcloud/apps/flowupload.nix | 14 + .../pkgs/webapps/nextcloud/apps/gpxedit.nix | 22 + .../pkgs/webapps/nextcloud/apps/gpxpod.nix | 31 + .../pkgs/webapps/nextcloud/apps/groupfolders.nix | 27 + .../pkgs/webapps/nextcloud/apps/impersonate.nix | 27 + .../webapps/nextcloud/apps/integration_dropbox.nix | 13 + .../pkgs/webapps/nextcloud/apps/keeweb.nix | 24 + .../pkgs/webapps/nextcloud/apps/maps.nix | 15 + .../pkgs/webapps/nextcloud/apps/metadata.nix | 15 + .../pkgs/webapps/nextcloud/apps/music.nix | 15 + .../pkgs/webapps/nextcloud/apps/notes.nix | 15 + .../pkgs/webapps/nextcloud/apps/ocsms.nix | 21 + .../pkgs/webapps/nextcloud/apps/onlyoffice.nix | 21 + .../pkgs/webapps/nextcloud/apps/passman.nix | 21 + .../pkgs/webapps/nextcloud/apps/polls.nix | 15 + .../pkgs/webapps/nextcloud/apps/side_menu.nix | 16 + .../pkgs/webapps/nextcloud/apps/social.nix | 14 + .../pkgs/webapps/nextcloud/apps/spreed.nix | 27 + .../webapps/nextcloud/apps/talk_matterbridge.nix | 14 + .../pkgs/webapps/nextcloud/apps/tasks.nix | 15 + .../mypackages/pkgs/webapps/nextcloud/default.nix | 84 + flakes/mypackages/pkgs/webapps/phpbb/default.nix | 61 + .../pkgs/webapps/phpbb/extensions/adduser.nix | 22 + .../webapps/phpbb/extensions/autosubscribe.nix | 19 + .../pkgs/webapps/phpbb/extensions/mailinglist.nix | 18 + .../pkgs/webapps/phpbb/extensions/markdown.nix | 20 + .../pkgs/webapps/phpbb/extensions/mchat.nix | 21 + .../webapps/phpbb/extensions/monitoranswers.nix | 19 + flakes/mypackages/pkgs/webapps/phpbb/langs/fr.nix | 12 + .../pkgs/webapps/phpldapadmin/default.nix | 27 + .../webapps/phpldapadmin/ldap-align-button.patch | 11 + .../webapps/phpldapadmin/ldap-fix-password.patch | 13 + .../phpldapadmin/ldap-sort-in-templates.patch | 12 + flakes/mypackages/pkgs/webapps/rompr/default.nix | 17 + .../pkgs/webapps/roundcubemail/add_all.patch | 209 + .../pkgs/webapps/roundcubemail/default.nix | 85 + .../plugins/automatic_addressbook/default.nix | 7 + .../roundcubemail/plugins/carddav/default.nix | 7 + .../roundcubemail/plugins/contextmenu/default.nix | 7 + .../plugins/contextmenu_folder/default.nix | 7 + .../plugins/html5_notifier/default.nix | 7 + .../roundcubemail/plugins/ident_switch/default.nix | 7 + .../plugins/message_highlight/default.nix | 7 + .../plugins/thunderbird_labels/default.nix | 7 + flakes/mypackages/pkgs/webapps/spip/default.nix | 32 + .../pkgs/webapps/spip/spip_ldap_patch.patch | 60 + .../pkgs/webapps/spip/spip_mes_options.php | 18 + flakes/mypackages/pkgs/webapps/ttrss/default.nix | 37 + .../webapps/ttrss/plugins/af_feedmod/default.nix | 18 + .../ttrss/plugins/af_feedmod/type_replace.patch | 12 + .../webapps/ttrss/plugins/auth_ldap/default.nix | 17 + .../webapps/ttrss/plugins/feediron/default.nix | 18 + .../ttrss/plugins/feediron/json_reformat.patch | 18 + .../webapps/ttrss/plugins/ff_instagram/default.nix | 17 + .../ttrss/plugins/tumblr_gdpr_ua/default.nix | 17 + .../mypackages/pkgs/webapps/wallabag/default.nix | 54 + flakes/mypackages/pkgs/webapps/wallabag/ldap.patch | 664 + flakes/mypackages/pkgs/webapps/yourls/default.nix | 37 + .../pkgs/webapps/yourls/plugins/ldap/default.nix | 17 + flakes/myuids/flake.nix | 14 +- flakes/naemon/flake.nix | 191 + flakes/naemon/naemon.cfg | 1059 ++ flakes/openarc/flake.lock | 17 +- flakes/openarc/flake.nix | 6 +- flakes/opendmarc/flake.lock | 17 +- flakes/opendmarc/flake.nix | 8 +- flakes/openfoodnetwork/default.nix | 39 + flakes/openfoodnetwork/gemset.nix | 2896 +++++ flakes/paste/flake.nix | 2 + flakes/paste/paste/paste.py | 29 +- flakes/peertube/flake.lock | 17 +- flakes/peertube/flake.nix | 10 +- flakes/private/buildbot/buildslist/bower.nix | 9 + flakes/private/buildbot/buildslist/default.nix | 64 + .../private/buildbot/buildslist/yarn-packages.nix | 9293 ++++++++++++++ flakes/private/buildbot/common/build_helpers.py | 293 + flakes/private/buildbot/common/libvirt.py | 318 + flakes/private/buildbot/common/master.cfg | 93 + flakes/private/buildbot/flake.lock | 61 + flakes/private/buildbot/flake.nix | 74 + flakes/private/buildbot/test_project/__init__.py | 121 + flakes/private/chatons/flake.lock | 23 + flakes/private/chatons/flake.nix | 142 + flakes/private/environment-dummy/flake.nix | 18 + flakes/private/environment-dummy/ldap.conf | 13 + flakes/private/environment-dummy/vars.yml | 1 + flakes/private/environment/flake.nix | 1135 ++ flakes/private/mail-relay/filter-rewrite-from.py | 68 + flakes/private/mail-relay/flake.lock | 36 + flakes/private/mail-relay/flake.nix | 58 + flakes/private/milters/flake.lock | 186 + flakes/private/milters/flake.nix | 106 + flakes/private/milters/verify_from.py | 60 + flakes/private/monitoring/flake.lock | 67 + flakes/private/monitoring/flake.nix | 267 + flakes/private/monitoring/myplugins.nix | 400 + flakes/private/monitoring/nagios-cli.cfg | 68 + flakes/private/monitoring/objects_common.nix | 227 + flakes/private/monitoring/plugins/check_backup_age | 66 + flakes/private/monitoring/plugins/check_bandwidth | 122 + flakes/private/monitoring/plugins/check_command | 113 + flakes/private/monitoring/plugins/check_emails | 121 + flakes/private/monitoring/plugins/check_eriomem | 83 + .../private/monitoring/plugins/check_ftp_database | 11 + flakes/private/monitoring/plugins/check_git | 81 + .../monitoring/plugins/check_imap_connection | 52 + .../monitoring/plugins/check_last_file_date | 28 + flakes/private/monitoring/plugins/check_mem.sh | 31 + .../monitoring/plugins/check_mysql_replication | 41 + .../monitoring/plugins/check_openldap_replication | 54 + flakes/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 + .../private/monitoring/plugins/notify_by_apprise | 31 + flakes/private/monitoring/plugins/notify_by_email | 29 + flakes/private/monitoring/plugins/notify_by_slack | 46 + flakes/private/monitoring/plugins/send_nrdp.sh | 57 + flakes/private/monitoring/send_mails | 15 + flakes/private/monitoring/to_objects.nix | 77 + flakes/private/openarc/flake.lock | 72 +- flakes/private/openarc/flake.nix | 96 +- flakes/private/opendmarc/flake.lock | 85 +- flakes/private/opendmarc/flake.nix | 125 +- flakes/private/openldap/flake.nix | 6 + flakes/private/openldap/immae.ldif | 83 + flakes/private/openldap/immae.schema | 179 + flakes/private/paste/flake.lock | 51 +- flakes/private/paste/flake.nix | 36 +- flakes/private/peertube/flake.lock | 89 +- flakes/private/peertube/flake.nix | 16 +- flakes/private/php/flake.lock | 62 + flakes/private/php/flake.nix | 40 + flakes/private/ssh/flake.lock | 36 + flakes/private/ssh/flake.nix | 107 + flakes/private/ssh/ldap_authorized_keys.sh | 62 + flakes/private/system/flake.lock | 185 + flakes/private/system/flake.nix | 168 + flakes/private/system/public_keys/Immae.pub | 322 + flakes/rsync_backup/flake.nix | 4 +- flakes/secrets/flake.nix | 60 +- flakes/surfer/default.nix | 12 + flakes/surfer/flake.lock | 149 + flakes/surfer/flake.nix | 36 + flakes/surfer/node-packages.nix | 2437 ++++ flakes/taskwarrior-web/Gemfile.lock | 139 + flakes/taskwarrior-web/default.nix | 25 + flakes/taskwarrior-web/fixes.patch | 113 + flakes/taskwarrior-web/flake.lock | 62 + flakes/taskwarrior-web/flake.nix | 33 + flakes/taskwarrior-web/gemset.nix | 567 + flakes/taskwarrior-web/thin.patch | 23 + lib/default.nix | 16 - lib/flake-compat-patched.nix | 190 - lib/flake-compat.nix | 8 - lib/node-env.nix | 542 - lib/private/default.nix | 20 - 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 - nix/README.md | 2 - nix/sources.json | 209 - nix/sources.nix | 135 - nixops/.gitignore | 1 - nixops/.sops.yaml | 19 - nixops/Makefile | 102 - nixops/default.nix | 8 - nixops/public_keys/Immae.pub | 322 - nixops/scripts/setup | 90 - nixops/scripts/with_env | 22 - nixops/secrets | 1 - overlays/bitlbee-discord/default.nix | 12 - overlays/bitlbee/bitlbee_long_nicks.patch | 56 - overlays/bitlbee/default.nix | 5 - overlays/bonfire/default.nix | 36 - overlays/bugwarrior/default.nix | 5 - overlays/bugwarrior/mantisbt.patch | 379 - overlays/bundix/default.nix | 7 - overlays/databases/mysql/default.nix | 24 - overlays/databases/postgresql/default.nix | 8 - overlays/default.nix | 48 - overlays/doing/default.nix | 10 - overlays/dwm/default.nix | 7 - overlays/dwm/dwm_config.h | 98 - overlays/elinks/default.nix | 14 - overlays/elinks/elinks.json | 15 - overlays/gitolite/default.nix | 8 - overlays/gitolite/invite | 172 - overlays/gitweb/default.nix | 7 - overlays/gitweb/theme/git-favicon.png | Bin 1125 -> 0 bytes overlays/gitweb/theme/git-logo.png | Bin 2412 -> 0 bytes overlays/gitweb/theme/gitweb.css | 783 -- overlays/gitweb/theme/gitweb.js | 27 - overlays/goaccess/default.nix | 13 - overlays/kanboard/default.nix | 18 - overlays/khal/default.nix | 8 - overlays/ledger/default.nix | 20 - overlays/lesspipe/default.nix | 5 - overlays/morph/default.nix | 5 - overlays/morph/dry-run.patch | 59 - overlays/morph/verbose_nix.patch | 12 - overlays/neomutt/default.nix | 7 - overlays/neomutt/tx.patch | 44 - overlays/nix-direnv/default.nix | 7 - overlays/nixops/default.nix | 20 - overlays/nixops/fix_glibc.patch | 15 - overlays/nixops/hetzner_cloud.patch | 480 - overlays/pass/default.nix | 5 - overlays/pass/pass-fix-pass-init.patch | 42 - overlays/pelican/default.nix | 7 - overlays/php-packages/default.nix | 6 - overlays/php-packages/mysqli_patch.patch | 11 - overlays/postfix/default.nix | 3 - overlays/procps-ng/default.nix | 5 - overlays/python-packages/buildbot.nix | 8 - overlays/python-packages/default.nix | 29 - overlays/sc-im/default.nix | 9 - overlays/shaarli/default.nix | 15 - overlays/shaarli/shaarli_ldap.patch | 425 - overlays/slrn/default.nix | 5 - overlays/taskwarrior/TW-1778_patch.diff | 12 - overlays/taskwarrior/default.nix | 16 - overlays/vcsh/default.nix | 7 - overlays/weechat/default.nix | 12 - overlays/ympd/default.nix | 5 - overlays/ympd/ympd-password-env.patch | 23 - overlays/ympd/ympd.json | 15 - pkgs/boinctui/default.nix | 20 - pkgs/cnagios/cnagios.json | 15 - pkgs/cnagios/default.nix | 22 - pkgs/commento/default.nix | 20 - pkgs/composer-env/default.nix | 280 - pkgs/crypto/cardano-cli/default.nix | 16 - pkgs/crypto/cardano/daedalus.json | 15 - pkgs/crypto/cardano/default.nix | 29 - pkgs/crypto/iota-cli-app/default.nix | 20 - pkgs/crypto/iota-cli-app/iota-cli-app.json | 15 - pkgs/crypto/iota-cli-app/node-packages.nix | 1814 --- pkgs/crypto/sia/default.nix | 21 - pkgs/default.nix | 64 - pkgs/dovecot/plugins/deleted_to_trash/default.nix | 21 - .../deleted_to_trash/dovecot-deleted_to_trash.json | 15 - .../plugins/deleted_to_trash/fix_mbox.patch | 12 - pkgs/flrn/default.nix | 13 - pkgs/flrn/flrn.json | 15 - pkgs/gearmand/default.nix | 16 - pkgs/genius/default.nix | 19 - pkgs/monitoring-plugins/default.nix | 33 - pkgs/mtop/default.nix | 24 - pkgs/mutt-ics/default.nix | 5 - pkgs/mutt-ics/mutt-ics.json | 15 - pkgs/muttprint/0.73-4.diff.gz | Bin 16525 -> 0 bytes pkgs/muttprint/default.nix | 44 - pkgs/muttprint/regex.patch | 11 - pkgs/muttprint/two_edge.patch | 19 - pkgs/naemon-livestatus/default.nix | 23 - pkgs/naemon-livestatus/naemon-livestatus.json | 15 - pkgs/naemon/default.nix | 35 - pkgs/naemon/naemon.json | 15 - pkgs/nagios-cli/default.nix | 2 - pkgs/nagios-cli/nagios-cli.json | 15 - pkgs/nagnu/default.nix | 12 - pkgs/nagnu/nagnu.json | 15 - pkgs/nb/default.nix | 20 - pkgs/note/default.nix | 19 - pkgs/notmuch/notmuch-python/default.nix | 16 - pkgs/notmuch/notmuch-vim/default.nix | 11 - pkgs/pgloader/default.nix | 40 - pkgs/predixy/default.nix | 10 - pkgs/predixy/predixy.json | 15 - pkgs/proftpd/default.nix | 23 - pkgs/pure-ftpd/default.nix | 30 - pkgs/python-packages/blivet/default.nix | 118 - pkgs/python-packages/blivet/fix_path.patch | 21 - pkgs/python-packages/blivet/poetry.lock | 96 - pkgs/python-packages/blivet/pyproject.toml | 20 - .../buildbot/plugins/buildslist/bower.nix | 9 - .../buildbot/plugins/buildslist/default.nix | 65 - .../buildbot/plugins/buildslist/yarn-packages.nix | 9293 -------------- pkgs/python-packages/buildbot/plugins/default.nix | 6 - pkgs/python-packages/default.nix | 7 - pkgs/python-packages/pymilter.nix | 11 - pkgs/python-packages/wokkel.nix | 11 - pkgs/rrsync_sudo/default.nix | 8 - pkgs/rrsync_sudo/sudo.patch | 20 - pkgs/signaldctl/default.nix | 13 - pkgs/slang_1/default.nix | 25 - pkgs/status_engine/host_perfdata.patch | 47 - pkgs/status_engine/interface.nix | 21 - pkgs/status_engine/interface_composer.lock | 1323 -- pkgs/status_engine/interface_php_packages.nix | 217 - pkgs/status_engine/module.json | 15 - pkgs/status_engine/module.nix | 10 - pkgs/status_engine/worker.json | 15 - pkgs/status_engine/worker.nix | 24 - pkgs/status_engine/worker_composer.lock | 1457 --- pkgs/status_engine/worker_php_packages.nix | 217 - pkgs/telegram-history-dump/default.nix | 9 - .../telegram-history-dump.json | 15 - pkgs/telegramircd/default.nix | 16 - pkgs/telegramircd/telegramircd.json | 15 - pkgs/telethon_sync/default.nix | 24 - pkgs/terminal-velocity/default.nix | 37 - pkgs/terminal-velocity/fix_build.patch | 21 - pkgs/terminal-velocity/python3_support.patch | 215 - pkgs/terminal-velocity/sort_found_notes.patch | 73 - pkgs/tiv/default.nix | 19 - pkgs/tiv/tiv_builder.sh | 8 - pkgs/twins/default.nix | 15 - pkgs/umami/build-geo.patch | 15 - pkgs/umami/default.nix | 72 - pkgs/unicode/default.nix | 48 - pkgs/webapps/adminer/default.nix | 14 - pkgs/webapps/apache-theme/default.nix | 88 - pkgs/webapps/apache-theme/theme/.htaccess | 9 - pkgs/webapps/apache-theme/theme/footer.html | 31 - pkgs/webapps/apache-theme/theme/header.html | 3 - pkgs/webapps/apache-theme/theme/icons/archive.png | Bin 551 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/audio.png | Bin 554 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/authors.png | Bin 492 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/bin.png | Bin 551 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/blank.png | Bin 227 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/bmp.png | Bin 663 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/c.png | Bin 554 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/calc.png | Bin 506 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/cd.png | Bin 757 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/copying.png | Bin 699 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/cpp.png | Bin 599 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/css.png | Bin 592 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/deb.png | Bin 671 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/default.png | Bin 311 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/diff.png | Bin 586 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/doc.png | Bin 535 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/draw.png | Bin 679 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/eps.png | Bin 619 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/exe.png | Bin 846 -> 0 bytes .../apache-theme/theme/icons/folder-home.png | Bin 618 -> 0 bytes .../apache-theme/theme/icons/folder-open.png | Bin 431 -> 0 bytes .../apache-theme/theme/icons/folder-page.png | Bin 591 -> 0 bytes .../apache-theme/theme/icons/folder-parent-old.png | Bin 494 -> 0 bytes .../apache-theme/theme/icons/folder-parent.png | Bin 621 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/folder.png | Bin 395 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/gif.png | Bin 655 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/gzip.png | Bin 551 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/h.png | Bin 504 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/hpp.png | Bin 530 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/html.png | Bin 770 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/ico.png | Bin 792 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/image.png | Bin 671 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/install.png | Bin 788 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/java.png | Bin 658 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/jpg.png | Bin 675 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/js.png | Bin 540 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/json.png | Bin 540 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/log.png | Bin 423 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/makefile.png | Bin 614 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/markdown.png | Bin 627 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/package.png | Bin 614 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/pdf.png | Bin 799 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/php.png | Bin 757 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/playlist.png | Bin 610 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/png.png | Bin 679 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/pres.png | Bin 629 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/ps.png | Bin 817 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/psd.png | Bin 622 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/py.png | Bin 743 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/rar.png | Bin 621 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/rb.png | Bin 781 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/readme.png | Bin 384 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/rpm.png | Bin 660 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/rss.png | Bin 660 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/rtf.png | Bin 627 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/script.png | Bin 613 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/source.png | Bin 586 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/sql.png | Bin 510 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/tar.png | Bin 406 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/tex.png | Bin 677 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/text.png | Bin 463 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/tiff.png | Bin 654 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/unknown.png | Bin 556 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/vcal.png | Bin 556 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/video.png | Bin 739 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/xml.png | Bin 585 -> 0 bytes pkgs/webapps/apache-theme/theme/icons/zip.png | Bin 617 -> 0 bytes pkgs/webapps/apache-theme/theme/style.css | 160 - pkgs/webapps/awl/default.nix | 16 - pkgs/webapps/davical/default.nix | 23 - pkgs/webapps/default.nix | 27 - pkgs/webapps/diaspora/default.nix | 69 - pkgs/webapps/diaspora/diaspora.json | 15 - pkgs/webapps/diaspora/gemset.nix | 3047 ----- pkgs/webapps/diaspora/gemset_ldap.nix | 3056 ----- pkgs/webapps/diaspora/ldap.patch | 256 - pkgs/webapps/dokuwiki/default.nix | 45 - pkgs/webapps/dokuwiki/dokuwiki.json | 15 - pkgs/webapps/dokuwiki/plugins/farmer.nix | 25 - pkgs/webapps/dokuwiki/plugins/todo.nix | 18 - pkgs/webapps/etherpad-lite/default.nix | 63 - pkgs/webapps/etherpad-lite/etherpad-lite.json | 15 - pkgs/webapps/etherpad-lite/libreoffice_patch.diff | 12 - .../ep_aa_file_menu_toolbar/node-packages.json | 1 - .../ep_aa_file_menu_toolbar/node-packages.nix | 26 - .../modules/ep_adminpads/node-packages.json | 1 - .../modules/ep_adminpads/node-packages.nix | 27 - .../modules/ep_align/node-packages.json | 1 - .../modules/ep_align/node-packages.nix | 26 - .../modules/ep_bookmark/node-packages.json | 1 - .../modules/ep_bookmark/node-packages.nix | 26 - .../modules/ep_clear_formatting/node-packages.json | 1 - .../modules/ep_clear_formatting/node-packages.nix | 25 - .../modules/ep_colors/node-packages.json | 1 - .../modules/ep_colors/node-packages.nix | 25 - .../modules/ep_comments_page/node-packages.json | 1 - .../modules/ep_comments_page/node-packages.nix | 342 - .../ep_copy_paste_select_all/node-packages.json | 1 - .../ep_copy_paste_select_all/node-packages.nix | 26 - .../modules/ep_cursortrace/node-packages.json | 1 - .../modules/ep_cursortrace/node-packages.nix | 26 - .../ep_delete_empty_pads/node-packages.json | 1 - .../modules/ep_delete_empty_pads/node-packages.nix | 26 - .../etherpad-lite/modules/ep_embedmedia/fix.patch | 85 - .../modules/ep_embedmedia/node-packages.json | 1 - .../modules/ep_embedmedia/node-packages.nix | 29 - .../modules/ep_font_family/node-packages.json | 1 - .../modules/ep_font_family/node-packages.nix | 27 - .../modules/ep_font_size/node-packages.json | 1 - .../modules/ep_font_size/node-packages.nix | 27 - .../modules/ep_headings2/node-packages.json | 1 - .../modules/ep_headings2/node-packages.nix | 26 - .../etherpad-lite/modules/ep_immae_buttons/ep.json | 13 - .../modules/ep_immae_buttons/hooks.js | 6 - .../modules/ep_immae_buttons/node-packages.nix | 22 - .../modules/ep_immae_buttons/package.json | 10 - .../modules/ep_immae_buttons/static/js/main.js | 67 - .../ep_immae_buttons/templates/editbarButtons.ejs | 12 - .../modules/ep_ldapauth/node-packages.json | 1 - .../modules/ep_ldapauth/node-packages.nix | 392 - .../etherpad-lite/modules/ep_line_height/fix.patch | 30 - .../modules/ep_line_height/node-packages.json | 1 - .../modules/ep_line_height/node-packages.nix | 28 - .../modules/ep_markdown/node-packages.json | 1 - .../modules/ep_markdown/node-packages.nix | 300 - .../etherpad-lite/modules/ep_mypads/fix_ldap.patch | 59 - .../modules/ep_mypads/node-packages.json | 1 - .../modules/ep_mypads/node-packages.nix | 2156 ---- .../modules/ep_page_view/node-packages.json | 1 - .../modules/ep_page_view/node-packages.nix | 26 - .../modules/ep_previewimages/node-packages.json | 1 - .../modules/ep_previewimages/node-packages.nix | 26 - .../modules/ep_private_pad/node-packages.json | 1 - .../modules/ep_private_pad/node-packages.nix | 2056 --- .../modules/ep_ruler/node-packages.json | 1 - .../modules/ep_ruler/node-packages.nix | 27 - .../modules/ep_scrollto/node-packages.json | 1 - .../modules/ep_scrollto/node-packages.nix | 29 - .../modules/ep_set_title_on_pad/node-packages.json | 1 - .../modules/ep_set_title_on_pad/node-packages.nix | 26 - .../ep_subscript_and_superscript/font.patch | 22 - .../node-packages.json | 1 - .../ep_subscript_and_superscript/node-packages.nix | 28 - .../modules/ep_timesliderdiff/node-packages.json | 1 - .../modules/ep_timesliderdiff/node-packages.nix | 26 - pkgs/webapps/etherpad-lite/node-packages.nix | 2934 ----- pkgs/webapps/grocy/default.nix | 45 - pkgs/webapps/grocy/grocy.json | 15 - pkgs/webapps/grocy/php-packages.nix | 457 - pkgs/webapps/grocy/yarn-packages.nix | 1085 -- pkgs/webapps/grocy/yarn.patch | 67 - pkgs/webapps/infcloud/default.nix | 19 - pkgs/webapps/infcloud/infcloud_config.js | 1446 --- pkgs/webapps/mantisbt_2/bug_report.php.diff | 20 - pkgs/webapps/mantisbt_2/bug_report_page.php.diff | 53 - pkgs/webapps/mantisbt_2/bugnote_add.php.diff | 20 - pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff | 52 - pkgs/webapps/mantisbt_2/default.nix | 43 - pkgs/webapps/mantisbt_2/plugins/slack/default.nix | 18 - .../plugins/source-integration/Source.API.php.diff | 12 - .../plugins/source-integration/default.nix | 21 - pkgs/webapps/mastodon/default.nix | 92 - pkgs/webapps/mastodon/gemset.nix | 2816 ----- pkgs/webapps/mastodon/mastodon.json | 15 - pkgs/webapps/mastodon/yarn-packages.nix | 12344 ------------------- pkgs/webapps/mediagoblin/bower-packages.nix | 8 - pkgs/webapps/mediagoblin/default.nix | 210 - pkgs/webapps/mediagoblin/ldap_fix.py | 93 - .../mediagoblin/plugins/basicsearch/default.nix | 18 - pkgs/webapps/mediagoblin/tempita.json | 15 - pkgs/webapps/nextcloud/apps/apporder.nix | 8 - pkgs/webapps/nextcloud/apps/audioplayer.nix | 8 - pkgs/webapps/nextcloud/apps/bookmarks.nix | 8 - pkgs/webapps/nextcloud/apps/calendar.nix | 8 - pkgs/webapps/nextcloud/apps/carnet.nix | 8 - pkgs/webapps/nextcloud/apps/circles.nix | 8 - pkgs/webapps/nextcloud/apps/contacts.nix | 8 - pkgs/webapps/nextcloud/apps/cookbook.nix | 14 - pkgs/webapps/nextcloud/apps/deck.nix | 8 - pkgs/webapps/nextcloud/apps/extract.nix | 8 - pkgs/webapps/nextcloud/apps/files_markdown.nix | 8 - pkgs/webapps/nextcloud/apps/files_readmemd.nix | 8 - pkgs/webapps/nextcloud/apps/flowupload.nix | 8 - pkgs/webapps/nextcloud/apps/gpxedit.nix | 16 - pkgs/webapps/nextcloud/apps/gpxpod.nix | 16 - pkgs/webapps/nextcloud/apps/impersonate.nix | 9 - pkgs/webapps/nextcloud/apps/keeweb.nix | 17 - pkgs/webapps/nextcloud/apps/maps.nix | 8 - pkgs/webapps/nextcloud/apps/metadata.nix | 8 - pkgs/webapps/nextcloud/apps/music.nix | 9 - pkgs/webapps/nextcloud/apps/notes.nix | 8 - pkgs/webapps/nextcloud/apps/ocsms.nix | 12 - pkgs/webapps/nextcloud/apps/passman.nix | 10 - pkgs/webapps/nextcloud/apps/polls.nix | 8 - pkgs/webapps/nextcloud/apps/social.nix | 9 - pkgs/webapps/nextcloud/apps/spreed.nix | 8 - pkgs/webapps/nextcloud/apps/tasks.nix | 8 - pkgs/webapps/nextcloud/default.nix | 69 - pkgs/webapps/phpbb/default.nix | 61 - pkgs/webapps/phpbb/extensions/adduser.nix | 22 - pkgs/webapps/phpbb/extensions/autosubscribe.nix | 19 - pkgs/webapps/phpbb/extensions/mailinglist.nix | 18 - pkgs/webapps/phpbb/extensions/markdown.nix | 20 - pkgs/webapps/phpbb/extensions/mchat.nix | 21 - pkgs/webapps/phpbb/extensions/monitoranswers.nix | 19 - pkgs/webapps/phpbb/langs/fr.nix | 12 - pkgs/webapps/phpldapadmin/default.nix | 27 - pkgs/webapps/phpldapadmin/ldap-align-button.patch | 11 - pkgs/webapps/phpldapadmin/ldap-fix-password.patch | 13 - .../phpldapadmin/ldap-sort-in-templates.patch | 12 - pkgs/webapps/rompr/default.nix | 8 - pkgs/webapps/rompr/rompr.json | 15 - pkgs/webapps/roundcubemail/add_all.patch | 209 - pkgs/webapps/roundcubemail/default.nix | 85 - .../plugins/automatic_addressbook/default.nix | 7 - .../roundcubemail/plugins/carddav/default.nix | 7 - .../roundcubemail/plugins/contextmenu/default.nix | 7 - .../plugins/contextmenu_folder/default.nix | 7 - .../plugins/html5_notifier/default.nix | 7 - .../roundcubemail/plugins/ident_switch/default.nix | 7 - .../plugins/message_highlight/default.nix | 7 - .../plugins/thunderbird_labels/default.nix | 7 - pkgs/webapps/spip/default.nix | 32 - pkgs/webapps/spip/spip_ldap_patch.patch | 60 - pkgs/webapps/spip/spip_mes_options.php | 18 - pkgs/webapps/surfer/default.nix | 12 - pkgs/webapps/surfer/node-packages.nix | 2437 ---- pkgs/webapps/taskwarrior-web/Gemfile.lock | 139 - pkgs/webapps/taskwarrior-web/default.nix | 22 - pkgs/webapps/taskwarrior-web/fixes.patch | 56 - pkgs/webapps/taskwarrior-web/gemset.nix | 567 - pkgs/webapps/taskwarrior-web/taskwarrior-web.json | 15 - pkgs/webapps/taskwarrior-web/thin.patch | 23 - pkgs/webapps/ttrss/default.nix | 37 - .../ttrss/plugins/af_feedmod/af_feedmod.json | 15 - pkgs/webapps/ttrss/plugins/af_feedmod/default.nix | 9 - .../ttrss/plugins/af_feedmod/type_replace.patch | 12 - .../webapps/ttrss/plugins/auth_ldap/auth-ldap.json | 15 - pkgs/webapps/ttrss/plugins/auth_ldap/default.nix | 8 - pkgs/webapps/ttrss/plugins/feediron/default.nix | 9 - pkgs/webapps/ttrss/plugins/feediron/feediron.json | 15 - .../ttrss/plugins/feediron/json_reformat.patch | 18 - .../webapps/ttrss/plugins/ff_instagram/default.nix | 8 - .../ttrss/plugins/ff_instagram/ff_instagram.json | 15 - .../ttrss/plugins/tumblr_gdpr_ua/default.nix | 8 - .../plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json | 15 - pkgs/webapps/wallabag/default.nix | 54 - pkgs/webapps/wallabag/ldap.patch | 664 - pkgs/webapps/yourls/default.nix | 28 - pkgs/webapps/yourls/plugins/ldap/default.nix | 8 - pkgs/webapps/yourls/plugins/ldap/ldap.json | 15 - pkgs/webapps/yourls/yourls.json | 15 - scripts/fetch_version | 173 - scripts/make-nur | 2 +- scripts/refresh_flakes | 71 + scripts/setup | 90 + scripts/update_flake | 18 + scripts/with_env | 27 + shell.nix | 18 - systems/backup-2/base.nix | 164 + systems/backup-2/databases/mariadb_replication.nix | 271 + .../backup-2/databases/openldap_replication.nix | 165 + .../backup-2/databases/postgresql_replication.nix | 203 + systems/backup-2/databases/redis_replication.nix | 171 + systems/backup-2/databases/utils.nix | 30 + systems/backup-2/flake.lock | 1159 ++ systems/backup-2/flake.nix | 51 + systems/backup-2/mail/relay.nix | 196 + systems/backup-2/monitoring.nix | 117 + systems/dilion/base.nix | 309 + systems/dilion/flake.lock | 695 ++ systems/dilion/flake.nix | 43 + systems/dilion/monitoring.nix | 43 + systems/dilion/ssh_ldap_regular.sh | 19 + systems/dilion/vms.nix | 200 + systems/dilion/vms/base_configuration.nix | 27 + systems/dilion/vms/base_image.nix | 98 + systems/dilion/vms/buildbot_configuration.nix | 73 + systems/eldiron/base.nix | 371 + systems/eldiron/buildbot/default.nix | 310 + systems/eldiron/coturn.nix | 73 + systems/eldiron/databases/default.nix | 56 + systems/eldiron/databases/mariadb.nix | 188 + systems/eldiron/databases/openldap/default.nix | 304 + systems/eldiron/databases/postgresql.nix | 236 + systems/eldiron/databases/redis.nix | 138 + systems/eldiron/dns.nix | 290 + systems/eldiron/duply_backup.nix | 151 + systems/eldiron/ejabberd/default.nix | 141 + systems/eldiron/ejabberd/ejabberd.yml | 231 + systems/eldiron/ejabberd/warn_xmpp_email.py | 112 + systems/eldiron/flake.lock | 2758 +++++ systems/eldiron/flake.nix | 90 + systems/eldiron/ftp.nix | 339 + systems/eldiron/ftp_sync.sh | 47 + systems/eldiron/gemini/default.nix | 50 + systems/eldiron/gemini/public/index.gmi | 70 + systems/eldiron/gitolite/default.nix | 127 + systems/eldiron/gitolite/gitolite_ldap_groups.sh | 15 + systems/eldiron/gitolite/ldap_gitolite.sh | 28 + systems/eldiron/irc.nix | 80 + systems/eldiron/mail/default.nix | 44 + systems/eldiron/mail/dovecot.nix | 348 + systems/eldiron/mail/postfix.nix | 497 + systems/eldiron/mail/rspamd.nix | 88 + systems/eldiron/mail/scan_reported_mails | 21 + systems/eldiron/mail/sieve_bin/imapsieve_copy | 8 + systems/eldiron/mail/sieve_scripts/backup.sieve | 7 + .../eldiron/mail/sieve_scripts/report_ham.sieve | 11 + .../eldiron/mail/sieve_scripts/report_spam.sieve | 3 + systems/eldiron/mail/sympa.nix | 232 + systems/eldiron/monitoring.nix | 51 + systems/eldiron/mpd.nix | 60 + systems/eldiron/pub/default.nix | 100 + systems/eldiron/pub/ldap_pub.sh | 38 + systems/eldiron/pub/restrict | 71 + systems/eldiron/pub/tmux.restrict.conf | 43 + systems/eldiron/tasks/default.nix | 384 + systems/eldiron/tasks/www/index.php | 168 + systems/eldiron/vpn/default.nix | 92 + systems/eldiron/vpn/tinc/host-down | 7 + systems/eldiron/vpn/tinc/host-up | 11 + systems/eldiron/vpn/tinc/tinc-down | 12 + systems/eldiron/vpn/tinc/tinc-up | 14 + systems/eldiron/vpn/tinc/tinc.conf | 11 + .../websites/_www/googleb6d69446ff4ca3e5.html | 1 + systems/eldiron/websites/_www/index.htm | 9 + .../eldiron/websites/_www/maintenance_immae.html | 58 + systems/eldiron/websites/_www/nossl.html | 11 + systems/eldiron/websites/assets/default.nix | 98 + systems/eldiron/websites/assets/static/favicon.png | Bin 0 -> 1734 bytes systems/eldiron/websites/assets/static/logger.png | Bin 0 -> 3340 bytes systems/eldiron/websites/assets/static/logger.txt | 3 + systems/eldiron/websites/assets/static/logo.jpg | Bin 0 -> 6931 bytes systems/eldiron/websites/assets/static/logo.txt | 7 + .../eldiron/websites/assets/static/logo_big.jpg | Bin 0 -> 16390 bytes .../eldiron/websites/assets/static/logo_big.txt | 7 + .../eldiron/websites/assets/static/logo_center.jpg | Bin 0 -> 29509 bytes .../eldiron/websites/assets/static/logo_center.txt | 8 + .../eldiron/websites/assets/static/monitoring.png | Bin 0 -> 57395 bytes .../eldiron/websites/assets/static/monitoring.txt | 3 + .../eldiron/websites/assets/static/photos/ct.jpg | Bin 0 -> 55914 bytes .../websites/assets/static/photos/fretlink.jpg | Bin 0 -> 1520106 bytes .../websites/assets/static/photos/raton.jpg | Bin 0 -> 17614 bytes systems/eldiron/websites/cloud/add-htaccess.php | 70 + systems/eldiron/websites/cloud/default.nix | 151 + systems/eldiron/websites/cloud/farm.nix | 221 + systems/eldiron/websites/commento/default.nix | 84 + systems/eldiron/websites/cryptpad/default.nix | 89 + systems/eldiron/websites/cryptpad/farm.nix | 186 + systems/eldiron/websites/dav/davical.nix | 128 + systems/eldiron/websites/dav/default.nix | 140 + systems/eldiron/websites/dav/www/index.html | 42 + systems/eldiron/websites/db/default.nix | 32 + systems/eldiron/websites/default.nix | 319 + systems/eldiron/websites/diaspora/default.nix | 224 + systems/eldiron/websites/ether/default.nix | 251 + .../websites/games/codenames/codenames.patch | 8306 +++++++++++++ .../eldiron/websites/games/codenames/default.nix | 76 + systems/eldiron/websites/games/codenames/deps.nix | 11 + .../eldiron/websites/games/codenames/elm-srcs.nix | 77 + .../eldiron/websites/games/codenames/frontend.nix | 22 + .../eldiron/websites/games/codenames/greenapid.nix | 18 + .../websites/games/codenames/greenapid.patch | 39 + .../websites/games/codenames/immae-assets.patch | 15 + .../websites/games/codenames/node-packages.nix | 7622 ++++++++++++ .../eldiron/websites/games/codenames/registry.dat | Bin 0 -> 105421 bytes systems/eldiron/websites/games/codenames/shell.nix | 50 + .../websites/games/codenames/wordlists/french.txt | 694 ++ .../websites/games/terraforming-mars/default.nix | 75 + .../games/terraforming-mars/immae-assets.patch | 13 + .../games/terraforming-mars/node-packages.nix | 4353 +++++++ .../games/terraforming-mars/terraforming-mars.nix | 39 + systems/eldiron/websites/git/cgit_js.html | 16 + systems/eldiron/websites/git/default.nix | 98 + systems/eldiron/websites/git/gitweb.nix | 124 + systems/eldiron/websites/git/mantisbt.nix | 86 + systems/eldiron/websites/im/default.nix | 118 + systems/eldiron/websites/im/www/converse.html | 57 + systems/eldiron/websites/im/www/index.html | 47 + systems/eldiron/websites/immae/matrix/client | 11 + systems/eldiron/websites/immae/matrix/server | 3 + systems/eldiron/websites/immae/production.nix | 107 + systems/eldiron/websites/immae/release.nix | 40 + .../immae/sarl/certificates/2021-certificate.crt | 23 + systems/eldiron/websites/kanboard/farm.nix | 183 + systems/eldiron/websites/mail/default.nix | 141 + systems/eldiron/websites/mail/mta-sts.nix | 42 + systems/eldiron/websites/mail/rainloop.nix | 54 + systems/eldiron/websites/mail/roundcubemail.nix | 119 + systems/eldiron/websites/mail/www/index.html | 74 + systems/eldiron/websites/mastodon/default.nix | 174 + systems/eldiron/websites/mgoblin/default.nix | 173 + systems/eldiron/websites/moomin.txt | 16 + systems/eldiron/websites/nossl/index.html | 11 + systems/eldiron/websites/peertube/default.nix | 147 + systems/eldiron/websites/performance/default.nix | 93 + systems/eldiron/websites/stats/default.nix | 51 + systems/eldiron/websites/tools/adminer.nix | 83 + systems/eldiron/websites/tools/default.nix | 547 + systems/eldiron/websites/tools/dmarc_reports.nix | 61 + .../eldiron/websites/tools/dmarc_reports/api.php | 122 + .../eldiron/websites/tools/dmarc_reports/app.js | 103 + .../websites/tools/dmarc_reports/default.css | 130 + .../websites/tools/dmarc_reports/index.html | 128 + systems/eldiron/websites/tools/dokuwiki.nix | 106 + systems/eldiron/websites/tools/grocy.nix | 48 + systems/eldiron/websites/tools/kanboard.nix | 81 + systems/eldiron/websites/tools/landing.nix | 38 + .../websites/tools/landing/ldap_password.php | 170 + .../websites/tools/landing/ldap_ssh_keys.php | 343 + systems/eldiron/websites/tools/landing/myip.php | 1 + .../websites/tools/landing/node-packages.nix | 130 + .../websites/tools/landing/yarn-packages.nix | 9357 ++++++++++++++ systems/eldiron/websites/tools/ldap.nix | 77 + systems/eldiron/websites/tools/phpbb.nix | 69 + systems/eldiron/websites/tools/rompr.nix | 86 + systems/eldiron/websites/tools/shaarli.nix | 102 + systems/eldiron/websites/tools/ttrss.nix | 167 + systems/eldiron/websites/tools/wallabag.nix | 180 + systems/eldiron/websites/tools/webhooks.nix | 25 + systems/eldiron/websites/tools/ympd.nix | 54 + systems/eldiron/websites/tools/yourls.nix | 118 + systems/eldiron/websites/visio/default.nix | 63 + systems/eldiron/websites/vpn/default.nix | 13 + systems/eldiron/websites/vpn/www/index.html | 91 + systems/eldiron/websites/vpn/www/style.css | 61 + systems/eldiron/webstats/default.nix | 80 + systems/eldiron/webstats/goaccess.conf | 100 + systems/monitoring-1/base.nix | 75 + systems/monitoring-1/flake.lock | 790 ++ systems/monitoring-1/flake.nix | 45 + systems/monitoring-1/monitoring-master.nix | 87 + systems/monitoring-1/monitoring.nix | 61 + systems/monitoring-1/monitoring/master.nix | 43 + systems/monitoring-1/monitoring/phare.nix | 20 + systems/monitoring-1/monitoring/ulminfo-fr.nix | 20 + systems/monitoring-1/status.nix | 84 + systems/monitoring-1/status/app.py | 414 + systems/monitoring-1/status_engine.nix | 123 + systems/quatresaisons/flake.lock | 767 ++ systems/quatresaisons/flake.nix | 49 + systems/zoldene/Immae.pub | 322 + systems/zoldene/base.nix | 122 + systems/zoldene/disko.nix | 87 + systems/zoldene/flake.lock | 560 + systems/zoldene/flake.nix | 29 + systems/zoldene/logging.nix | 138 + 1392 files changed, 160009 insertions(+), 138496 deletions(-) delete mode 100644 .gitconfig delete mode 100644 .gitmodules create mode 100644 deploy/flake.lock create mode 100644 deploy/flake.nix delete mode 100644 environments/default.nix delete mode 100644 environments/immae-eu.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 flakes/copanier/default.nix create mode 100644 flakes/copanier/fix_reduce.patch create mode 100644 flakes/copanier/flake.lock create mode 100644 flakes/copanier/flake.nix create mode 100644 flakes/copanier/poetry.lock create mode 100644 flakes/copanier/pyproject.toml create mode 100644 flakes/diaspora/default.nix create mode 100644 flakes/diaspora/flake.lock create mode 100644 flakes/diaspora/flake.nix create mode 100644 flakes/diaspora/gemset.nix create mode 100644 flakes/diaspora/gemset_ldap.nix create mode 100644 flakes/diaspora/ldap.patch create mode 100644 flakes/etherpad-lite/default.nix create mode 100644 flakes/etherpad-lite/etherpad_cleanup.sql create mode 100644 flakes/etherpad-lite/flake.lock create mode 100644 flakes/etherpad-lite/flake.nix create mode 100644 flakes/etherpad-lite/libreoffice_patch.diff create mode 100644 flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_adminpads/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_adminpads/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_align/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_align/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_bookmark/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_bookmark/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_colors/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_colors/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_comments_page/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_comments_page/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_cursortrace/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_cursortrace/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_embedmedia/fix.patch create mode 100644 flakes/etherpad-lite/modules/ep_embedmedia/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_embedmedia/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_font_family/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_font_family/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_font_size/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_font_size/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_headings2/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_headings2/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_immae_buttons/ep.json create mode 100644 flakes/etherpad-lite/modules/ep_immae_buttons/hooks.js create mode 100644 flakes/etherpad-lite/modules/ep_immae_buttons/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_immae_buttons/package.json create mode 100644 flakes/etherpad-lite/modules/ep_immae_buttons/static/js/main.js create mode 100644 flakes/etherpad-lite/modules/ep_immae_buttons/templates/editbarButtons.ejs create mode 100644 flakes/etherpad-lite/modules/ep_ldapauth/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_ldapauth/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_line_height/fix.patch create mode 100644 flakes/etherpad-lite/modules/ep_line_height/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_line_height/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_markdown/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_markdown/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_mypads/fix_ldap.patch create mode 100644 flakes/etherpad-lite/modules/ep_mypads/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_mypads/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_page_view/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_page_view/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_previewimages/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_previewimages/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_private_pad/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_private_pad/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_ruler/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_ruler/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_scrollto/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_scrollto/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_set_title_on_pad/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_set_title_on_pad/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_subscript_and_superscript/font.patch create mode 100644 flakes/etherpad-lite/modules/ep_subscript_and_superscript/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_subscript_and_superscript/node-packages.nix create mode 100644 flakes/etherpad-lite/modules/ep_timesliderdiff/node-packages.json create mode 100644 flakes/etherpad-lite/modules/ep_timesliderdiff/node-packages.nix create mode 100644 flakes/etherpad-lite/node-packages.nix create mode 100644 flakes/flake.lock create mode 100644 flakes/flake.nix create mode 100644 flakes/grocy/default.nix create mode 100644 flakes/grocy/flake.lock create mode 100644 flakes/grocy/flake.nix create mode 100644 flakes/grocy/php-packages.nix create mode 100644 flakes/grocy/yarn-packages.nix create mode 100644 flakes/grocy/yarn.patch create mode 100644 flakes/loginctl-linger/flake.nix create mode 100644 flakes/mastodon/default.nix create mode 100644 flakes/mastodon/flake.lock create mode 100644 flakes/mastodon/flake.nix create mode 100644 flakes/mastodon/gemset.nix create mode 100644 flakes/mastodon/yarn-packages.nix create mode 100644 flakes/mediagoblin/bower-packages.nix create mode 100644 flakes/mediagoblin/default.nix create mode 100644 flakes/mediagoblin/flake.lock create mode 100644 flakes/mediagoblin/flake.nix create mode 100644 flakes/mediagoblin/ldap_fix.py create mode 100644 flakes/mediagoblin/plugins/basicsearch/default.nix create mode 100644 flakes/multi-apache-container/flake.lock create mode 100644 flakes/multi-apache-container/flake.nix create mode 100644 flakes/mypackages/flake.lock create mode 100644 flakes/mypackages/flake.nix create mode 100644 flakes/mypackages/lib/default.nix create mode 100644 flakes/mypackages/lib/flake-parts-lib.nix create mode 100644 flakes/mypackages/lib/node-env.nix create mode 100644 flakes/mypackages/lib/private/default.nix create mode 100644 flakes/mypackages/overlays/bitlbee-discord/default.nix create mode 100644 flakes/mypackages/overlays/bitlbee/bitlbee_long_nicks.patch create mode 100644 flakes/mypackages/overlays/bitlbee/default.nix create mode 100644 flakes/mypackages/overlays/databases/mysql/default.nix create mode 100644 flakes/mypackages/overlays/databases/postgresql/default.nix create mode 100644 flakes/mypackages/overlays/default.nix create mode 100644 flakes/mypackages/overlays/gitolite/default.nix create mode 100755 flakes/mypackages/overlays/gitolite/invite create mode 100644 flakes/mypackages/overlays/gitweb/default.nix create mode 100644 flakes/mypackages/overlays/gitweb/theme/git-favicon.png create mode 100644 flakes/mypackages/overlays/gitweb/theme/git-logo.png create mode 100644 flakes/mypackages/overlays/gitweb/theme/gitweb.css create mode 100644 flakes/mypackages/overlays/gitweb/theme/gitweb.js create mode 100644 flakes/mypackages/overlays/goaccess/default.nix create mode 100644 flakes/mypackages/overlays/kanboard/default.nix create mode 100644 flakes/mypackages/overlays/morph/default.nix create mode 100644 flakes/mypackages/overlays/morph/dry-run.patch create mode 100644 flakes/mypackages/overlays/morph/verbose_nix.patch create mode 100644 flakes/mypackages/overlays/php-packages/mysqli_patch.patch create mode 100644 flakes/mypackages/overlays/postfix/default.nix create mode 100644 flakes/mypackages/overlays/taskwarrior/TW-1778_patch.diff create mode 100644 flakes/mypackages/overlays/taskwarrior/default.nix create mode 100644 flakes/mypackages/overlays/ympd/default.nix create mode 100644 flakes/mypackages/overlays/ympd/ympd-password-env.patch create mode 100644 flakes/mypackages/pkgs/bash-libs/default.nix create mode 100644 flakes/mypackages/pkgs/boinctui/default.nix create mode 100644 flakes/mypackages/pkgs/cnagios/default.nix create mode 100644 flakes/mypackages/pkgs/commento/default.nix create mode 100644 flakes/mypackages/pkgs/composer-env/default.nix create mode 100644 flakes/mypackages/pkgs/crypto/cardano-cli/default.nix create mode 100644 flakes/mypackages/pkgs/crypto/cardano/default.nix create mode 100644 flakes/mypackages/pkgs/crypto/iota-cli-app/default.nix create mode 100644 flakes/mypackages/pkgs/crypto/iota-cli-app/node-packages.nix create mode 100644 flakes/mypackages/pkgs/crypto/sia/default.nix create mode 100644 flakes/mypackages/pkgs/default.nix create mode 100644 flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/default.nix create mode 100644 flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch create mode 100644 flakes/mypackages/pkgs/flrn/default.nix create mode 100644 flakes/mypackages/pkgs/fluent-bit/default.nix create mode 100644 flakes/mypackages/pkgs/fluentd/Gemfile create mode 100644 flakes/mypackages/pkgs/fluentd/Gemfile.lock create mode 100644 flakes/mypackages/pkgs/fluentd/default.nix create mode 100644 flakes/mypackages/pkgs/fluentd/gemset.nix create mode 100644 flakes/mypackages/pkgs/gearmand/default.nix create mode 100644 flakes/mypackages/pkgs/genius/default.nix create mode 100644 flakes/mypackages/pkgs/ical2html/default.nix create mode 100644 flakes/mypackages/pkgs/monitoring-plugins/default.nix create mode 100644 flakes/mypackages/pkgs/mtop/default.nix create mode 100644 flakes/mypackages/pkgs/mutt-ics/default.nix create mode 100644 flakes/mypackages/pkgs/muttprint/0.73-4.diff.gz create mode 100644 flakes/mypackages/pkgs/muttprint/default.nix create mode 100644 flakes/mypackages/pkgs/muttprint/regex.patch create mode 100644 flakes/mypackages/pkgs/muttprint/two_edge.patch create mode 100644 flakes/mypackages/pkgs/naemon-livestatus/default.nix create mode 100644 flakes/mypackages/pkgs/naemon/default.nix create mode 100644 flakes/mypackages/pkgs/nagios-cli/default.nix create mode 100644 flakes/mypackages/pkgs/nagnu/default.nix create mode 100644 flakes/mypackages/pkgs/nb/default.nix create mode 100644 flakes/mypackages/pkgs/note/default.nix create mode 100644 flakes/mypackages/pkgs/notmuch/notmuch-python/default.nix create mode 100644 flakes/mypackages/pkgs/notmuch/notmuch-vim/default.nix create mode 100644 flakes/mypackages/pkgs/perl-ical-parser-html/default.nix create mode 100644 flakes/mypackages/pkgs/pgpid/default.nix create mode 100644 flakes/mypackages/pkgs/predixy/default.nix create mode 100644 flakes/mypackages/pkgs/proftpd/default.nix create mode 100644 flakes/mypackages/pkgs/pure-ftpd/default.nix create mode 100644 flakes/mypackages/pkgs/riotkit-do/default.nix create mode 100644 flakes/mypackages/pkgs/rrsync_sudo/default.nix create mode 100644 flakes/mypackages/pkgs/rrsync_sudo/sudo.patch create mode 100644 flakes/mypackages/pkgs/shaarli/default.nix create mode 100644 flakes/mypackages/pkgs/shaarli/shaarli_ldap.patch create mode 100644 flakes/mypackages/pkgs/signaldctl/default.nix create mode 100644 flakes/mypackages/pkgs/slang_1/default.nix create mode 100644 flakes/mypackages/pkgs/status_engine/host_perfdata.patch create mode 100644 flakes/mypackages/pkgs/status_engine/interface.nix create mode 100644 flakes/mypackages/pkgs/status_engine/interface_composer.lock create mode 100644 flakes/mypackages/pkgs/status_engine/interface_php_packages.nix create mode 100644 flakes/mypackages/pkgs/status_engine/module.nix create mode 100644 flakes/mypackages/pkgs/status_engine/worker.nix create mode 100644 flakes/mypackages/pkgs/status_engine/worker_composer.lock create mode 100644 flakes/mypackages/pkgs/status_engine/worker_php_packages.nix create mode 100644 flakes/mypackages/pkgs/telegram-history-dump/default.nix create mode 100644 flakes/mypackages/pkgs/telegramircd/default.nix create mode 100644 flakes/mypackages/pkgs/telethon_sync/default.nix create mode 100644 flakes/mypackages/pkgs/terminal-velocity/default.nix create mode 100644 flakes/mypackages/pkgs/terminal-velocity/fix_build.patch create mode 100644 flakes/mypackages/pkgs/terminal-velocity/python3_support.patch create mode 100644 flakes/mypackages/pkgs/terminal-velocity/sort_found_notes.patch create mode 100644 flakes/mypackages/pkgs/tiv/default.nix create mode 100644 flakes/mypackages/pkgs/tiv/tiv_builder.sh create mode 100644 flakes/mypackages/pkgs/twins/default.nix create mode 100644 flakes/mypackages/pkgs/umami/build-geo.patch create mode 100644 flakes/mypackages/pkgs/umami/default.nix create mode 100644 flakes/mypackages/pkgs/unicode/default.nix create mode 100644 flakes/mypackages/pkgs/upcmd/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/adminer/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/.htaccess create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/footer.html create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/header.html create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/archive.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/audio.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/authors.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bin.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/blank.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bmp.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/c.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/calc.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cd.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/copying.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cpp.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/css.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/deb.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/default.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/diff.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/doc.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/draw.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/eps.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/exe.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-home.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-open.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-page.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gif.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gzip.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/h.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/hpp.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/html.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ico.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/image.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/install.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/java.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/jpg.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/js.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/json.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/log.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/makefile.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/markdown.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/package.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pdf.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/php.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/playlist.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/png.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pres.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ps.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/psd.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/py.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rar.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rb.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/readme.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rpm.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rss.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rtf.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/script.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/source.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/sql.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tar.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tex.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/text.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tiff.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/unknown.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/vcal.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/video.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/xml.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/zip.png create mode 100644 flakes/mypackages/pkgs/webapps/apache-theme/theme/style.css create mode 100644 flakes/mypackages/pkgs/webapps/awl/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/davical/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/dokuwiki/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/dokuwiki/plugins/farmer.nix create mode 100644 flakes/mypackages/pkgs/webapps/dokuwiki/plugins/todo.nix create mode 100644 flakes/mypackages/pkgs/webapps/infcloud/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/infcloud/infcloud_config.js create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report.php.diff create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report_page.php.diff create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add.php.diff create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/slack/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff create mode 100644 flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/audioplayer.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/bookmarks.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/calendar.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/carnet.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/contacts.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/cookbook.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/deck.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/drawio.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/external.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/extract.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/files_markdown.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/files_mindmap.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/files_readmemd.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/flowupload.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxedit.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxpod.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/groupfolders.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/impersonate.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/integration_dropbox.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/keeweb.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/maps.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/metadata.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/music.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/notes.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/ocsms.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/onlyoffice.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/passman.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/polls.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/side_menu.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/social.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/spreed.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/talk_matterbridge.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/apps/tasks.nix create mode 100644 flakes/mypackages/pkgs/webapps/nextcloud/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/extensions/adduser.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/extensions/autosubscribe.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/extensions/mailinglist.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/extensions/markdown.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/extensions/mchat.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/extensions/monitoranswers.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpbb/langs/fr.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpldapadmin/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-align-button.patch create mode 100644 flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-fix-password.patch create mode 100644 flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch create mode 100644 flakes/mypackages/pkgs/webapps/rompr/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/spip/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/spip/spip_ldap_patch.patch create mode 100644 flakes/mypackages/pkgs/webapps/spip/spip_mes_options.php create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/wallabag/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/wallabag/ldap.patch create mode 100644 flakes/mypackages/pkgs/webapps/yourls/default.nix create mode 100644 flakes/mypackages/pkgs/webapps/yourls/plugins/ldap/default.nix create mode 100644 flakes/naemon/flake.nix create mode 100644 flakes/naemon/naemon.cfg create mode 100644 flakes/openfoodnetwork/default.nix create mode 100644 flakes/openfoodnetwork/gemset.nix create mode 100644 flakes/private/buildbot/buildslist/bower.nix create mode 100644 flakes/private/buildbot/buildslist/default.nix create mode 100644 flakes/private/buildbot/buildslist/yarn-packages.nix create mode 100644 flakes/private/buildbot/common/build_helpers.py create mode 100644 flakes/private/buildbot/common/libvirt.py create mode 100644 flakes/private/buildbot/common/master.cfg create mode 100644 flakes/private/buildbot/flake.lock create mode 100644 flakes/private/buildbot/flake.nix create mode 100644 flakes/private/buildbot/test_project/__init__.py create mode 100644 flakes/private/chatons/flake.lock create mode 100644 flakes/private/chatons/flake.nix create mode 100644 flakes/private/environment-dummy/flake.nix create mode 100644 flakes/private/environment-dummy/ldap.conf create mode 100644 flakes/private/environment-dummy/vars.yml create mode 100644 flakes/private/environment/flake.nix create mode 100755 flakes/private/mail-relay/filter-rewrite-from.py create mode 100644 flakes/private/mail-relay/flake.lock create mode 100644 flakes/private/mail-relay/flake.nix create mode 100644 flakes/private/milters/flake.lock create mode 100644 flakes/private/milters/flake.nix create mode 100755 flakes/private/milters/verify_from.py create mode 100644 flakes/private/monitoring/flake.lock create mode 100644 flakes/private/monitoring/flake.nix create mode 100644 flakes/private/monitoring/myplugins.nix create mode 100644 flakes/private/monitoring/nagios-cli.cfg create mode 100644 flakes/private/monitoring/objects_common.nix create mode 100755 flakes/private/monitoring/plugins/check_backup_age create mode 100755 flakes/private/monitoring/plugins/check_bandwidth create mode 100755 flakes/private/monitoring/plugins/check_command create mode 100755 flakes/private/monitoring/plugins/check_emails create mode 100755 flakes/private/monitoring/plugins/check_eriomem create mode 100755 flakes/private/monitoring/plugins/check_ftp_database create mode 100755 flakes/private/monitoring/plugins/check_git create mode 100755 flakes/private/monitoring/plugins/check_imap_connection create mode 100755 flakes/private/monitoring/plugins/check_last_file_date create mode 100755 flakes/private/monitoring/plugins/check_mem.sh create mode 100755 flakes/private/monitoring/plugins/check_mysql_replication create mode 100755 flakes/private/monitoring/plugins/check_openldap_replication create mode 100755 flakes/private/monitoring/plugins/check_ovh_sms create mode 100755 flakes/private/monitoring/plugins/check_postgres_database_count create mode 100755 flakes/private/monitoring/plugins/check_postgres_replication create mode 100755 flakes/private/monitoring/plugins/check_redis_replication create mode 100755 flakes/private/monitoring/plugins/check_zfs_snapshot create mode 100755 flakes/private/monitoring/plugins/notify_by_apprise create mode 100755 flakes/private/monitoring/plugins/notify_by_email create mode 100755 flakes/private/monitoring/plugins/notify_by_slack create mode 100755 flakes/private/monitoring/plugins/send_nrdp.sh create mode 100755 flakes/private/monitoring/send_mails create mode 100644 flakes/private/monitoring/to_objects.nix create mode 100644 flakes/private/openldap/flake.nix create mode 100644 flakes/private/openldap/immae.ldif create mode 100644 flakes/private/openldap/immae.schema create mode 100644 flakes/private/php/flake.lock create mode 100644 flakes/private/php/flake.nix create mode 100644 flakes/private/ssh/flake.lock create mode 100644 flakes/private/ssh/flake.nix create mode 100755 flakes/private/ssh/ldap_authorized_keys.sh create mode 100644 flakes/private/system/flake.lock create mode 100644 flakes/private/system/flake.nix create mode 100644 flakes/private/system/public_keys/Immae.pub create mode 100644 flakes/surfer/default.nix create mode 100644 flakes/surfer/flake.lock create mode 100644 flakes/surfer/flake.nix create mode 100644 flakes/surfer/node-packages.nix create mode 100644 flakes/taskwarrior-web/Gemfile.lock create mode 100644 flakes/taskwarrior-web/default.nix create mode 100644 flakes/taskwarrior-web/fixes.patch create mode 100644 flakes/taskwarrior-web/flake.lock create mode 100644 flakes/taskwarrior-web/flake.nix create mode 100644 flakes/taskwarrior-web/gemset.nix create mode 100644 flakes/taskwarrior-web/thin.patch delete mode 100644 lib/default.nix delete mode 100644 lib/flake-compat-patched.nix delete mode 100644 lib/flake-compat.nix delete mode 100644 lib/node-env.nix delete mode 100644 lib/private/default.nix 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 delete mode 100644 nix/README.md delete mode 100644 nix/sources.json delete mode 100644 nix/sources.nix delete mode 100644 nixops/.gitignore delete mode 100644 nixops/.sops.yaml delete mode 100644 nixops/Makefile delete mode 100644 nixops/default.nix delete mode 100644 nixops/public_keys/Immae.pub delete mode 100755 nixops/scripts/setup delete mode 100755 nixops/scripts/with_env delete mode 160000 nixops/secrets delete mode 100644 overlays/bitlbee-discord/default.nix delete mode 100644 overlays/bitlbee/bitlbee_long_nicks.patch delete mode 100644 overlays/bitlbee/default.nix delete mode 100644 overlays/bonfire/default.nix delete mode 100644 overlays/bugwarrior/default.nix delete mode 100644 overlays/bugwarrior/mantisbt.patch delete mode 100644 overlays/bundix/default.nix delete mode 100644 overlays/databases/mysql/default.nix delete mode 100644 overlays/databases/postgresql/default.nix delete mode 100644 overlays/default.nix delete mode 100644 overlays/doing/default.nix delete mode 100644 overlays/dwm/default.nix delete mode 100644 overlays/dwm/dwm_config.h delete mode 100644 overlays/elinks/default.nix delete mode 100644 overlays/elinks/elinks.json delete mode 100644 overlays/gitolite/default.nix delete mode 100755 overlays/gitolite/invite delete mode 100644 overlays/gitweb/default.nix delete mode 100644 overlays/gitweb/theme/git-favicon.png delete mode 100644 overlays/gitweb/theme/git-logo.png delete mode 100644 overlays/gitweb/theme/gitweb.css delete mode 100644 overlays/gitweb/theme/gitweb.js delete mode 100644 overlays/goaccess/default.nix delete mode 100644 overlays/kanboard/default.nix delete mode 100644 overlays/khal/default.nix delete mode 100644 overlays/ledger/default.nix delete mode 100644 overlays/lesspipe/default.nix delete mode 100644 overlays/morph/default.nix delete mode 100644 overlays/morph/dry-run.patch delete mode 100644 overlays/morph/verbose_nix.patch delete mode 100644 overlays/neomutt/default.nix delete mode 100644 overlays/neomutt/tx.patch delete mode 100644 overlays/nix-direnv/default.nix delete mode 100644 overlays/nixops/default.nix delete mode 100644 overlays/nixops/fix_glibc.patch delete mode 100644 overlays/nixops/hetzner_cloud.patch delete mode 100644 overlays/pass/default.nix delete mode 100644 overlays/pass/pass-fix-pass-init.patch delete mode 100644 overlays/pelican/default.nix delete mode 100644 overlays/php-packages/default.nix delete mode 100644 overlays/php-packages/mysqli_patch.patch delete mode 100644 overlays/postfix/default.nix delete mode 100644 overlays/procps-ng/default.nix delete mode 100644 overlays/python-packages/buildbot.nix delete mode 100644 overlays/python-packages/default.nix delete mode 100644 overlays/sc-im/default.nix delete mode 100644 overlays/shaarli/default.nix delete mode 100644 overlays/shaarli/shaarli_ldap.patch delete mode 100644 overlays/slrn/default.nix delete mode 100644 overlays/taskwarrior/TW-1778_patch.diff delete mode 100644 overlays/taskwarrior/default.nix delete mode 100644 overlays/vcsh/default.nix delete mode 100644 overlays/weechat/default.nix delete mode 100644 overlays/ympd/default.nix delete mode 100644 overlays/ympd/ympd-password-env.patch delete mode 100644 overlays/ympd/ympd.json delete mode 100644 pkgs/boinctui/default.nix delete mode 100644 pkgs/cnagios/cnagios.json delete mode 100644 pkgs/cnagios/default.nix delete mode 100644 pkgs/commento/default.nix delete mode 100644 pkgs/composer-env/default.nix delete mode 100644 pkgs/crypto/cardano-cli/default.nix delete mode 100644 pkgs/crypto/cardano/daedalus.json delete mode 100644 pkgs/crypto/cardano/default.nix delete mode 100644 pkgs/crypto/iota-cli-app/default.nix delete mode 100644 pkgs/crypto/iota-cli-app/iota-cli-app.json delete mode 100644 pkgs/crypto/iota-cli-app/node-packages.nix delete mode 100644 pkgs/crypto/sia/default.nix delete mode 100644 pkgs/default.nix delete mode 100644 pkgs/dovecot/plugins/deleted_to_trash/default.nix delete mode 100644 pkgs/dovecot/plugins/deleted_to_trash/dovecot-deleted_to_trash.json delete mode 100644 pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch delete mode 100644 pkgs/flrn/default.nix delete mode 100644 pkgs/flrn/flrn.json delete mode 100644 pkgs/gearmand/default.nix delete mode 100644 pkgs/genius/default.nix delete mode 100644 pkgs/monitoring-plugins/default.nix delete mode 100644 pkgs/mtop/default.nix delete mode 100644 pkgs/mutt-ics/default.nix delete mode 100644 pkgs/mutt-ics/mutt-ics.json delete mode 100644 pkgs/muttprint/0.73-4.diff.gz delete mode 100644 pkgs/muttprint/default.nix delete mode 100644 pkgs/muttprint/regex.patch delete mode 100644 pkgs/muttprint/two_edge.patch delete mode 100644 pkgs/naemon-livestatus/default.nix delete mode 100644 pkgs/naemon-livestatus/naemon-livestatus.json delete mode 100644 pkgs/naemon/default.nix delete mode 100644 pkgs/naemon/naemon.json delete mode 100644 pkgs/nagios-cli/default.nix delete mode 100644 pkgs/nagios-cli/nagios-cli.json delete mode 100644 pkgs/nagnu/default.nix delete mode 100644 pkgs/nagnu/nagnu.json delete mode 100644 pkgs/nb/default.nix delete mode 100644 pkgs/note/default.nix delete mode 100644 pkgs/notmuch/notmuch-python/default.nix delete mode 100644 pkgs/notmuch/notmuch-vim/default.nix delete mode 100644 pkgs/pgloader/default.nix delete mode 100644 pkgs/predixy/default.nix delete mode 100644 pkgs/predixy/predixy.json delete mode 100644 pkgs/proftpd/default.nix delete mode 100644 pkgs/pure-ftpd/default.nix delete mode 100644 pkgs/python-packages/blivet/default.nix delete mode 100644 pkgs/python-packages/blivet/fix_path.patch delete mode 100644 pkgs/python-packages/blivet/poetry.lock delete mode 100644 pkgs/python-packages/blivet/pyproject.toml delete mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/bower.nix delete mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/default.nix delete mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix delete mode 100644 pkgs/python-packages/buildbot/plugins/default.nix delete mode 100644 pkgs/python-packages/default.nix delete mode 100644 pkgs/python-packages/pymilter.nix delete mode 100644 pkgs/python-packages/wokkel.nix delete mode 100644 pkgs/rrsync_sudo/default.nix delete mode 100644 pkgs/rrsync_sudo/sudo.patch delete mode 100644 pkgs/signaldctl/default.nix delete mode 100644 pkgs/slang_1/default.nix delete mode 100644 pkgs/status_engine/host_perfdata.patch delete mode 100644 pkgs/status_engine/interface.nix delete mode 100644 pkgs/status_engine/interface_composer.lock delete mode 100644 pkgs/status_engine/interface_php_packages.nix delete mode 100644 pkgs/status_engine/module.json delete mode 100644 pkgs/status_engine/module.nix delete mode 100644 pkgs/status_engine/worker.json delete mode 100644 pkgs/status_engine/worker.nix delete mode 100644 pkgs/status_engine/worker_composer.lock delete mode 100644 pkgs/status_engine/worker_php_packages.nix delete mode 100644 pkgs/telegram-history-dump/default.nix delete mode 100644 pkgs/telegram-history-dump/telegram-history-dump.json delete mode 100644 pkgs/telegramircd/default.nix delete mode 100644 pkgs/telegramircd/telegramircd.json delete mode 100644 pkgs/telethon_sync/default.nix delete mode 100644 pkgs/terminal-velocity/default.nix delete mode 100644 pkgs/terminal-velocity/fix_build.patch delete mode 100644 pkgs/terminal-velocity/python3_support.patch delete mode 100644 pkgs/terminal-velocity/sort_found_notes.patch delete mode 100644 pkgs/tiv/default.nix delete mode 100644 pkgs/tiv/tiv_builder.sh delete mode 100644 pkgs/twins/default.nix delete mode 100644 pkgs/umami/build-geo.patch delete mode 100644 pkgs/umami/default.nix delete mode 100644 pkgs/unicode/default.nix delete mode 100644 pkgs/webapps/adminer/default.nix delete mode 100644 pkgs/webapps/apache-theme/default.nix delete mode 100644 pkgs/webapps/apache-theme/theme/.htaccess delete mode 100644 pkgs/webapps/apache-theme/theme/footer.html delete mode 100644 pkgs/webapps/apache-theme/theme/header.html delete mode 100644 pkgs/webapps/apache-theme/theme/icons/archive.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/audio.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/authors.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/bin.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/blank.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/bmp.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/c.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/calc.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/cd.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/copying.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/cpp.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/css.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/deb.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/default.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/diff.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/doc.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/draw.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/eps.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/exe.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-home.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-open.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-page.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-parent.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/folder.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/gif.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/gzip.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/h.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/hpp.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/html.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/ico.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/image.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/install.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/java.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/jpg.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/js.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/json.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/log.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/makefile.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/markdown.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/package.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/pdf.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/php.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/playlist.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/png.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/pres.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/ps.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/psd.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/py.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/rar.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/rb.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/readme.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/rpm.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/rss.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/rtf.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/script.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/source.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/sql.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/tar.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/tex.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/text.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/tiff.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/unknown.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/vcal.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/video.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/xml.png delete mode 100644 pkgs/webapps/apache-theme/theme/icons/zip.png delete mode 100644 pkgs/webapps/apache-theme/theme/style.css delete mode 100644 pkgs/webapps/awl/default.nix delete mode 100644 pkgs/webapps/davical/default.nix delete mode 100644 pkgs/webapps/default.nix delete mode 100644 pkgs/webapps/diaspora/default.nix delete mode 100644 pkgs/webapps/diaspora/diaspora.json delete mode 100644 pkgs/webapps/diaspora/gemset.nix delete mode 100644 pkgs/webapps/diaspora/gemset_ldap.nix delete mode 100644 pkgs/webapps/diaspora/ldap.patch delete mode 100644 pkgs/webapps/dokuwiki/default.nix delete mode 100644 pkgs/webapps/dokuwiki/dokuwiki.json delete mode 100644 pkgs/webapps/dokuwiki/plugins/farmer.nix delete mode 100644 pkgs/webapps/dokuwiki/plugins/todo.nix delete mode 100644 pkgs/webapps/etherpad-lite/default.nix delete mode 100644 pkgs/webapps/etherpad-lite/etherpad-lite.json delete mode 100644 pkgs/webapps/etherpad-lite/libreoffice_patch.diff delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_adminpads/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_adminpads/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_align/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_align/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_bookmark/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_bookmark/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_clear_formatting/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_clear_formatting/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_colors/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_colors/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_comments_page/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_comments_page/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_cursortrace/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_cursortrace/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_delete_empty_pads/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_delete_empty_pads/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_embedmedia/fix.patch delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_embedmedia/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_embedmedia/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_family/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_family/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_size/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_size/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_headings2/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_headings2/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_immae_buttons/ep.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_immae_buttons/hooks.js delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_immae_buttons/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_immae_buttons/package.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_immae_buttons/static/js/main.js delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_immae_buttons/templates/editbarButtons.ejs delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ldapauth/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ldapauth/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_line_height/fix.patch delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_line_height/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_line_height/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_markdown/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_markdown/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_mypads/fix_ldap.patch delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_mypads/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_mypads/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_page_view/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_page_view/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_previewimages/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_previewimages/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_private_pad/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_private_pad/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ruler/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ruler/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_scrollto/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_scrollto/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_set_title_on_pad/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_set_title_on_pad/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_subscript_and_superscript/font.patch delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_subscript_and_superscript/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_subscript_and_superscript/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_timesliderdiff/node-packages.json delete mode 100644 pkgs/webapps/etherpad-lite/modules/ep_timesliderdiff/node-packages.nix delete mode 100644 pkgs/webapps/etherpad-lite/node-packages.nix delete mode 100644 pkgs/webapps/grocy/default.nix delete mode 100644 pkgs/webapps/grocy/grocy.json delete mode 100644 pkgs/webapps/grocy/php-packages.nix delete mode 100644 pkgs/webapps/grocy/yarn-packages.nix delete mode 100644 pkgs/webapps/grocy/yarn.patch delete mode 100644 pkgs/webapps/infcloud/default.nix delete mode 100644 pkgs/webapps/infcloud/infcloud_config.js delete mode 100644 pkgs/webapps/mantisbt_2/bug_report.php.diff delete mode 100644 pkgs/webapps/mantisbt_2/bug_report_page.php.diff delete mode 100644 pkgs/webapps/mantisbt_2/bugnote_add.php.diff delete mode 100644 pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff delete mode 100644 pkgs/webapps/mantisbt_2/default.nix delete mode 100644 pkgs/webapps/mantisbt_2/plugins/slack/default.nix delete mode 100644 pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff delete mode 100644 pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix delete mode 100644 pkgs/webapps/mastodon/default.nix delete mode 100644 pkgs/webapps/mastodon/gemset.nix delete mode 100644 pkgs/webapps/mastodon/mastodon.json delete mode 100644 pkgs/webapps/mastodon/yarn-packages.nix delete mode 100644 pkgs/webapps/mediagoblin/bower-packages.nix delete mode 100644 pkgs/webapps/mediagoblin/default.nix delete mode 100644 pkgs/webapps/mediagoblin/ldap_fix.py delete mode 100644 pkgs/webapps/mediagoblin/plugins/basicsearch/default.nix delete mode 100644 pkgs/webapps/mediagoblin/tempita.json delete mode 100644 pkgs/webapps/nextcloud/apps/apporder.nix delete mode 100644 pkgs/webapps/nextcloud/apps/audioplayer.nix delete mode 100644 pkgs/webapps/nextcloud/apps/bookmarks.nix delete mode 100644 pkgs/webapps/nextcloud/apps/calendar.nix delete mode 100644 pkgs/webapps/nextcloud/apps/carnet.nix delete mode 100644 pkgs/webapps/nextcloud/apps/circles.nix delete mode 100644 pkgs/webapps/nextcloud/apps/contacts.nix delete mode 100644 pkgs/webapps/nextcloud/apps/cookbook.nix delete mode 100644 pkgs/webapps/nextcloud/apps/deck.nix delete mode 100644 pkgs/webapps/nextcloud/apps/extract.nix delete mode 100644 pkgs/webapps/nextcloud/apps/files_markdown.nix delete mode 100644 pkgs/webapps/nextcloud/apps/files_readmemd.nix delete mode 100644 pkgs/webapps/nextcloud/apps/flowupload.nix delete mode 100644 pkgs/webapps/nextcloud/apps/gpxedit.nix delete mode 100644 pkgs/webapps/nextcloud/apps/gpxpod.nix delete mode 100644 pkgs/webapps/nextcloud/apps/impersonate.nix delete mode 100644 pkgs/webapps/nextcloud/apps/keeweb.nix delete mode 100644 pkgs/webapps/nextcloud/apps/maps.nix delete mode 100644 pkgs/webapps/nextcloud/apps/metadata.nix delete mode 100644 pkgs/webapps/nextcloud/apps/music.nix delete mode 100644 pkgs/webapps/nextcloud/apps/notes.nix delete mode 100644 pkgs/webapps/nextcloud/apps/ocsms.nix delete mode 100644 pkgs/webapps/nextcloud/apps/passman.nix delete mode 100644 pkgs/webapps/nextcloud/apps/polls.nix delete mode 100644 pkgs/webapps/nextcloud/apps/social.nix delete mode 100644 pkgs/webapps/nextcloud/apps/spreed.nix delete mode 100644 pkgs/webapps/nextcloud/apps/tasks.nix delete mode 100644 pkgs/webapps/nextcloud/default.nix delete mode 100644 pkgs/webapps/phpbb/default.nix delete mode 100644 pkgs/webapps/phpbb/extensions/adduser.nix delete mode 100644 pkgs/webapps/phpbb/extensions/autosubscribe.nix delete mode 100644 pkgs/webapps/phpbb/extensions/mailinglist.nix delete mode 100644 pkgs/webapps/phpbb/extensions/markdown.nix delete mode 100644 pkgs/webapps/phpbb/extensions/mchat.nix delete mode 100644 pkgs/webapps/phpbb/extensions/monitoranswers.nix delete mode 100644 pkgs/webapps/phpbb/langs/fr.nix delete mode 100644 pkgs/webapps/phpldapadmin/default.nix delete mode 100644 pkgs/webapps/phpldapadmin/ldap-align-button.patch delete mode 100644 pkgs/webapps/phpldapadmin/ldap-fix-password.patch delete mode 100644 pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch delete mode 100644 pkgs/webapps/rompr/default.nix delete mode 100644 pkgs/webapps/rompr/rompr.json delete mode 100644 pkgs/webapps/roundcubemail/add_all.patch delete mode 100644 pkgs/webapps/roundcubemail/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/carddav/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix delete mode 100644 pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix delete mode 100644 pkgs/webapps/spip/default.nix delete mode 100644 pkgs/webapps/spip/spip_ldap_patch.patch delete mode 100644 pkgs/webapps/spip/spip_mes_options.php delete mode 100644 pkgs/webapps/surfer/default.nix delete mode 100644 pkgs/webapps/surfer/node-packages.nix delete mode 100644 pkgs/webapps/taskwarrior-web/Gemfile.lock delete mode 100644 pkgs/webapps/taskwarrior-web/default.nix delete mode 100644 pkgs/webapps/taskwarrior-web/fixes.patch delete mode 100644 pkgs/webapps/taskwarrior-web/gemset.nix delete mode 100644 pkgs/webapps/taskwarrior-web/taskwarrior-web.json delete mode 100644 pkgs/webapps/taskwarrior-web/thin.patch delete mode 100644 pkgs/webapps/ttrss/default.nix delete mode 100644 pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json delete mode 100644 pkgs/webapps/ttrss/plugins/af_feedmod/default.nix delete mode 100644 pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch delete mode 100644 pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json delete mode 100644 pkgs/webapps/ttrss/plugins/auth_ldap/default.nix delete mode 100644 pkgs/webapps/ttrss/plugins/feediron/default.nix delete mode 100644 pkgs/webapps/ttrss/plugins/feediron/feediron.json delete mode 100644 pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch delete mode 100644 pkgs/webapps/ttrss/plugins/ff_instagram/default.nix delete mode 100644 pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json delete mode 100644 pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix delete mode 100644 pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json delete mode 100644 pkgs/webapps/wallabag/default.nix delete mode 100644 pkgs/webapps/wallabag/ldap.patch delete mode 100644 pkgs/webapps/yourls/default.nix delete mode 100644 pkgs/webapps/yourls/plugins/ldap/default.nix delete mode 100644 pkgs/webapps/yourls/plugins/ldap/ldap.json delete mode 100644 pkgs/webapps/yourls/yourls.json delete mode 100755 scripts/fetch_version create mode 100755 scripts/refresh_flakes create mode 100755 scripts/setup create mode 100755 scripts/update_flake create mode 100755 scripts/with_env delete mode 100644 shell.nix create mode 100644 systems/backup-2/base.nix create mode 100644 systems/backup-2/databases/mariadb_replication.nix create mode 100644 systems/backup-2/databases/openldap_replication.nix create mode 100644 systems/backup-2/databases/postgresql_replication.nix create mode 100644 systems/backup-2/databases/redis_replication.nix create mode 100644 systems/backup-2/databases/utils.nix create mode 100644 systems/backup-2/flake.lock create mode 100644 systems/backup-2/flake.nix create mode 100644 systems/backup-2/mail/relay.nix create mode 100644 systems/backup-2/monitoring.nix create mode 100644 systems/dilion/base.nix create mode 100644 systems/dilion/flake.lock create mode 100644 systems/dilion/flake.nix create mode 100644 systems/dilion/monitoring.nix create mode 100644 systems/dilion/ssh_ldap_regular.sh create mode 100644 systems/dilion/vms.nix create mode 100644 systems/dilion/vms/base_configuration.nix create mode 100644 systems/dilion/vms/base_image.nix create mode 100644 systems/dilion/vms/buildbot_configuration.nix create mode 100644 systems/eldiron/base.nix create mode 100644 systems/eldiron/buildbot/default.nix create mode 100644 systems/eldiron/coturn.nix create mode 100644 systems/eldiron/databases/default.nix create mode 100644 systems/eldiron/databases/mariadb.nix create mode 100644 systems/eldiron/databases/openldap/default.nix create mode 100644 systems/eldiron/databases/postgresql.nix create mode 100644 systems/eldiron/databases/redis.nix create mode 100644 systems/eldiron/dns.nix create mode 100644 systems/eldiron/duply_backup.nix create mode 100644 systems/eldiron/ejabberd/default.nix create mode 100644 systems/eldiron/ejabberd/ejabberd.yml create mode 100755 systems/eldiron/ejabberd/warn_xmpp_email.py create mode 100644 systems/eldiron/flake.lock create mode 100644 systems/eldiron/flake.nix create mode 100644 systems/eldiron/ftp.nix create mode 100755 systems/eldiron/ftp_sync.sh create mode 100644 systems/eldiron/gemini/default.nix create mode 100644 systems/eldiron/gemini/public/index.gmi create mode 100644 systems/eldiron/gitolite/default.nix create mode 100755 systems/eldiron/gitolite/gitolite_ldap_groups.sh create mode 100644 systems/eldiron/gitolite/ldap_gitolite.sh create mode 100644 systems/eldiron/irc.nix create mode 100644 systems/eldiron/mail/default.nix create mode 100644 systems/eldiron/mail/dovecot.nix create mode 100644 systems/eldiron/mail/postfix.nix create mode 100644 systems/eldiron/mail/rspamd.nix create mode 100755 systems/eldiron/mail/scan_reported_mails create mode 100755 systems/eldiron/mail/sieve_bin/imapsieve_copy create mode 100644 systems/eldiron/mail/sieve_scripts/backup.sieve create mode 100644 systems/eldiron/mail/sieve_scripts/report_ham.sieve create mode 100644 systems/eldiron/mail/sieve_scripts/report_spam.sieve create mode 100644 systems/eldiron/mail/sympa.nix create mode 100644 systems/eldiron/monitoring.nix create mode 100644 systems/eldiron/mpd.nix create mode 100644 systems/eldiron/pub/default.nix create mode 100644 systems/eldiron/pub/ldap_pub.sh create mode 100644 systems/eldiron/pub/restrict create mode 100644 systems/eldiron/pub/tmux.restrict.conf create mode 100644 systems/eldiron/tasks/default.nix create mode 100644 systems/eldiron/tasks/www/index.php create mode 100644 systems/eldiron/vpn/default.nix create mode 100755 systems/eldiron/vpn/tinc/host-down create mode 100755 systems/eldiron/vpn/tinc/host-up create mode 100755 systems/eldiron/vpn/tinc/tinc-down create mode 100755 systems/eldiron/vpn/tinc/tinc-up create mode 100644 systems/eldiron/vpn/tinc/tinc.conf create mode 100644 systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html create mode 100644 systems/eldiron/websites/_www/index.htm create mode 100644 systems/eldiron/websites/_www/maintenance_immae.html create mode 100644 systems/eldiron/websites/_www/nossl.html create mode 100644 systems/eldiron/websites/assets/default.nix create mode 100644 systems/eldiron/websites/assets/static/favicon.png create mode 100644 systems/eldiron/websites/assets/static/logger.png create mode 100644 systems/eldiron/websites/assets/static/logger.txt create mode 100644 systems/eldiron/websites/assets/static/logo.jpg create mode 100644 systems/eldiron/websites/assets/static/logo.txt create mode 100644 systems/eldiron/websites/assets/static/logo_big.jpg create mode 100644 systems/eldiron/websites/assets/static/logo_big.txt create mode 100644 systems/eldiron/websites/assets/static/logo_center.jpg create mode 100644 systems/eldiron/websites/assets/static/logo_center.txt create mode 100644 systems/eldiron/websites/assets/static/monitoring.png create mode 100644 systems/eldiron/websites/assets/static/monitoring.txt create mode 100644 systems/eldiron/websites/assets/static/photos/ct.jpg create mode 100644 systems/eldiron/websites/assets/static/photos/fretlink.jpg create mode 100644 systems/eldiron/websites/assets/static/photos/raton.jpg create mode 100644 systems/eldiron/websites/cloud/add-htaccess.php create mode 100644 systems/eldiron/websites/cloud/default.nix create mode 100644 systems/eldiron/websites/cloud/farm.nix create mode 100644 systems/eldiron/websites/commento/default.nix create mode 100644 systems/eldiron/websites/cryptpad/default.nix create mode 100644 systems/eldiron/websites/cryptpad/farm.nix create mode 100644 systems/eldiron/websites/dav/davical.nix create mode 100644 systems/eldiron/websites/dav/default.nix create mode 100644 systems/eldiron/websites/dav/www/index.html create mode 100644 systems/eldiron/websites/db/default.nix create mode 100644 systems/eldiron/websites/default.nix create mode 100644 systems/eldiron/websites/diaspora/default.nix create mode 100644 systems/eldiron/websites/ether/default.nix create mode 100644 systems/eldiron/websites/games/codenames/codenames.patch create mode 100644 systems/eldiron/websites/games/codenames/default.nix create mode 100644 systems/eldiron/websites/games/codenames/deps.nix create mode 100644 systems/eldiron/websites/games/codenames/elm-srcs.nix create mode 100644 systems/eldiron/websites/games/codenames/frontend.nix create mode 100644 systems/eldiron/websites/games/codenames/greenapid.nix create mode 100644 systems/eldiron/websites/games/codenames/greenapid.patch create mode 100644 systems/eldiron/websites/games/codenames/immae-assets.patch create mode 100644 systems/eldiron/websites/games/codenames/node-packages.nix create mode 100644 systems/eldiron/websites/games/codenames/registry.dat create mode 100644 systems/eldiron/websites/games/codenames/shell.nix create mode 100644 systems/eldiron/websites/games/codenames/wordlists/french.txt create mode 100644 systems/eldiron/websites/games/terraforming-mars/default.nix create mode 100644 systems/eldiron/websites/games/terraforming-mars/immae-assets.patch create mode 100644 systems/eldiron/websites/games/terraforming-mars/node-packages.nix create mode 100644 systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix create mode 100644 systems/eldiron/websites/git/cgit_js.html create mode 100644 systems/eldiron/websites/git/default.nix create mode 100644 systems/eldiron/websites/git/gitweb.nix create mode 100644 systems/eldiron/websites/git/mantisbt.nix create mode 100644 systems/eldiron/websites/im/default.nix create mode 100644 systems/eldiron/websites/im/www/converse.html create mode 100644 systems/eldiron/websites/im/www/index.html create mode 100644 systems/eldiron/websites/immae/matrix/client create mode 100644 systems/eldiron/websites/immae/matrix/server create mode 100644 systems/eldiron/websites/immae/production.nix create mode 100644 systems/eldiron/websites/immae/release.nix create mode 100644 systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt create mode 100644 systems/eldiron/websites/kanboard/farm.nix create mode 100644 systems/eldiron/websites/mail/default.nix create mode 100644 systems/eldiron/websites/mail/mta-sts.nix create mode 100644 systems/eldiron/websites/mail/rainloop.nix create mode 100644 systems/eldiron/websites/mail/roundcubemail.nix create mode 100644 systems/eldiron/websites/mail/www/index.html create mode 100644 systems/eldiron/websites/mastodon/default.nix create mode 100644 systems/eldiron/websites/mgoblin/default.nix create mode 100644 systems/eldiron/websites/moomin.txt create mode 100644 systems/eldiron/websites/nossl/index.html create mode 100644 systems/eldiron/websites/peertube/default.nix create mode 100644 systems/eldiron/websites/performance/default.nix create mode 100644 systems/eldiron/websites/stats/default.nix create mode 100644 systems/eldiron/websites/tools/adminer.nix create mode 100644 systems/eldiron/websites/tools/default.nix create mode 100644 systems/eldiron/websites/tools/dmarc_reports.nix create mode 100644 systems/eldiron/websites/tools/dmarc_reports/api.php create mode 100644 systems/eldiron/websites/tools/dmarc_reports/app.js create mode 100644 systems/eldiron/websites/tools/dmarc_reports/default.css create mode 100644 systems/eldiron/websites/tools/dmarc_reports/index.html create mode 100644 systems/eldiron/websites/tools/dokuwiki.nix create mode 100644 systems/eldiron/websites/tools/grocy.nix create mode 100644 systems/eldiron/websites/tools/kanboard.nix create mode 100644 systems/eldiron/websites/tools/landing.nix create mode 100644 systems/eldiron/websites/tools/landing/ldap_password.php create mode 100644 systems/eldiron/websites/tools/landing/ldap_ssh_keys.php create mode 100644 systems/eldiron/websites/tools/landing/myip.php create mode 100644 systems/eldiron/websites/tools/landing/node-packages.nix create mode 100644 systems/eldiron/websites/tools/landing/yarn-packages.nix create mode 100644 systems/eldiron/websites/tools/ldap.nix create mode 100644 systems/eldiron/websites/tools/phpbb.nix create mode 100644 systems/eldiron/websites/tools/rompr.nix create mode 100644 systems/eldiron/websites/tools/shaarli.nix create mode 100644 systems/eldiron/websites/tools/ttrss.nix create mode 100644 systems/eldiron/websites/tools/wallabag.nix create mode 100644 systems/eldiron/websites/tools/webhooks.nix create mode 100644 systems/eldiron/websites/tools/ympd.nix create mode 100644 systems/eldiron/websites/tools/yourls.nix create mode 100644 systems/eldiron/websites/visio/default.nix create mode 100644 systems/eldiron/websites/vpn/default.nix create mode 100644 systems/eldiron/websites/vpn/www/index.html create mode 100644 systems/eldiron/websites/vpn/www/style.css create mode 100644 systems/eldiron/webstats/default.nix create mode 100644 systems/eldiron/webstats/goaccess.conf create mode 100644 systems/monitoring-1/base.nix create mode 100644 systems/monitoring-1/flake.lock create mode 100644 systems/monitoring-1/flake.nix create mode 100644 systems/monitoring-1/monitoring-master.nix create mode 100644 systems/monitoring-1/monitoring.nix create mode 100644 systems/monitoring-1/monitoring/master.nix create mode 100644 systems/monitoring-1/monitoring/phare.nix create mode 100644 systems/monitoring-1/monitoring/ulminfo-fr.nix create mode 100644 systems/monitoring-1/status.nix create mode 100755 systems/monitoring-1/status/app.py create mode 100644 systems/monitoring-1/status_engine.nix create mode 100644 systems/quatresaisons/flake.lock create mode 100644 systems/quatresaisons/flake.nix create mode 100644 systems/zoldene/Immae.pub create mode 100644 systems/zoldene/base.nix create mode 100644 systems/zoldene/disko.nix create mode 100644 systems/zoldene/flake.lock create mode 100644 systems/zoldene/flake.nix create mode 100644 systems/zoldene/logging.nix diff --git a/.envrc b/.envrc index 438d807..4718a18 100644 --- a/.envrc +++ b/.envrc @@ -1,13 +1,25 @@ # vim: filetype=bash -export NIX_PATH=nixpkgs=$(cat $(expand_path nix/sources.json) | jq -r '."nixpkgs-nixops".url') -NIX_PATH=$NIX_PATH:nixpkgs-nix=$(cat $(expand_path nix/sources.json) | jq -r '."nixpkgs-nix".url') +export DIRENV_FLAKE_DONT_ADD_SOURCES_ROOT=y +nix_direnv_watch_file() { + nix_watches+=("$@") + filtered=() + for i in "$@"; do + case "$i" in + */flake.lock) + ;; + *) + filtered+=("$i") + esac + done + watch_file "${filtered[@]}" +} -export NIXOPS_ENV_LOADED=1 +if nix eval './deploy#sops-vars-file' 2>/dev/null >/dev/null; then + export DEVSHELL_NO_MOTD=1 + cd deploy + use flake . --no-warn-dirty + cd .. + unset DEVSHELL_NO_MOTD +fi -PATH_add $(expand_path scripts) -PATH_add $(expand_path nixops/scripts) - -use nix -watch_file $(expand_path nix/sources.json) - -clean_nix_shell +use flake . --no-warn-dirty diff --git a/.gitconfig b/.gitconfig deleted file mode 100644 index 7aa8870..0000000 --- a/.gitconfig +++ /dev/null @@ -1,9 +0,0 @@ -; git config --local include.path '../.gitconfig' -[push] - recurseSubmodules = on-demand -; Find a way to include this file automatically? -; git -C nixops/secrets config --local diff.gpgdiffer.textconv "gpg --quiet -d" -[diff "gpgdiffer"] - textconv = "gpg --quiet -d" -[diff "sopsdiffer"] - textconv = "sops -d" diff --git a/.gitignore b/.gitignore index ff9c9cf..0c17e7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /result* /versions_log .direnv/ -/nixops/.gcroots +/deploy/.gcroots +/deploy/history diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index c2d9b18..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "nixops/secrets"] - path = nixops/secrets - url = gitolite@git.immae.eu:perso/Immae/Config/Nix/Nixops/Secrets diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index 6c68680..fcd0b15 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -1,7 +1,7 @@ Get Started =========== -- You may run ./nixops/scripts/setup to setup the directory and variables +- You may run ./scripts/setup to setup the directory and variables The script won’t do anything without asking first, you may stop at any step. @@ -43,8 +43,7 @@ The directory is divided in several sections: of hosts. They tend to be less used now. But sometimes they need to have an identity (mostly to be able to send e-mails) The subsection "roles" (ou=roles,ou=hosts,dc=immae,dc=eu) was from a Puppet age and - is deprecated. Only one host remains handled by Puppet (caldance) and - should be replaced with an internal VM. + is deprecated. - The "groups" section (ou=groups,dc=immae,dc=eu) contains the generic groups of users not associated to a service. - The "group_users" and "users" sections contain the users (usually with @@ -58,7 +57,7 @@ How does nixpkgs resolve To build nixops machines ------------------------ -The `NIX_PATH` environment variable is built in nixops/Makefile and +The `NIX_PATH` environment variable is built in deploy/Makefile and contains three paths: nixpkgs, nixpkgsNext, nixpkgsPrevious. Only the first one is actually used most of the time. Derivations that need pinned nixpkgs should declare it in `nix/sources.json` (it’s the case @@ -236,13 +235,18 @@ Nextcloud --------- - Do not skip major versions! +- Check php supported version (lib/versioncheck.php file) +- Update all the apps: check on https://apps.nextcloud.com/ and build with + ``` + nix-build -E "with import {};webapps.nextcloud.withApps (a: builtins.attrValues webapps.nextcloud.allApps)" + ``` - Put nextcloud in maintenance mode : ``` nextcloud-occ maintenance:mode --on ``` - Do a backup : ``` - sudo -u postgres pg_dump -n owncloud webapps > nextcloud.sql + sudo -u postgres pg_dump owncloud > nextcloud.sql ``` - Upgrade - Run the upgrade task : @@ -256,6 +260,22 @@ Nextcloud - Issues : https://docs.nextcloud.com/server/16/admin_manual/maintenance/manual_upgrade.html +- Farm : + Once a new instance thename is created, create the database: + ``` + CREATE USER nextcloud_thename WITH PASSWORD 'somepassword'; + CREATE DATABASE nextcloud_thename WITH OWNER nextcloud_thename; + ``` + Then add this to the config.php: + ``` + 'appstoreenabled' => false, + ``` + Then run: + ``` + nextcloud-occ-thename maintenance:install --database=pgsql --database-name=nextcloud_thename --database-host=/run/postgresql --database-user=nextcloud_thename --admin-user=immae --data-dir=/var/lib/nextcloud_farm/thename/data + ``` + Finally, edit the config.php to add the correct trusted domain + Flakes ------ diff --git a/Makefile b/Makefile index 50fa09f..6282df2 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,128 @@ -subrecipes = setup nix-info edit_env edit_vars -subrecipes += ssh-eldiron ssh-backup-2 ssh-monitoring-1 ssh-4c -subrecipes += debug build dry-run upload deploy next-boot deploy-reboot -subrecipes += list-generations delete-generations cleanup -${subrecipes}: - @$(MAKE) --no-print-directory -C nixops/ $@ -.PHONY: ${subrecipes} - nur: ./scripts/make-nur curl -o /dev/null -XPOST "https://nur-update.herokuapp.com/update?repo=immae" shellcheck: - shellcheck scripts/* nixops/scripts/* modules/private/gitolite/gitolite_ldap_groups.sh modules/private/ssh/ldap_authorized_keys.sh modules/private/pub/restrict + shellcheck scripts/* deploy/scripts/* modules/private/gitolite/gitolite_ldap_groups.sh modules/private/ssh/ldap_authorized_keys.sh modules/private/pub/restrict .PHONY: nur shellcheck + +###### Initial setup +setup: + ./scripts/setup +.PHONY: setup + +###### Morph regular tasks +PROFILE=./deploy/history +TARGET ?= +COMMON_COLEMNA_ARGS = -f ./deploy/flake.nix -v +#Only enabled in colemna 0.4: --nix-option allow-unsafe-native-code-during-evaluation true --nix-option allow-import-from-derivation true --nix-option substituters https://cache.nixos.org/ +MORPH_ARGS ?= +ifdef TARGET + # multiple targets: --on="{machine1,machine2}" (works with * glob too) + override MORPH_ARGS +=--on=$(TARGET) +endif +SSH_ARGS ?= + +nodes= dilion eldiron backup-2 monitoring-1 quatresaisons zoldene + +refresh_flakes: + @if [ -n "$(TARGET)" ]; then \ + ./scripts/refresh_flakes --no-new-inputs ./systems/$(TARGET)/flake.nix; \ + nix --no-warn-dirty flake lock --update-input n-$(TARGET) ./flakes; \ + nix --no-warn-dirty flake lock --update-input main-flake ./deploy; \ + else \ + ./scripts/refresh_flakes --no-new-inputs; \ + fi + (cd deploy ; nix flake lock --update-input secrets-local || true) + +.PHONY: refresh_flakes + +.PHONY: build $(addprefix build-,$(nodes)) +build-dilion build-eldiron build-backup-2 build-monitoring-1 build-quatresaisons build-zoldene: + $(MAKE) build TARGET=$(@:build-%=%) +build: refresh_flakes + colmena build $(COMMON_COLEMNA_ARGS) $(MORPH_ARGS) + +.PHONY: deploy $(addprefix deploy-,$(nodes)) +deploy-dilion deploy-eldiron deploy-backup-2 deploy-monitoring-1 deploy-quatresaisons deploy-zoldene: + $(MAKE) deploy TARGET=$(@:deploy-%=%) +deploy: refresh_flakes + ./scripts/with_env colmena apply $(COMMON_COLEMNA_ARGS) switch --keep-result $(MORPH_ARGS) + $(MAKE) keep-roots + +.PHONY: ssh $(addprefix ssh-,$(nodes)) +ssh-4c: ssh-quatresaisons +ssh-dilion ssh-eldiron ssh-backup-2 ssh-monitoring-1 ssh-quatresaisons ssh-zoldene: + $(MAKE) ssh TARGET=$(@:ssh-%=%) +ssh: + ./scripts/with_env bash -c 'ssh -i $$SSH_IDENTITY_FILE root@$(TARGET) $(SSH_ARGS)' + +.PHONY: ssh-decrypt $(addsuffix -decrypt,$(addprefix ssh-,$(nodes))) +ssh-zoldene-decrypt: + $(MAKE) ssh-decrypt TARGET=$(@:ssh-%-decrypt=%) +ssh-decrypt: + ./scripts/with_env bash -c 'ssh -p 2222 -i $$SSH_IDENTITY_FILE root@$(TARGET) $(SSH_ARGS)' + +.PHONY: debug $(addprefix debug-,$(nodes)) +debug-dilion debug-eldiron debug-backup-2 debug-monitoring-1 debug-quatresaisons debug-zoldene: + $(MAKE) debug TARGET=$(@:debug-%=%) +debug: refresh_flakes + colmena build $(COMMON_COLEMNA_ARGS) --show-trace $(MORPH_ARGS) + +.PHONY: upload $(addprefix upload-,$(nodes)) +upload-dilion upload-eldiron upload-backup-2 upload-monitoring-1 upload-quatresaisons upload-zoldene: + $(MAKE) upload TARGET=$(@:upload-%=%) +upload: refresh_flakes + ./scripts/with_env colmena apply $(COMMON_COLEMNA_ARGS) push $(MORPH_ARGS) + +.PHONY: test-deploy $(addprefix test-deploy-,$(nodes)) +test-deploy-dilion test-deploy-eldiron test-deploy-backup-2 test-deploy-monitoring-1 test-deploy-quatresaisons test-deploy-zoldene: + $(MAKE) test-deploy TARGET=$(@:test-deploy-%=%) +test-deploy: refresh_flakes + ./scripts/with_env colmena apply $(COMMON_COLEMNA_ARGS) test $(MORPH_ARGS) + +.PHONY: next-boot $(addprefix next-boot-,$(nodes)) +next-boot-dilion next-boot-eldiron next-boot-backup-2 next-boot-monitoring-1 next-boot-quatresaisons next-boot-zoldene: + $(MAKE) next-boot TARGET=$(@:next-boot-%=%) +next-boot: refresh_flakes + ./scripts/with_env colmena apply $(COMMON_COLEMNA_ARGS) boot $(MORPH_ARGS) + +.PHONY: deploy-reboot $(addprefix deploy-reboot-,$(nodes)) +deploy-reboot-dilion deploy-reboot-eldiron deploy-reboot-backup-2 deploy-reboot-monitoring-1 deploy-reboot-quatresaisons deploy-reboot-zoldene: + $(MAKE) deploy-reboot TARGET=$(@:deploy-reboot-%=%) +deploy-reboot: refresh_flakes + ./scripts/with_env colmena apply $(COMMON_COLEMNA_ARGS) boot --reboot $(MORPH_ARGS) + # Run it a second time because first time uploads the secrets + # before rebooting + $(MAKE) deploy + +keep-roots: + mkdir -p $(PROFILE) + for i in deploy/.gcroots/node-*; do nix-env -p $(PROFILE)/$$(basename $$i | sed -e "s/node-//") --set "$$i"; done + +systems := $(shell find $(PROFILE) -type l -not -name "*link" -printf "%f ") +###### Cleanup generations and garbage collection +GEN ?= "+3" + +list-generations: + @$(foreach system, $(systems), echo $(system);\ + nix-env -p $(PROFILE)/$(system) --list-generations;\ + $(MAKE) ssh-$(system) SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --list-generations";\ + ) +.PHONY: list-generations + +delete-generations: + $(MAKE) keep-roots + @$(foreach system, $(systems), echo $(system); \ + nix-env -p $(PROFILE)/$(system) --delete-generations $(GEN);\ + $(MAKE) ssh-$(system) SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --delete-generations $(GEN)";\ + ) +.PHONY: delete-generations + +cleanup: delete-generations + nix-store --gc + @$(foreach system, $(systems), echo $(system); \ + $(MAKE) ssh-$(system) SSH_ARGS="nix-store --gc";\ + ) +.PHONY: cleanup diff --git a/default.nix b/default.nix index 1f43cdd..d0bc618 100644 --- a/default.nix +++ b/default.nix @@ -1,11 +1,9 @@ -{ sources ? import ./nix/sources.nix, pkgs ? import sources.nixpkgs {} }: +{}: let - mypkgs = pkgs.callPackage ./pkgs {}; + mypackages = builtins.getFlake "path:${builtins.toString ./flakes/mypackages}"; in { - lib = pkgs.callPackage ./lib {}; - modules = import ./modules; - overlays = import ./overlays; - pkgs = mypkgs; - environments = pkgs.callPackage ./environments {}; -} // mypkgs + lib = mypackages.mylibs; + overlays = mypackages.overlays; + pkgs = mypackages.packages."${builtins.currentSystem}"; +} // mypackages.packages."${builtins.currentSystem}" diff --git a/deploy/flake.lock b/deploy/flake.lock new file mode 100644 index 0000000..afa2ec5 --- /dev/null +++ b/deploy/flake.lock @@ -0,0 +1,9816 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_6", + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_2": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_3": { + "inputs": { + "flake-utils": "flake-utils_20", + "nixpkgs": "nixpkgs_34" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_4": { + "inputs": { + "flake-utils": "flake-utils_34", + "nixpkgs": "nixpkgs_57" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_5": { + "inputs": { + "flake-utils": "flake-utils_37", + "nixpkgs": "nixpkgs_65" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_6": { + "inputs": { + "flake-utils": "flake-utils_39", + "nixpkgs": "nixpkgs_72" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_7": { + "inputs": { + "flake-utils": "flake-utils_61", + "nixpkgs": "nixpkgs_101" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "buildslist": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "buildslist_2": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "chatons": { + "inputs": { + "environment": "environment" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "chatons_2": { + "inputs": { + "environment": "environment_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_4", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_2": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_7", + "nixpkgs": "nixpkgs_13", + "stable": "stable_2" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_3": { + "inputs": { + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_10", + "nixpkgs": "nixpkgs_20", + "stable": "stable_3" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_4": { + "inputs": { + "flake-compat": "flake-compat_4", + "flake-utils": "flake-utils_32", + "nixpkgs": "nixpkgs_51", + "stable": "stable_4" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_5": { + "inputs": { + "flake-compat": "flake-compat_5", + "flake-utils": "flake-utils_35", + "nixpkgs": "nixpkgs_59", + "stable": "stable_5" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_6": { + "inputs": { + "flake-compat": "flake-compat_6", + "flake-utils": "flake-utils_38", + "nixpkgs": "nixpkgs_67", + "stable": "stable_6" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_7": { + "inputs": { + "flake-compat": "flake-compat_7", + "flake-utils": "flake-utils_45", + "nixpkgs": "nixpkgs_81", + "stable": "stable_7" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "copanier": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "copanier_2": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "devshell": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1688380630, + "narHash": "sha256-8ilApWVb1mAi4439zS3iFeIT0ODlbrifm/fegWwgHjA=", + "owner": "numtide", + "repo": "devshell", + "rev": "f9238ec3d75cefbb2b42a44948c4e8fb1ae9a205", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "diaspora": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "diaspora_2": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_2": { + "inputs": { + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_3": { + "inputs": { + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_4": { + "inputs": { + "nixpkgs": "nixpkgs_52" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_5": { + "inputs": { + "nixpkgs": "nixpkgs_60" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_6": { + "inputs": { + "nixpkgs": "nixpkgs_68" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_7": { + "inputs": { + "nixpkgs": "nixpkgs_82" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "dns-nix": { + "inputs": { + "flake-utils": "flake-utils_9", + "nixpkgs": [ + "main-flake", + "n-eldiron", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1635273082, + "narHash": "sha256-EHiDP2jEa7Ai5ZwIf5uld9RVFcV77+2SUxjQXwJsJa0=", + "owner": "kirelagin", + "repo": "dns.nix", + "rev": "c7b9645da9c0ddce4f9de4ef27ec01bb8108039a", + "type": "github" + }, + "original": { + "owner": "kirelagin", + "repo": "dns.nix", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_16": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_17": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_18": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_19": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_20": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_21": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_22": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_23": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_24": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_25": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_26": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_27": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_28": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_29": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_30": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_31": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_32": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_33": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "etherpad-lite": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "etherpad-lite_2": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "files-watcher_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "files-watcher_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "files-watcher_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "files-watcher_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "files-watcher_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_7": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_10": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_13" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_11": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_15" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_12": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_16" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_13": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_18" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_14": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_19" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_15": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_20" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_16": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_21" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_17": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_22" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_18": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_23" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_19": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_24" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_20": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_25" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_21": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_27" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_22": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_28" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_7" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_9" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_7": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_10" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_8": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_11" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_9": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_12" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_10": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_11": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_12": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_13": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_14": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_15": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_16": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_17": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_18": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_19": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_20": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_21": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_22": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_23": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_24": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_25": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_26": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_27": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_28": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_29": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_30": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_31": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_32": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_33": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_34": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_35": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_36": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_37": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_38": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_39": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_40": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_41": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_42": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_43": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_44": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_45": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_46": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_47": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_48": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_49": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_50": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_51": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_52": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_53": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_54": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_55": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_56": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_57": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_58": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_59": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_60": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_61": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_62": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_63": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_9": { + "locked": { + "lastModified": 1614513358, + "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "grocy": { + "flake": false, + "locked": { + "lastModified": 1585166193, + "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=", + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + }, + "original": { + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + } + }, + "grocy_2": { + "flake": false, + "locked": { + "lastModified": 1585166193, + "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=", + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + }, + "original": { + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1684264534, + "narHash": "sha256-K0zr+ry3FwIo3rN2U/VWAkCJSgBslBisvfRIPwMbuCQ=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "89253fb1518063556edd5e54509c30ac3089d5e6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "impermanence", + "type": "github" + } + }, + "landing-page": { + "flake": false, + "locked": { + "lastModified": 1691524124, + "narHash": "sha256-JyHb02qUrct2t+dgaiOcT5KS8RHkXygjWQXl+55gSMY=", + "ref": "main", + "rev": "018344d9116b506c662ecdcee2d0d505c857f1cf", + "revCount": 573, + "type": "git", + "url": "https://github.com/bastienwirtz/homer.git" + }, + "original": { + "ref": "main", + "type": "git", + "url": "https://github.com/bastienwirtz/homer.git" + } + }, + "loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "loginctl-linger_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "loginctl-linger_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "mail-relay": { + "inputs": { + "environment": "environment_3", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "../../flakes/private/mail-relay", + "type": "path" + }, + "original": { + "path": "../../flakes/private/mail-relay", + "type": "path" + } + }, + "mail-relay_2": { + "inputs": { + "environment": "environment_20", + "secrets": "secrets_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "../../flakes/private/mail-relay", + "type": "path" + }, + "original": { + "path": "../../flakes/private/mail-relay", + "type": "path" + } + }, + "main-flake": { + "inputs": { + "n-backup-2": "n-backup-2", + "n-dilion": "n-dilion", + "n-eldiron": "n-eldiron", + "n-monitoring-1": "n-monitoring-1", + "n-quatresaisons": "n-quatresaisons", + "n-zoldene": "n-zoldene", + "s-backports": "s-backports", + "s-copanier": "s-copanier", + "s-diaspora": "s-diaspora", + "s-etherpad-lite": "s-etherpad-lite", + "s-fiche": "s-fiche", + "s-files-watcher": "s-files-watcher", + "s-grocy": "s-grocy", + "s-lib": "s-lib", + "s-loginctl-linger": "s-loginctl-linger", + "s-mastodon": "s-mastodon", + "s-mediagoblin": "s-mediagoblin", + "s-multi-apache-container": "s-multi-apache-container", + "s-mypackages": "s-mypackages", + "s-myuids": "s-myuids", + "s-naemon": "s-naemon", + "s-openarc": "s-openarc", + "s-opendmarc": "s-opendmarc", + "s-paste": "s-paste", + "s-peertube": "s-peertube", + "s-private-buildbot": "s-private-buildbot", + "s-private-chatons": "s-private-chatons", + "s-private-environment": "s-private-environment", + "s-private-mail-relay": "s-private-mail-relay", + "s-private-milters": "s-private-milters", + "s-private-monitoring": "s-private-monitoring", + "s-private-openarc": "s-private-openarc", + "s-private-opendmarc": "s-private-opendmarc", + "s-private-openldap": "s-private-openldap", + "s-private-paste": "s-private-paste", + "s-private-peertube": "s-private-peertube", + "s-private-php": "s-private-php", + "s-private-ssh": "s-private-ssh", + "s-private-system": "s-private-system", + "s-rsync_backup": "s-rsync_backup", + "s-secrets": "s-secrets", + "s-surfer": "s-surfer", + "s-taskwarrior-web": "s-taskwarrior-web", + "secrets": [ + "secrets" + ] + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LBw8FCxHXW6b1WFvsEnmLmNpZjow6+N4Q+3zAfcudIU=", + "path": "../flakes", + "type": "path" + }, + "original": { + "path": "../flakes", + "type": "path" + } + }, + "mastodon": { + "flake": false, + "locked": { + "lastModified": 1582790581, + "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=", + "owner": "tootsuite", + "repo": "mastodon", + "rev": "9bace2dd88d127d396794375c8fcb2132619a799", + "type": "github" + }, + "original": { + "owner": "tootsuite", + "ref": "v2.9.4", + "repo": "mastodon", + "type": "github" + } + }, + "mastodon_2": { + "flake": false, + "locked": { + "lastModified": 1582790581, + "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=", + "owner": "tootsuite", + "repo": "mastodon", + "rev": "9bace2dd88d127d396794375c8fcb2132619a799", + "type": "github" + }, + "original": { + "owner": "tootsuite", + "ref": "v2.9.4", + "repo": "mastodon", + "type": "github" + } + }, + "mediagoblin": { + "flake": false, + "locked": { + "lastModified": 1531090939, + "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=", + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "revCount": 4805, + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + }, + "original": { + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + } + }, + "mediagoblin_2": { + "flake": false, + "locked": { + "lastModified": 1531090939, + "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=", + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "revCount": 4805, + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + }, + "original": { + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + } + }, + "milters": { + "inputs": { + "environment": "environment_4", + "files-watcher": "files-watcher", + "openarc": "openarc", + "opendmarc": "opendmarc", + "secrets": "secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "monitoring": { + "inputs": { + "environment": "environment_5", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib", + "secrets": "secrets_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "monitoring_2": { + "inputs": { + "environment": "environment_9", + "naemon": "naemon_2", + "nixpkgs-lib": "nixpkgs-lib_4", + "secrets": "secrets_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "monitoring_3": { + "inputs": { + "environment": "environment_21", + "naemon": "naemon_4", + "nixpkgs-lib": "nixpkgs-lib_14", + "secrets": "secrets_16" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "monitoring_4": { + "inputs": { + "environment": "environment_24", + "naemon": "naemon_5", + "nixpkgs-lib": "nixpkgs-lib_17", + "secrets": "secrets_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_11", + "myuids": "myuids_25" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_2": { + "inputs": { + "colmena": "colmena_2", + "disko": "disko_2", + "flake-parts": "flake-parts_3", + "nixos-anywhere": "nixos-anywhere_2", + "nixpkgs": "nixpkgs_16" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_3": { + "inputs": { + "colmena": "colmena_3", + "disko": "disko_3", + "flake-parts": "flake-parts_5", + "nixos-anywhere": "nixos-anywhere_3", + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_4": { + "inputs": { + "colmena": "colmena_4", + "disko": "disko_4", + "flake-parts": "flake-parts_11", + "nixos-anywhere": "nixos-anywhere_4", + "nixpkgs": "nixpkgs_54" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_5": { + "inputs": { + "colmena": "colmena_5", + "disko": "disko_5", + "flake-parts": "flake-parts_13", + "nixos-anywhere": "nixos-anywhere_5", + "nixpkgs": "nixpkgs_62" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_6": { + "inputs": { + "colmena": "colmena_6", + "disko": "disko_6", + "flake-parts": "flake-parts_15", + "nixos-anywhere": "nixos-anywhere_6", + "nixpkgs": "nixpkgs_70" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_12", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_10": { + "inputs": { + "flake-parts": "flake-parts_17", + "nixpkgs": "nixpkgs_77", + "webapps-ttrss": "webapps-ttrss_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_11": { + "inputs": { + "flake-parts": "flake-parts_18", + "nixpkgs": "nixpkgs_79", + "webapps-ttrss": "webapps-ttrss_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_12": { + "inputs": { + "flake-parts": "flake-parts_21", + "nixpkgs": "nixpkgs_102", + "webapps-ttrss": "webapps-ttrss_14" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_13": { + "inputs": { + "flake-parts": "flake-parts_22", + "nixpkgs": "nixpkgs_103", + "webapps-ttrss": "webapps-ttrss_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_2": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_19", + "webapps-ttrss": "webapps-ttrss_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_3": { + "inputs": { + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_35", + "webapps-ttrss": "webapps-ttrss_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_4": { + "inputs": { + "flake-parts": "flake-parts_7", + "nixpkgs": "nixpkgs_38", + "webapps-ttrss": "webapps-ttrss_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_5": { + "inputs": { + "flake-parts": "flake-parts_8", + "nixpkgs": "nixpkgs_40", + "webapps-ttrss": "webapps-ttrss_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_6": { + "inputs": { + "flake-parts": "flake-parts_10", + "nixpkgs": "nixpkgs_48", + "webapps-ttrss": "webapps-ttrss_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_7": { + "inputs": { + "flake-parts": "flake-parts_12", + "nixpkgs": "nixpkgs_58", + "webapps-ttrss": "webapps-ttrss_8" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_8": { + "inputs": { + "flake-parts": "flake-parts_14", + "nixpkgs": "nixpkgs_66", + "webapps-ttrss": "webapps-ttrss_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_9": { + "inputs": { + "flake-parts": "flake-parts_16", + "nixpkgs": "nixpkgs_73", + "webapps-ttrss": "webapps-ttrss_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_16": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_17": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_18": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_19": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_20": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_21": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_22": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_23": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_24": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_25": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_26": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_27": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_28": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_29": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_30": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_31": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_32": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_33": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_34": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_35": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_36": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_37": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_38": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_39": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_40": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_41": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_42": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "n-backup-2": { + "inputs": { + "chatons": "chatons", + "environment": "environment_2", + "loginctl-linger": "loginctl-linger", + "mail-relay": "mail-relay", + "milters": "milters", + "monitoring": "monitoring", + "my-lib": "my-lib", + "myuids": "myuids_3", + "nixpkgs": "nixpkgs_8", + "openarc": "openarc_3", + "opendmarc": "opendmarc_2", + "openldap": "openldap", + "rsync_backup": "rsync_backup", + "secrets": "secrets_6", + "system": "system" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0CPGGyOWQadU9c8y+A4XtveOrmkMlFiH+WJ55RPzJnE=", + "path": "../systems/backup-2", + "type": "path" + }, + "original": { + "path": "../systems/backup-2", + "type": "path" + } + }, + "n-dilion": { + "inputs": { + "environment": "environment_8", + "files-watcher": "files-watcher_4", + "loginctl-linger": "loginctl-linger_2", + "monitoring": "monitoring_2", + "my-lib": "my-lib_2", + "myuids": "myuids_7", + "nixpkgs": "nixpkgs_17", + "secrets": "secrets_8", + "ssh": "ssh", + "system": "system_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Ctp8QY0OkGwv/YkOlipwM1ldEz7OebVDbAqg1O/tRe8=", + "path": "../systems/dilion", + "type": "path" + }, + "original": { + "path": "../systems/dilion", + "type": "path" + } + }, + "n-eldiron": { + "inputs": { + "dns-nix": "dns-nix", + "my-lib": "my-lib_3", + "nixpkgs": "nixpkgs_24", + "private-buildbot": "private-buildbot", + "private-chatons": "private-chatons", + "private-environment": "private-environment", + "private-milters": "private-milters", + "private-monitoring": "private-monitoring", + "private-openarc": "private-openarc", + "private-opendmarc": "private-opendmarc", + "private-openldap": "private-openldap", + "private-paste": "private-paste", + "private-peertube": "private-peertube", + "private-php": "private-php", + "private-ssh": "private-ssh", + "private-system": "private-system", + "public-copanier": "public-copanier", + "public-diaspora": "public-diaspora", + "public-etherpad-lite": "public-etherpad-lite", + "public-fiche": "public-fiche", + "public-files-watcher": "public-files-watcher", + "public-grocy": "public-grocy", + "public-loginctl-linger": "public-loginctl-linger", + "public-mastodon": "public-mastodon", + "public-mediagoblin": "public-mediagoblin", + "public-multi-apache-container": "public-multi-apache-container", + "public-mypackages": "public-mypackages", + "public-myuids": "public-myuids", + "public-openarc": "public-openarc", + "public-opendmarc": "public-opendmarc", + "public-peertube": "public-peertube", + "public-secrets": "public-secrets", + "public-surfer": "public-surfer", + "public-taskwarrior-web": "public-taskwarrior-web" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-g9f3SCavl9ssNr8Xw9Z8KkpeEwCYv+47dqwoIPneMSs=", + "path": "../systems/eldiron", + "type": "path" + }, + "original": { + "path": "../systems/eldiron", + "type": "path" + } + }, + "n-monitoring-1": { + "inputs": { + "chatons": "chatons_2", + "environment": "environment_19", + "files-watcher": "files-watcher_9", + "loginctl-linger": "loginctl-linger_3", + "mail-relay": "mail-relay_2", + "monitoring": "monitoring_3", + "my-lib": "my-lib_4", + "myuids": "myuids_23", + "nixpkgs": "nixpkgs_55", + "php": "php", + "secrets": "secrets_17", + "system": "system_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-kLIVhZAxEWcN3W1AaF/gmopYuRdq0U43jkA4hliY50I=", + "path": "../systems/monitoring-1", + "type": "path" + }, + "original": { + "path": "../systems/monitoring-1", + "type": "path" + } + }, + "n-quatresaisons": { + "inputs": { + "environment": "environment_23", + "files-watcher": "files-watcher_10", + "landing-page": "landing-page", + "monitoring": "monitoring_4", + "multi-apache-container": "multi-apache-container", + "my-lib": "my-lib_5", + "myuids": "myuids_26", + "nixpkgs": "nixpkgs_63", + "php": "php_2", + "secrets": "secrets_19", + "system": "system_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-FtjFgqcSXs0dTkbUggbPwaDeCoOoYZragHCUkcyq538=", + "path": "../systems/quatresaisons", + "type": "path" + }, + "original": { + "path": "../systems/quatresaisons", + "type": "path" + } + }, + "n-zoldene": { + "inputs": { + "impermanence": "impermanence", + "my-lib": "my-lib_6", + "nixpkgs": "nixpkgs_71", + "private-environment": "private-environment_2", + "private-system": "private-system_2", + "public-secrets": "public-secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-YSYLjETf7yMwdHeEisU1V7e5O3yB+YxVoIPLi00PCdo=", + "path": "../systems/zoldene", + "type": "path" + }, + "original": { + "path": "../systems/zoldene", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_2": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_3": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_4": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_5": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_6": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_7": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "main-flake", + "n-backup-2", + "my-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "n-backup-2", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_6", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_2": { + "inputs": { + "disko": [ + "main-flake", + "n-dilion", + "my-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "n-dilion", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_2", + "nixos-images": "nixos-images_2", + "nixpkgs": "nixpkgs_15", + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_3": { + "inputs": { + "disko": [ + "main-flake", + "n-eldiron", + "my-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "n-eldiron", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_3", + "nixos-images": "nixos-images_3", + "nixpkgs": "nixpkgs_22", + "treefmt-nix": "treefmt-nix_3" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_4": { + "inputs": { + "disko": [ + "main-flake", + "n-monitoring-1", + "my-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "n-monitoring-1", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_4", + "nixos-images": "nixos-images_4", + "nixpkgs": "nixpkgs_53", + "treefmt-nix": "treefmt-nix_4" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_5": { + "inputs": { + "disko": [ + "main-flake", + "n-quatresaisons", + "my-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "n-quatresaisons", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_5", + "nixos-images": "nixos-images_5", + "nixpkgs": "nixpkgs_61", + "treefmt-nix": "treefmt-nix_5" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_6": { + "inputs": { + "disko": [ + "main-flake", + "n-zoldene", + "my-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "n-zoldene", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_6", + "nixos-images": "nixos-images_6", + "nixpkgs": "nixpkgs_69", + "treefmt-nix": "treefmt-nix_6" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_7": { + "inputs": { + "disko": [ + "main-flake", + "s-lib", + "disko" + ], + "flake-parts": [ + "main-flake", + "s-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_7", + "nixos-images": "nixos-images_7", + "nixpkgs": "nixpkgs_83", + "treefmt-nix": "treefmt-nix_7" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "main-flake", + "n-backup-2", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "n-backup-2", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_2": { + "inputs": { + "nixos-2305": [ + "main-flake", + "n-dilion", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "n-dilion", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_3": { + "inputs": { + "nixos-2305": [ + "main-flake", + "n-eldiron", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "n-eldiron", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_4": { + "inputs": { + "nixos-2305": [ + "main-flake", + "n-monitoring-1", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "n-monitoring-1", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_5": { + "inputs": { + "nixos-2305": [ + "main-flake", + "n-quatresaisons", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "n-quatresaisons", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_6": { + "inputs": { + "nixos-2305": [ + "main-flake", + "n-zoldene", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "n-zoldene", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_7": { + "inputs": { + "nixos-2305": [ + "main-flake", + "s-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "main-flake", + "s-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1677383253, + "narHash": "sha256-UfpzWfSxkfXHnb4boXZNaKsAcUrZT9Hw+tao1oZxd08=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9952d6bc395f5841262b006fbace8dd7e143b634", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-4_2": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-4_3": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-4_4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_10": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_11": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_12": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_13": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_14": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_15": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_16": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_17": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_18": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_19": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_20": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_21": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_22": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_23": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_24": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_25": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_26": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_27": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_28": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_4": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_5": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_6": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_7": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_8": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_9": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_100": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_101": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_102": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_103": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_104": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_105": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_106": { + "locked": { + "dir": "lib", + "lastModified": 1691472822, + "narHash": "sha256-XVfYZ2oB3lNPVq6sHCY9WkdQ8lHoIDzzbpg8bB6oBxA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "41c7605718399dcfa53dd7083793b6ae3bc969ff", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_107": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_17": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_18": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_22": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_23": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_24": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_25": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_26": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_27": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_28": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_29": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_30": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_31": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_32": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_33": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_34": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_35": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_36": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_37": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_38": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_39": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_40": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_41": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_42": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_43": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_44": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_45": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_46": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_47": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_48": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_49": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_50": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_51": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_52": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_53": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_54": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_55": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_56": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_57": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_58": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_59": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_60": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_61": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_62": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_63": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_64": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_65": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_66": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_67": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_68": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_69": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_70": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_71": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_72": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_73": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_74": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_75": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_76": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_77": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_78": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_79": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_80": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_81": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_82": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_83": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_84": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_85": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_86": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_87": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_88": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_89": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_90": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_91": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_92": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_93": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_94": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_95": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_96": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_97": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_98": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_99": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "openarc": { + "inputs": { + "flake-utils": "flake-utils", + "myuids": "myuids", + "nixpkgs": "nixpkgs_2", + "openarc": "openarc_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_10": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_11": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_12": { + "inputs": { + "flake-utils": "flake-utils_53", + "myuids": "myuids_36", + "nixpkgs": "nixpkgs_93", + "openarc": "openarc_13" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_13": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_14": { + "inputs": { + "flake-utils": "flake-utils_55", + "myuids": "myuids_38", + "nixpkgs": "nixpkgs_95", + "openarc": "openarc_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_15": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_2": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_3": { + "inputs": { + "files-watcher": "files-watcher_2", + "openarc": "openarc_4", + "secrets": "secrets_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "openarc_4": { + "inputs": { + "flake-utils": "flake-utils_4", + "myuids": "myuids_4", + "nixpkgs": "nixpkgs_9", + "openarc": "openarc_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_5": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_6": { + "inputs": { + "flake-utils": "flake-utils_12", + "myuids": "myuids_9", + "nixpkgs": "nixpkgs_26", + "openarc": "openarc_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_7": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_8": { + "inputs": { + "flake-utils": "flake-utils_14", + "myuids": "myuids_11", + "nixpkgs": "nixpkgs_28", + "openarc": "openarc_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_9": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "opendmarc": { + "inputs": { + "flake-utils": "flake-utils_2", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_2": { + "inputs": { + "environment": "environment_6", + "files-watcher": "files-watcher_3", + "opendmarc": "opendmarc_3", + "secrets": "secrets_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "opendmarc_3": { + "inputs": { + "flake-utils": "flake-utils_5", + "myuids": "myuids_5", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_4": { + "inputs": { + "flake-utils": "flake-utils_13", + "myuids": "myuids_10", + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_5": { + "inputs": { + "flake-utils": "flake-utils_15", + "myuids": "myuids_12", + "nixpkgs": "nixpkgs_29" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_6": { + "inputs": { + "flake-utils": "flake-utils_54", + "myuids": "myuids_37", + "nixpkgs": "nixpkgs_94" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_7": { + "inputs": { + "flake-utils": "flake-utils_56", + "myuids": "myuids_39", + "nixpkgs": "nixpkgs_96" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "paste": { + "inputs": { + "flake-utils": "flake-utils_16", + "nixpkgs": "nixpkgs_30" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "../../paste", + "type": "path" + }, + "original": { + "path": "../../paste", + "type": "path" + } + }, + "paste_2": { + "inputs": { + "flake-utils": "flake-utils_57", + "nixpkgs": "nixpkgs_97" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "../../paste", + "type": "path" + }, + "original": { + "path": "../../paste", + "type": "path" + } + }, + "peertube": { + "flake": false, + "locked": { + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_2": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_3": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_4": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_5": { + "flake": false, + "locked": { + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_6": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_open_instance": { + "inputs": { + "flake-utils": "flake-utils_17", + "myuids": "myuids_13", + "nixpkgs": "nixpkgs_31", + "peertube": "peertube" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_open_instance_2": { + "inputs": { + "flake-utils": "flake-utils_58", + "myuids": "myuids_40", + "nixpkgs": "nixpkgs_98", + "peertube": "peertube_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_origin": { + "inputs": { + "flake-utils": "flake-utils_18", + "myuids": "myuids_14", + "nixpkgs": "nixpkgs_32", + "peertube": "peertube_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_origin_2": { + "inputs": { + "flake-utils": "flake-utils_59", + "myuids": "myuids_41", + "nixpkgs": "nixpkgs_99", + "peertube": "peertube_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "php": { + "inputs": { + "flake-utils": "flake-utils_33", + "nixpkgs": "nixpkgs_56", + "nixpkgs-4": "nixpkgs-4_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "php_2": { + "inputs": { + "flake-utils": "flake-utils_36", + "nixpkgs": "nixpkgs_64", + "nixpkgs-4": "nixpkgs-4_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "private-buildbot": { + "inputs": { + "buildslist": "buildslist", + "flake-utils": "flake-utils_11", + "nixpkgs": "nixpkgs_25" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=", + "path": "../../flakes/private/buildbot", + "type": "path" + }, + "original": { + "path": "../../flakes/private/buildbot", + "type": "path" + } + }, + "private-chatons": { + "inputs": { + "environment": "environment_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-milters": { + "inputs": { + "environment": "environment_13", + "files-watcher": "files-watcher_5", + "openarc": "openarc_6", + "opendmarc": "opendmarc_4", + "secrets": "secrets_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "private-monitoring": { + "inputs": { + "environment": "environment_14", + "naemon": "naemon_3", + "nixpkgs-lib": "nixpkgs-lib_8", + "secrets": "secrets_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "private-openarc": { + "inputs": { + "files-watcher": "files-watcher_6", + "openarc": "openarc_8", + "secrets": "secrets_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "private-opendmarc": { + "inputs": { + "environment": "environment_15", + "files-watcher": "files-watcher_7", + "opendmarc": "opendmarc_5", + "secrets": "secrets_13" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "private-openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "private-paste": { + "inputs": { + "paste": "paste" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=", + "path": "../../flakes/private/paste", + "type": "path" + }, + "original": { + "path": "../../flakes/private/paste", + "type": "path" + } + }, + "private-peertube": { + "inputs": { + "peertube_open_instance": "peertube_open_instance", + "peertube_origin": "peertube_origin" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=", + "path": "../../flakes/private/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/private/peertube", + "type": "path" + } + }, + "private-php": { + "inputs": { + "flake-utils": "flake-utils_19", + "nixpkgs": "nixpkgs_33", + "nixpkgs-4": "nixpkgs-4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "private-ssh": { + "inputs": { + "environment": "environment_16", + "secrets": "secrets_14" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "private-system": { + "inputs": { + "backports": "backports_3", + "environment": "environment_17", + "mypackages": "mypackages_3", + "myuids": "myuids_15", + "secrets-public": "secrets-public_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "private-system_2": { + "inputs": { + "backports": "backports_6", + "environment": "environment_26", + "mypackages": "mypackages_9", + "myuids": "myuids_28", + "secrets-public": "secrets-public_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "public-copanier": { + "inputs": { + "copanier": "copanier", + "flake-utils": "flake-utils_21", + "nixpkgs": "nixpkgs_36" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=", + "path": "../../flakes/copanier", + "type": "path" + }, + "original": { + "path": "../../flakes/copanier", + "type": "path" + } + }, + "public-diaspora": { + "inputs": { + "diaspora": "diaspora", + "flake-utils": "flake-utils_22", + "myuids": "myuids_16", + "nixpkgs": "nixpkgs_37" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=", + "path": "../../flakes/diaspora", + "type": "path" + }, + "original": { + "path": "../../flakes/diaspora", + "type": "path" + } + }, + "public-etherpad-lite": { + "inputs": { + "etherpad-lite": "etherpad-lite", + "flake-utils": "flake-utils_23", + "mypackages": "mypackages_4", + "nixpkgs": "nixpkgs_39" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=", + "path": "../../flakes/etherpad-lite", + "type": "path" + }, + "original": { + "path": "../../flakes/etherpad-lite", + "type": "path" + } + }, + "public-fiche": { + "locked": { + "lastModified": 1, + "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=", + "path": "../../flakes/fiche", + "type": "path" + }, + "original": { + "path": "../../flakes/fiche", + "type": "path" + } + }, + "public-files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "public-grocy": { + "inputs": { + "flake-utils": "flake-utils_24", + "grocy": "grocy", + "mypackages": "mypackages_5", + "nixpkgs": "nixpkgs_41" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=", + "path": "../../flakes/grocy", + "type": "path" + }, + "original": { + "path": "../../flakes/grocy", + "type": "path" + } + }, + "public-loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "public-mastodon": { + "inputs": { + "flake-utils": "flake-utils_25", + "mastodon": "mastodon", + "myuids": "myuids_17", + "nixpkgs": "nixpkgs_42" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=", + "path": "../../flakes/mastodon", + "type": "path" + }, + "original": { + "path": "../../flakes/mastodon", + "type": "path" + } + }, + "public-mediagoblin": { + "inputs": { + "flake-utils": "flake-utils_26", + "mediagoblin": "mediagoblin", + "myuids": "myuids_18", + "nixpkgs": "nixpkgs_43" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=", + "path": "../../flakes/mediagoblin", + "type": "path" + }, + "original": { + "path": "../../flakes/mediagoblin", + "type": "path" + } + }, + "public-multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_8", + "myuids": "myuids_19" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "public-mypackages": { + "inputs": { + "flake-parts": "flake-parts_9", + "nixpkgs": "nixpkgs_44", + "webapps-ttrss": "webapps-ttrss_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../flakes/mypackages", + "type": "path" + }, + "original": { + "path": "../../flakes/mypackages", + "type": "path" + } + }, + "public-myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "public-openarc": { + "inputs": { + "flake-utils": "flake-utils_27", + "myuids": "myuids_20", + "nixpkgs": "nixpkgs_45", + "openarc": "openarc_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../flakes/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/openarc", + "type": "path" + } + }, + "public-opendmarc": { + "inputs": { + "flake-utils": "flake-utils_28", + "myuids": "myuids_21", + "nixpkgs": "nixpkgs_46" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../flakes/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/opendmarc", + "type": "path" + } + }, + "public-peertube": { + "inputs": { + "flake-utils": "flake-utils_29", + "myuids": "myuids_22", + "nixpkgs": "nixpkgs_47", + "peertube": "peertube_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "../../flakes/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/peertube", + "type": "path" + } + }, + "public-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "public-secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "public-surfer": { + "inputs": { + "flake-utils": "flake-utils_30", + "mypackages": "mypackages_6", + "nixpkgs": "nixpkgs_49", + "surfer": "surfer" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=", + "path": "../../flakes/surfer", + "type": "path" + }, + "original": { + "path": "../../flakes/surfer", + "type": "path" + } + }, + "public-taskwarrior-web": { + "inputs": { + "flake-utils": "flake-utils_31", + "nixpkgs": "nixpkgs_50", + "taskwarrior-web": "taskwarrior-web" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=", + "path": "../../flakes/taskwarrior-web", + "type": "path" + }, + "original": { + "path": "../../flakes/taskwarrior-web", + "type": "path" + } + }, + "root": { + "inputs": { + "devshell": "devshell", + "main-flake": "main-flake", + "nixpkgs": "nixpkgs_106", + "secrets": "secrets_26" + } + }, + "rsync_backup": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TxLsFx4DTTScMHkvR0pJgzYea6ILiu1Dl6LA67LtYGo=", + "path": "../../flakes/rsync_backup", + "type": "path" + }, + "original": { + "path": "../../flakes/rsync_backup", + "type": "path" + } + }, + "s-backports": { + "inputs": { + "flake-utils": "flake-utils_40", + "nixpkgs": "nixpkgs_74" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "./backports", + "type": "path" + }, + "original": { + "path": "./backports", + "type": "path" + } + }, + "s-copanier": { + "inputs": { + "copanier": "copanier_2", + "flake-utils": "flake-utils_41", + "nixpkgs": "nixpkgs_75" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=", + "path": "./copanier", + "type": "path" + }, + "original": { + "path": "./copanier", + "type": "path" + } + }, + "s-diaspora": { + "inputs": { + "diaspora": "diaspora_2", + "flake-utils": "flake-utils_42", + "myuids": "myuids_29", + "nixpkgs": "nixpkgs_76" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=", + "path": "./diaspora", + "type": "path" + }, + "original": { + "path": "./diaspora", + "type": "path" + } + }, + "s-etherpad-lite": { + "inputs": { + "etherpad-lite": "etherpad-lite_2", + "flake-utils": "flake-utils_43", + "mypackages": "mypackages_10", + "nixpkgs": "nixpkgs_78" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=", + "path": "./etherpad-lite", + "type": "path" + }, + "original": { + "path": "./etherpad-lite", + "type": "path" + } + }, + "s-fiche": { + "locked": { + "lastModified": 1, + "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=", + "path": "./fiche", + "type": "path" + }, + "original": { + "path": "./fiche", + "type": "path" + } + }, + "s-files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "./files-watcher", + "type": "path" + }, + "original": { + "path": "./files-watcher", + "type": "path" + } + }, + "s-grocy": { + "inputs": { + "flake-utils": "flake-utils_44", + "grocy": "grocy_2", + "mypackages": "mypackages_11", + "nixpkgs": "nixpkgs_80" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=", + "path": "./grocy", + "type": "path" + }, + "original": { + "path": "./grocy", + "type": "path" + } + }, + "s-lib": { + "inputs": { + "colmena": "colmena_7", + "disko": "disko_7", + "flake-parts": "flake-parts_19", + "nixos-anywhere": "nixos-anywhere_7", + "nixpkgs": "nixpkgs_84" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "./lib", + "type": "path" + }, + "original": { + "path": "./lib", + "type": "path" + } + }, + "s-loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "./loginctl-linger", + "type": "path" + }, + "original": { + "path": "./loginctl-linger", + "type": "path" + } + }, + "s-mastodon": { + "inputs": { + "flake-utils": "flake-utils_46", + "mastodon": "mastodon_2", + "myuids": "myuids_30", + "nixpkgs": "nixpkgs_85" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=", + "path": "./mastodon", + "type": "path" + }, + "original": { + "path": "./mastodon", + "type": "path" + } + }, + "s-mediagoblin": { + "inputs": { + "flake-utils": "flake-utils_47", + "mediagoblin": "mediagoblin_2", + "myuids": "myuids_31", + "nixpkgs": "nixpkgs_86" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=", + "path": "./mediagoblin", + "type": "path" + }, + "original": { + "path": "./mediagoblin", + "type": "path" + } + }, + "s-multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_12", + "myuids": "myuids_32" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "./multi-apache-container", + "type": "path" + }, + "original": { + "path": "./multi-apache-container", + "type": "path" + } + }, + "s-mypackages": { + "inputs": { + "flake-parts": "flake-parts_20", + "nixpkgs": "nixpkgs_87", + "webapps-ttrss": "webapps-ttrss_13" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "./mypackages", + "type": "path" + }, + "original": { + "path": "./mypackages", + "type": "path" + } + }, + "s-myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "./myuids", + "type": "path" + }, + "original": { + "path": "./myuids", + "type": "path" + } + }, + "s-naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "./naemon", + "type": "path" + }, + "original": { + "path": "./naemon", + "type": "path" + } + }, + "s-openarc": { + "inputs": { + "flake-utils": "flake-utils_48", + "myuids": "myuids_33", + "nixpkgs": "nixpkgs_88", + "openarc": "openarc_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "./openarc", + "type": "path" + }, + "original": { + "path": "./openarc", + "type": "path" + } + }, + "s-opendmarc": { + "inputs": { + "flake-utils": "flake-utils_49", + "myuids": "myuids_34", + "nixpkgs": "nixpkgs_89" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "./opendmarc", + "type": "path" + }, + "original": { + "path": "./opendmarc", + "type": "path" + } + }, + "s-paste": { + "inputs": { + "flake-utils": "flake-utils_50", + "nixpkgs": "nixpkgs_90" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "./paste", + "type": "path" + }, + "original": { + "path": "./paste", + "type": "path" + } + }, + "s-peertube": { + "inputs": { + "flake-utils": "flake-utils_51", + "myuids": "myuids_35", + "nixpkgs": "nixpkgs_91", + "peertube": "peertube_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./peertube", + "type": "path" + }, + "original": { + "path": "./peertube", + "type": "path" + } + }, + "s-private-buildbot": { + "inputs": { + "buildslist": "buildslist_2", + "flake-utils": "flake-utils_52", + "nixpkgs": "nixpkgs_92" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=", + "path": "./private/buildbot", + "type": "path" + }, + "original": { + "path": "./private/buildbot", + "type": "path" + } + }, + "s-private-chatons": { + "inputs": { + "environment": "environment_27" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "./private/chatons", + "type": "path" + }, + "original": { + "path": "./private/chatons", + "type": "path" + } + }, + "s-private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "./private/environment", + "type": "path" + }, + "original": { + "path": "./private/environment", + "type": "path" + } + }, + "s-private-mail-relay": { + "inputs": { + "environment": "environment_28", + "secrets": "secrets_20" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "./private/mail-relay", + "type": "path" + }, + "original": { + "path": "./private/mail-relay", + "type": "path" + } + }, + "s-private-milters": { + "inputs": { + "environment": "environment_29", + "files-watcher": "files-watcher_13", + "openarc": "openarc_12", + "opendmarc": "opendmarc_6", + "secrets": "secrets_21" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "./private/milters", + "type": "path" + }, + "original": { + "path": "./private/milters", + "type": "path" + } + }, + "s-private-monitoring": { + "inputs": { + "environment": "environment_30", + "naemon": "naemon_6", + "nixpkgs-lib": "nixpkgs-lib_26", + "secrets": "secrets_22" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "./private/monitoring", + "type": "path" + }, + "original": { + "path": "./private/monitoring", + "type": "path" + } + }, + "s-private-openarc": { + "inputs": { + "files-watcher": "files-watcher_14", + "openarc": "openarc_14", + "secrets": "secrets_23" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "./private/openarc", + "type": "path" + }, + "original": { + "path": "./private/openarc", + "type": "path" + } + }, + "s-private-opendmarc": { + "inputs": { + "environment": "environment_31", + "files-watcher": "files-watcher_15", + "opendmarc": "opendmarc_7", + "secrets": "secrets_24" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "./private/opendmarc", + "type": "path" + }, + "original": { + "path": "./private/opendmarc", + "type": "path" + } + }, + "s-private-openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "./private/openldap", + "type": "path" + }, + "original": { + "path": "./private/openldap", + "type": "path" + } + }, + "s-private-paste": { + "inputs": { + "paste": "paste_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=", + "path": "./private/paste", + "type": "path" + }, + "original": { + "path": "./private/paste", + "type": "path" + } + }, + "s-private-peertube": { + "inputs": { + "peertube_open_instance": "peertube_open_instance_2", + "peertube_origin": "peertube_origin_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=", + "path": "./private/peertube", + "type": "path" + }, + "original": { + "path": "./private/peertube", + "type": "path" + } + }, + "s-private-php": { + "inputs": { + "flake-utils": "flake-utils_60", + "nixpkgs": "nixpkgs_100", + "nixpkgs-4": "nixpkgs-4_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "./private/php", + "type": "path" + }, + "original": { + "path": "./private/php", + "type": "path" + } + }, + "s-private-ssh": { + "inputs": { + "environment": "environment_32", + "secrets": "secrets_25" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "./private/ssh", + "type": "path" + }, + "original": { + "path": "./private/ssh", + "type": "path" + } + }, + "s-private-system": { + "inputs": { + "backports": "backports_7", + "environment": "environment_33", + "mypackages": "mypackages_12", + "myuids": "myuids_42", + "secrets-public": "secrets-public_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "./private/system", + "type": "path" + }, + "original": { + "path": "./private/system", + "type": "path" + } + }, + "s-rsync_backup": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TxLsFx4DTTScMHkvR0pJgzYea6ILiu1Dl6LA67LtYGo=", + "path": "./rsync_backup", + "type": "path" + }, + "original": { + "path": "./rsync_backup", + "type": "path" + } + }, + "s-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "./secrets", + "type": "path" + }, + "original": { + "path": "./secrets", + "type": "path" + } + }, + "s-surfer": { + "inputs": { + "flake-utils": "flake-utils_62", + "mypackages": "mypackages_13", + "nixpkgs": "nixpkgs_104", + "surfer": "surfer_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=", + "path": "./surfer", + "type": "path" + }, + "original": { + "path": "./surfer", + "type": "path" + } + }, + "s-taskwarrior-web": { + "inputs": { + "flake-utils": "flake-utils_63", + "nixpkgs": "nixpkgs_105", + "taskwarrior-web": "taskwarrior-web_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=", + "path": "./taskwarrior-web", + "type": "path" + }, + "original": { + "path": "./taskwarrior-web", + "type": "path" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_16": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_17": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_18": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_19": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_20": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_21": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_22": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_23": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_24": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_25": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_26": { + "inputs": { + "nixpkgs": "nixpkgs_107" + }, + "locked": { + "lastModified": 1696144631, + "narHash": "sha256-zV7tbNrrrUpPkaATkc6OsQC8n75QybaBKsaD7d5kQGA=", + "ref": "master", + "rev": "ae51ac0227647e30348256067934b8c9eb7e3f06", + "revCount": 688, + "type": "git", + "url": "git+ssh://gitolite@git.immae.eu/perso/Immae/Config/Nix/Nixops/Secrets" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git+ssh://gitolite@git.immae.eu/perso/Immae/Config/Nix/Nixops/Secrets" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "ssh": { + "inputs": { + "environment": "environment_10", + "secrets": "secrets_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_2": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_3": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_4": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_5": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_6": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_7": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "surfer": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "surfer_2": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "system": { + "inputs": { + "backports": "backports", + "environment": "environment_7", + "mypackages": "mypackages", + "myuids": "myuids_6", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "system_2": { + "inputs": { + "backports": "backports_2", + "environment": "environment_11", + "mypackages": "mypackages_2", + "myuids": "myuids_8", + "secrets-public": "secrets-public_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "system_3": { + "inputs": { + "backports": "backports_4", + "environment": "environment_22", + "mypackages": "mypackages_7", + "myuids": "myuids_24", + "secrets-public": "secrets-public_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "system_4": { + "inputs": { + "backports": "backports_5", + "environment": "environment_25", + "mypackages": "mypackages_8", + "myuids": "myuids_27", + "secrets-public": "secrets-public_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "taskwarrior-web": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + }, + "taskwarrior-web_2": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "main-flake", + "n-backup-2", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "main-flake", + "n-dilion", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": [ + "main-flake", + "n-eldiron", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_4": { + "inputs": { + "nixpkgs": [ + "main-flake", + "n-monitoring-1", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_5": { + "inputs": { + "nixpkgs": [ + "main-flake", + "n-quatresaisons", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_6": { + "inputs": { + "nixpkgs": [ + "main-flake", + "n-zoldene", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_7": { + "inputs": { + "nixpkgs": [ + "main-flake", + "s-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_10": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_11": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_12": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_13": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_14": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_15": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_2": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_3": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_4": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_5": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_6": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_7": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_8": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_9": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/deploy/flake.nix b/deploy/flake.nix new file mode 100644 index 0000000..f613b19 --- /dev/null +++ b/deploy/flake.nix @@ -0,0 +1,45 @@ +{ + inputs = { + devshell.url = "github:numtide/devshell"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable?dir=lib"; + # Uncomment temporarily below value and replace with local path to + # your secrets, and replace "follows" key below to use it. + #secrets-local.url = "path:/home/immae/projets/mes_sites/nixops-secrets"; + secrets = { + type = "git"; + url = "git+ssh://gitolite@git.immae.eu/perso/Immae/Config/Nix/Nixops/Secrets"; + ref = "master"; + }; + main-flake.url = "path:../flakes"; + main-flake.inputs.secrets.follows = "secrets"; + }; + outputs = inputs@{ self, nixpkgs, main-flake, devshell, ... }: { + sops-vars-file = (inputs.secrets-local or inputs.secrets).vars-file; + # FIXME: next line Can be removed in nix 2.16.* + devShell.x86_64-linux = self.devShells.x86_64-linux.default; + devShells.x86_64-linux.default = devshell.legacyPackages.x86_64-linux.mkShell { + env = [ + { name = "NIX_BUILD_TOP"; value = ""; } + { name = "SOPS_VARS_FILE"; value = builtins.toString self.sops-vars-file; } + ]; + }; + colmena = + let + nodeFlakes = main-flake.subflakes.nodes; + hosts = builtins.attrNames nodeFlakes; + toHostNixpkgs = name: nodeFlakes.${name}.colmena.meta.nixpkgs; + toHostSpecialArgs = name: nodeFlakes.${name}.colmena.meta.specialArgs; + toHostColmena = name: nodeFlakes.${name}.colmena.${name}; + + in nixpkgs.lib.genAttrs hosts toHostColmena + // { + meta = { + # nixpkgs is required for colmena, but only lib is actually used + nixpkgs.lib = nixpkgs.lib; + specialArgs.secrets = main-flake.subflakes.secrets; + nodeNixpkgs = nixpkgs.lib.genAttrs hosts toHostNixpkgs; + nodeSpecialArgs = nixpkgs.lib.genAttrs hosts toHostSpecialArgs; + }; + }; + }; +} diff --git a/environments/default.nix b/environments/default.nix deleted file mode 100644 index 5f17eb9..0000000 --- a/environments/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ callPackage }: -{ - immae-eu = callPackage ./immae-eu.nix {}; -} diff --git a/environments/immae-eu.nix b/environments/immae-eu.nix deleted file mode 100644 index 4def84b..0000000 --- a/environments/immae-eu.nix +++ /dev/null @@ -1,146 +0,0 @@ -{ pkgs }: with pkgs; -let - # https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh - # https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks - vlock' = vlock.overrideAttrs(old: { - configureFlags = old.configureFlags ++ [ "--enable-root-password=no" ]; - }); - paths = [ - # archives - lzo unzip bzip2 xz - # unrar is unfree - - # backups - duply - - # calendar/contacts - abook khard khal cadaver vdirsyncerStable pal - - # computing - boinctui - - # cryptocurrencies - monero - cointop - # failing xmr-stak - solc - iota-cli-app - - # debugging - rr valgrind netcat-gnu strace shellcheck - - # documentations - unicodeDoc - - # e-mails - muttprint mutt-ics - notmuch-python2 notmuch-python3 notmuch-vim - neomutt mairix - bogofilter fetchmail - sieve-connect - - # git - vcsh gitRepo stgit tig ripgrep mr - - # graphical tools - nextcloud-client firefox - dwm dmenu st xorg.xauth tigervnc - - # images - feh imagemagick tiv graphicsmagick qrcode - - # internet browsing - w3m lynx links elinks browsh woob urlview urlscan googler urlwatch - - # less - python3Packages.pygments lesspipe highlight sourceHighlight - - # monitoring - cnagios mtop pg_activity nagios-cli mtr - iftop htop iotop iperf bonfire - goaccess tcpdump tshark tcpflow - mitmproxy - # nagnu - - # messaging/forums/news - flrn slrn - signal-cli signaldctl - telegram-cli telegram-history-dump telegramircd - weechat profanity - newsboat irssi - - # nix - yarn2nix-moretea.yarn2nix nixUnstable - nixops nix-prefetch-scripts nix-generate-from-cpan - bundix nodePackages.bower2nix nix-diff - nodePackages.node2nix niv - # (nixos {}).nixos-generate-config - # (nixos {}).nixos-install - # (nixos {}).nixos-enter - # (nixos {}).manual.manpages - - # note taking - note terminal-velocity jrnl doing nb - - # office - sc-im ranger - genius bc - ledger - tmux - rtorrent - ldapvi - fzf - buku - vimPlugins.vim-plug - (vim_configurable.override { python = python3; }) - mailcap - webapps.surfer - - # password management - (pass.withExtensions (exts: [ exts.pass-otp ])) apg pwgen - - # pdf - pdftk poppler_utils - - # programming - pelican emacs26-nox ctags - wdiff patch gnumake - - # security - keybase gnupg - - # todolist/time management - taskwarrior vit timewarrior taskopen - bugwarrior - - # video/music - youtube-dl ncmpc ncmpcpp ffmpeg - - # s6 tools (part of skawarePackages) - skalibs execline s6 s6-dns s6-linux-utils s6-networking - s6-portable-utils - - # system tools - telnet bind.dnsutils httpie ngrep nmap p0f socat lsof psmisc - wget patchelf rename tmux (lib.meta.hiPrio nettools) - vlock' mosh manpages openssl openssl.doc openssl.man - sshfs ncdu procps-ng - - # other tools - pgloader s3cmd lftp jq cpulimit libxslt gandi-cli bubblewrap - - # Terraform + AWS - terraform_0_12 awscli - ansible python3Packages.boto - openvpn - - zsh-completions - ]; -in -buildEnv { - name = "immae-eu-packages"; - inherit paths; - pathsToLink = [ "/bin" "/etc" "/include" "/lib" "/libexec" "/share"]; - extraOutputsToInstall = [ "bin" "man" "doc" "info" ]; - passthru = { packages = paths; }; -} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..b109986 --- /dev/null +++ b/flake.lock @@ -0,0 +1,9825 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_6", + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_2": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_3": { + "inputs": { + "flake-utils": "flake-utils_20", + "nixpkgs": "nixpkgs_34" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_4": { + "inputs": { + "flake-utils": "flake-utils_34", + "nixpkgs": "nixpkgs_57" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_5": { + "inputs": { + "flake-utils": "flake-utils_37", + "nixpkgs": "nixpkgs_65" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_6": { + "inputs": { + "flake-utils": "flake-utils_39", + "nixpkgs": "nixpkgs_72" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "backports_7": { + "inputs": { + "flake-utils": "flake-utils_61", + "nixpkgs": "nixpkgs_101" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "buildslist": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "buildslist_2": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "chatons": { + "inputs": { + "environment": "environment" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "chatons_2": { + "inputs": { + "environment": "environment_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_4", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_2": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_7", + "nixpkgs": "nixpkgs_13", + "stable": "stable_2" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_3": { + "inputs": { + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_10", + "nixpkgs": "nixpkgs_20", + "stable": "stable_3" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_4": { + "inputs": { + "flake-compat": "flake-compat_4", + "flake-utils": "flake-utils_32", + "nixpkgs": "nixpkgs_51", + "stable": "stable_4" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_5": { + "inputs": { + "flake-compat": "flake-compat_5", + "flake-utils": "flake-utils_35", + "nixpkgs": "nixpkgs_59", + "stable": "stable_5" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_6": { + "inputs": { + "flake-compat": "flake-compat_6", + "flake-utils": "flake-utils_38", + "nixpkgs": "nixpkgs_67", + "stable": "stable_6" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "colmena_7": { + "inputs": { + "flake-compat": "flake-compat_7", + "flake-utils": "flake-utils_45", + "nixpkgs": "nixpkgs_81", + "stable": "stable_7" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "copanier": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "copanier_2": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "devshell": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1688380630, + "narHash": "sha256-8ilApWVb1mAi4439zS3iFeIT0ODlbrifm/fegWwgHjA=", + "owner": "numtide", + "repo": "devshell", + "rev": "f9238ec3d75cefbb2b42a44948c4e8fb1ae9a205", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "diaspora": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "diaspora_2": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_2": { + "inputs": { + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_3": { + "inputs": { + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_4": { + "inputs": { + "nixpkgs": "nixpkgs_52" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_5": { + "inputs": { + "nixpkgs": "nixpkgs_60" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_6": { + "inputs": { + "nixpkgs": "nixpkgs_68" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "disko_7": { + "inputs": { + "nixpkgs": "nixpkgs_82" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "dns-nix": { + "inputs": { + "flake-utils": "flake-utils_9", + "nixpkgs": [ + "flakes", + "n-eldiron", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1635273082, + "narHash": "sha256-EHiDP2jEa7Ai5ZwIf5uld9RVFcV77+2SUxjQXwJsJa0=", + "owner": "kirelagin", + "repo": "dns.nix", + "rev": "c7b9645da9c0ddce4f9de4ef27ec01bb8108039a", + "type": "github" + }, + "original": { + "owner": "kirelagin", + "repo": "dns.nix", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_16": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_17": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_18": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_19": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_20": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_21": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_22": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_23": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_24": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_25": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_26": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_27": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_28": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_29": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_30": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_31": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_32": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_33": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "etherpad-lite": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "etherpad-lite_2": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "files-watcher_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "files-watcher_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "files-watcher_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "files-watcher_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "files-watcher_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_7": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_10": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_13" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_11": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_14" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_12": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_16" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_13": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_17" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_14": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_19" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_15": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_20" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_16": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_21" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_17": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_22" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_18": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_23" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_19": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_24" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_20": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_25" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_21": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_26" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_22": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_28" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_23": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_29" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_4" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_7" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_8" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_7": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_10" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_8": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_11" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_9": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_12" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_10": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_11": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_12": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_13": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_14": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_15": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_16": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_17": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_18": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_19": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_20": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_21": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_22": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_23": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_24": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_25": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_26": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_27": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_28": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_29": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_30": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_31": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_32": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_33": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_34": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_35": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_36": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_37": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_38": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_39": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_40": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_41": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_42": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_43": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_44": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_45": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_46": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_47": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_48": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_49": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_50": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_51": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_52": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_53": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_54": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_55": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_56": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_57": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_58": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_59": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_60": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_61": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_62": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_63": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_9": { + "locked": { + "lastModified": 1614513358, + "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakes": { + "inputs": { + "n-backup-2": "n-backup-2", + "n-dilion": "n-dilion", + "n-eldiron": "n-eldiron", + "n-monitoring-1": "n-monitoring-1", + "n-quatresaisons": "n-quatresaisons", + "n-zoldene": "n-zoldene", + "s-backports": "s-backports", + "s-copanier": "s-copanier", + "s-diaspora": "s-diaspora", + "s-etherpad-lite": "s-etherpad-lite", + "s-fiche": "s-fiche", + "s-files-watcher": "s-files-watcher", + "s-grocy": "s-grocy", + "s-lib": "s-lib", + "s-loginctl-linger": "s-loginctl-linger", + "s-mastodon": "s-mastodon", + "s-mediagoblin": "s-mediagoblin", + "s-multi-apache-container": "s-multi-apache-container", + "s-mypackages": "s-mypackages", + "s-myuids": "s-myuids", + "s-naemon": "s-naemon", + "s-openarc": "s-openarc", + "s-opendmarc": "s-opendmarc", + "s-paste": "s-paste", + "s-peertube": "s-peertube", + "s-private-buildbot": "s-private-buildbot", + "s-private-chatons": "s-private-chatons", + "s-private-environment": "s-private-environment", + "s-private-mail-relay": "s-private-mail-relay", + "s-private-milters": "s-private-milters", + "s-private-monitoring": "s-private-monitoring", + "s-private-openarc": "s-private-openarc", + "s-private-opendmarc": "s-private-opendmarc", + "s-private-openldap": "s-private-openldap", + "s-private-paste": "s-private-paste", + "s-private-peertube": "s-private-peertube", + "s-private-php": "s-private-php", + "s-private-ssh": "s-private-ssh", + "s-private-system": "s-private-system", + "s-rsync_backup": "s-rsync_backup", + "s-secrets": "s-secrets", + "s-surfer": "s-surfer", + "s-taskwarrior-web": "s-taskwarrior-web", + "secrets": "secrets_26" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LBw8FCxHXW6b1WFvsEnmLmNpZjow6+N4Q+3zAfcudIU=", + "path": "./flakes", + "type": "path" + }, + "original": { + "path": "./flakes", + "type": "path" + } + }, + "grocy": { + "flake": false, + "locked": { + "lastModified": 1585166193, + "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=", + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + }, + "original": { + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + } + }, + "grocy_2": { + "flake": false, + "locked": { + "lastModified": 1585166193, + "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=", + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + }, + "original": { + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1684264534, + "narHash": "sha256-K0zr+ry3FwIo3rN2U/VWAkCJSgBslBisvfRIPwMbuCQ=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "89253fb1518063556edd5e54509c30ac3089d5e6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "impermanence", + "type": "github" + } + }, + "landing-page": { + "flake": false, + "locked": { + "lastModified": 1691524124, + "narHash": "sha256-JyHb02qUrct2t+dgaiOcT5KS8RHkXygjWQXl+55gSMY=", + "ref": "main", + "rev": "018344d9116b506c662ecdcee2d0d505c857f1cf", + "revCount": 573, + "type": "git", + "url": "https://github.com/bastienwirtz/homer.git" + }, + "original": { + "ref": "main", + "type": "git", + "url": "https://github.com/bastienwirtz/homer.git" + } + }, + "loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "loginctl-linger_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "loginctl-linger_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "mail-relay": { + "inputs": { + "environment": "environment_3", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "../../flakes/private/mail-relay", + "type": "path" + }, + "original": { + "path": "../../flakes/private/mail-relay", + "type": "path" + } + }, + "mail-relay_2": { + "inputs": { + "environment": "environment_20", + "secrets": "secrets_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "../../flakes/private/mail-relay", + "type": "path" + }, + "original": { + "path": "../../flakes/private/mail-relay", + "type": "path" + } + }, + "mastodon": { + "flake": false, + "locked": { + "lastModified": 1582790581, + "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=", + "owner": "tootsuite", + "repo": "mastodon", + "rev": "9bace2dd88d127d396794375c8fcb2132619a799", + "type": "github" + }, + "original": { + "owner": "tootsuite", + "ref": "v2.9.4", + "repo": "mastodon", + "type": "github" + } + }, + "mastodon_2": { + "flake": false, + "locked": { + "lastModified": 1582790581, + "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=", + "owner": "tootsuite", + "repo": "mastodon", + "rev": "9bace2dd88d127d396794375c8fcb2132619a799", + "type": "github" + }, + "original": { + "owner": "tootsuite", + "ref": "v2.9.4", + "repo": "mastodon", + "type": "github" + } + }, + "mediagoblin": { + "flake": false, + "locked": { + "lastModified": 1531090939, + "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=", + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "revCount": 4805, + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + }, + "original": { + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + } + }, + "mediagoblin_2": { + "flake": false, + "locked": { + "lastModified": 1531090939, + "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=", + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "revCount": 4805, + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + }, + "original": { + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + } + }, + "milters": { + "inputs": { + "environment": "environment_4", + "files-watcher": "files-watcher", + "openarc": "openarc", + "opendmarc": "opendmarc", + "secrets": "secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "monitoring": { + "inputs": { + "environment": "environment_5", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib_2", + "secrets": "secrets_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "monitoring_2": { + "inputs": { + "environment": "environment_9", + "naemon": "naemon_2", + "nixpkgs-lib": "nixpkgs-lib_5", + "secrets": "secrets_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "monitoring_3": { + "inputs": { + "environment": "environment_21", + "naemon": "naemon_4", + "nixpkgs-lib": "nixpkgs-lib_15", + "secrets": "secrets_16" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "monitoring_4": { + "inputs": { + "environment": "environment_24", + "naemon": "naemon_5", + "nixpkgs-lib": "nixpkgs-lib_18", + "secrets": "secrets_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_11", + "myuids": "myuids_25" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts_2", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_2": { + "inputs": { + "colmena": "colmena_2", + "disko": "disko_2", + "flake-parts": "flake-parts_4", + "nixos-anywhere": "nixos-anywhere_2", + "nixpkgs": "nixpkgs_16" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_3": { + "inputs": { + "colmena": "colmena_3", + "disko": "disko_3", + "flake-parts": "flake-parts_6", + "nixos-anywhere": "nixos-anywhere_3", + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_4": { + "inputs": { + "colmena": "colmena_4", + "disko": "disko_4", + "flake-parts": "flake-parts_12", + "nixos-anywhere": "nixos-anywhere_4", + "nixpkgs": "nixpkgs_54" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_5": { + "inputs": { + "colmena": "colmena_5", + "disko": "disko_5", + "flake-parts": "flake-parts_14", + "nixos-anywhere": "nixos-anywhere_5", + "nixpkgs": "nixpkgs_62" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "my-lib_6": { + "inputs": { + "colmena": "colmena_6", + "disko": "disko_6", + "flake-parts": "flake-parts_16", + "nixos-anywhere": "nixos-anywhere_6", + "nixpkgs": "nixpkgs_70" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": "nixpkgs_12", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_10": { + "inputs": { + "flake-parts": "flake-parts_18", + "nixpkgs": "nixpkgs_77", + "webapps-ttrss": "webapps-ttrss_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_11": { + "inputs": { + "flake-parts": "flake-parts_19", + "nixpkgs": "nixpkgs_79", + "webapps-ttrss": "webapps-ttrss_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_12": { + "inputs": { + "flake-parts": "flake-parts_22", + "nixpkgs": "nixpkgs_102", + "webapps-ttrss": "webapps-ttrss_14" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_13": { + "inputs": { + "flake-parts": "flake-parts_23", + "nixpkgs": "nixpkgs_103", + "webapps-ttrss": "webapps-ttrss_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_2": { + "inputs": { + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_19", + "webapps-ttrss": "webapps-ttrss_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_3": { + "inputs": { + "flake-parts": "flake-parts_7", + "nixpkgs": "nixpkgs_35", + "webapps-ttrss": "webapps-ttrss_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_4": { + "inputs": { + "flake-parts": "flake-parts_8", + "nixpkgs": "nixpkgs_38", + "webapps-ttrss": "webapps-ttrss_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_5": { + "inputs": { + "flake-parts": "flake-parts_9", + "nixpkgs": "nixpkgs_40", + "webapps-ttrss": "webapps-ttrss_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_6": { + "inputs": { + "flake-parts": "flake-parts_11", + "nixpkgs": "nixpkgs_48", + "webapps-ttrss": "webapps-ttrss_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_7": { + "inputs": { + "flake-parts": "flake-parts_13", + "nixpkgs": "nixpkgs_58", + "webapps-ttrss": "webapps-ttrss_8" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_8": { + "inputs": { + "flake-parts": "flake-parts_15", + "nixpkgs": "nixpkgs_66", + "webapps-ttrss": "webapps-ttrss_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_9": { + "inputs": { + "flake-parts": "flake-parts_17", + "nixpkgs": "nixpkgs_73", + "webapps-ttrss": "webapps-ttrss_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_16": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_17": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_18": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_19": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_20": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_21": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_22": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_23": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_24": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_25": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_26": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_27": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_28": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_29": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_30": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_31": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_32": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_33": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_34": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_35": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_36": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_37": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_38": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_39": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_40": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_41": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_42": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "n-backup-2": { + "inputs": { + "chatons": "chatons", + "environment": "environment_2", + "loginctl-linger": "loginctl-linger", + "mail-relay": "mail-relay", + "milters": "milters", + "monitoring": "monitoring", + "my-lib": "my-lib", + "myuids": "myuids_3", + "nixpkgs": "nixpkgs_8", + "openarc": "openarc_3", + "opendmarc": "opendmarc_2", + "openldap": "openldap", + "rsync_backup": "rsync_backup", + "secrets": "secrets_6", + "system": "system" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0CPGGyOWQadU9c8y+A4XtveOrmkMlFiH+WJ55RPzJnE=", + "path": "../systems/backup-2", + "type": "path" + }, + "original": { + "path": "../systems/backup-2", + "type": "path" + } + }, + "n-dilion": { + "inputs": { + "environment": "environment_8", + "files-watcher": "files-watcher_4", + "loginctl-linger": "loginctl-linger_2", + "monitoring": "monitoring_2", + "my-lib": "my-lib_2", + "myuids": "myuids_7", + "nixpkgs": "nixpkgs_17", + "secrets": "secrets_8", + "ssh": "ssh", + "system": "system_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Ctp8QY0OkGwv/YkOlipwM1ldEz7OebVDbAqg1O/tRe8=", + "path": "../systems/dilion", + "type": "path" + }, + "original": { + "path": "../systems/dilion", + "type": "path" + } + }, + "n-eldiron": { + "inputs": { + "dns-nix": "dns-nix", + "my-lib": "my-lib_3", + "nixpkgs": "nixpkgs_24", + "private-buildbot": "private-buildbot", + "private-chatons": "private-chatons", + "private-environment": "private-environment", + "private-milters": "private-milters", + "private-monitoring": "private-monitoring", + "private-openarc": "private-openarc", + "private-opendmarc": "private-opendmarc", + "private-openldap": "private-openldap", + "private-paste": "private-paste", + "private-peertube": "private-peertube", + "private-php": "private-php", + "private-ssh": "private-ssh", + "private-system": "private-system", + "public-copanier": "public-copanier", + "public-diaspora": "public-diaspora", + "public-etherpad-lite": "public-etherpad-lite", + "public-fiche": "public-fiche", + "public-files-watcher": "public-files-watcher", + "public-grocy": "public-grocy", + "public-loginctl-linger": "public-loginctl-linger", + "public-mastodon": "public-mastodon", + "public-mediagoblin": "public-mediagoblin", + "public-multi-apache-container": "public-multi-apache-container", + "public-mypackages": "public-mypackages", + "public-myuids": "public-myuids", + "public-openarc": "public-openarc", + "public-opendmarc": "public-opendmarc", + "public-peertube": "public-peertube", + "public-secrets": "public-secrets", + "public-surfer": "public-surfer", + "public-taskwarrior-web": "public-taskwarrior-web" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-g9f3SCavl9ssNr8Xw9Z8KkpeEwCYv+47dqwoIPneMSs=", + "path": "../systems/eldiron", + "type": "path" + }, + "original": { + "path": "../systems/eldiron", + "type": "path" + } + }, + "n-monitoring-1": { + "inputs": { + "chatons": "chatons_2", + "environment": "environment_19", + "files-watcher": "files-watcher_9", + "loginctl-linger": "loginctl-linger_3", + "mail-relay": "mail-relay_2", + "monitoring": "monitoring_3", + "my-lib": "my-lib_4", + "myuids": "myuids_23", + "nixpkgs": "nixpkgs_55", + "php": "php", + "secrets": "secrets_17", + "system": "system_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-kLIVhZAxEWcN3W1AaF/gmopYuRdq0U43jkA4hliY50I=", + "path": "../systems/monitoring-1", + "type": "path" + }, + "original": { + "path": "../systems/monitoring-1", + "type": "path" + } + }, + "n-quatresaisons": { + "inputs": { + "environment": "environment_23", + "files-watcher": "files-watcher_10", + "landing-page": "landing-page", + "monitoring": "monitoring_4", + "multi-apache-container": "multi-apache-container", + "my-lib": "my-lib_5", + "myuids": "myuids_26", + "nixpkgs": "nixpkgs_63", + "php": "php_2", + "secrets": "secrets_19", + "system": "system_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-FtjFgqcSXs0dTkbUggbPwaDeCoOoYZragHCUkcyq538=", + "path": "../systems/quatresaisons", + "type": "path" + }, + "original": { + "path": "../systems/quatresaisons", + "type": "path" + } + }, + "n-zoldene": { + "inputs": { + "impermanence": "impermanence", + "my-lib": "my-lib_6", + "nixpkgs": "nixpkgs_71", + "private-environment": "private-environment_2", + "private-system": "private-system_2", + "public-secrets": "public-secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-YSYLjETf7yMwdHeEisU1V7e5O3yB+YxVoIPLi00PCdo=", + "path": "../systems/zoldene", + "type": "path" + }, + "original": { + "path": "../systems/zoldene", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "naemon_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_2": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_3": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_4": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_5": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_6": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-2305_7": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "flakes", + "n-backup-2", + "my-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "n-backup-2", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_6", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_2": { + "inputs": { + "disko": [ + "flakes", + "n-dilion", + "my-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "n-dilion", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_2", + "nixos-images": "nixos-images_2", + "nixpkgs": "nixpkgs_15", + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_3": { + "inputs": { + "disko": [ + "flakes", + "n-eldiron", + "my-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "n-eldiron", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_3", + "nixos-images": "nixos-images_3", + "nixpkgs": "nixpkgs_22", + "treefmt-nix": "treefmt-nix_3" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_4": { + "inputs": { + "disko": [ + "flakes", + "n-monitoring-1", + "my-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "n-monitoring-1", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_4", + "nixos-images": "nixos-images_4", + "nixpkgs": "nixpkgs_53", + "treefmt-nix": "treefmt-nix_4" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_5": { + "inputs": { + "disko": [ + "flakes", + "n-quatresaisons", + "my-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "n-quatresaisons", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_5", + "nixos-images": "nixos-images_5", + "nixpkgs": "nixpkgs_61", + "treefmt-nix": "treefmt-nix_5" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_6": { + "inputs": { + "disko": [ + "flakes", + "n-zoldene", + "my-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "n-zoldene", + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_6", + "nixos-images": "nixos-images_6", + "nixpkgs": "nixpkgs_69", + "treefmt-nix": "treefmt-nix_6" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-anywhere_7": { + "inputs": { + "disko": [ + "flakes", + "s-lib", + "disko" + ], + "flake-parts": [ + "flakes", + "s-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305_7", + "nixos-images": "nixos-images_7", + "nixpkgs": "nixpkgs_83", + "treefmt-nix": "treefmt-nix_7" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "flakes", + "n-backup-2", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "n-backup-2", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_2": { + "inputs": { + "nixos-2305": [ + "flakes", + "n-dilion", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "n-dilion", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_3": { + "inputs": { + "nixos-2305": [ + "flakes", + "n-eldiron", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "n-eldiron", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_4": { + "inputs": { + "nixos-2305": [ + "flakes", + "n-monitoring-1", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "n-monitoring-1", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_5": { + "inputs": { + "nixos-2305": [ + "flakes", + "n-quatresaisons", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "n-quatresaisons", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_6": { + "inputs": { + "nixos-2305": [ + "flakes", + "n-zoldene", + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "n-zoldene", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-images_7": { + "inputs": { + "nixos-2305": [ + "flakes", + "s-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "flakes", + "s-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1677383253, + "narHash": "sha256-UfpzWfSxkfXHnb4boXZNaKsAcUrZT9Hw+tao1oZxd08=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9952d6bc395f5841262b006fbace8dd7e143b634", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-4_2": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-4_3": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-4_4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_10": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_11": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_12": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_13": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_14": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_15": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_16": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_17": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_18": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_19": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_20": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_21": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_22": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_23": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_24": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_25": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_26": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_27": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_28": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_29": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_4": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_5": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_6": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_7": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_8": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_9": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_100": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_101": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_102": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_103": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_104": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_105": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_106": { + "locked": { + "lastModified": 1692447944, + "narHash": "sha256-fkJGNjEmTPvqBs215EQU4r9ivecV5Qge5cF/QDLVn3U=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d680ded26da5cf104dd2735a51e88d2d8f487b4d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_17": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_18": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_22": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_23": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_24": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_25": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_26": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_27": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_28": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_29": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_30": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_31": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_32": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_33": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_34": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_35": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_36": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_37": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_38": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_39": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_40": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_41": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_42": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_43": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_44": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_45": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_46": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_47": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_48": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_49": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_50": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_51": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_52": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_53": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_54": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_55": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_56": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_57": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_58": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_59": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_60": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_61": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_62": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_63": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_64": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_65": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_66": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_67": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_68": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_69": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_70": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_71": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_72": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_73": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_74": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_75": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_76": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_77": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_78": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_79": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_80": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_81": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_82": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_83": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_84": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_85": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_86": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_87": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_88": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_89": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_90": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_91": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_92": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_93": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_94": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_95": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_96": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_97": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_98": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_99": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "openarc": { + "inputs": { + "flake-utils": "flake-utils", + "myuids": "myuids", + "nixpkgs": "nixpkgs_2", + "openarc": "openarc_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_10": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_11": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_12": { + "inputs": { + "flake-utils": "flake-utils_53", + "myuids": "myuids_36", + "nixpkgs": "nixpkgs_93", + "openarc": "openarc_13" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_13": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_14": { + "inputs": { + "flake-utils": "flake-utils_55", + "myuids": "myuids_38", + "nixpkgs": "nixpkgs_95", + "openarc": "openarc_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_15": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_2": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_3": { + "inputs": { + "files-watcher": "files-watcher_2", + "openarc": "openarc_4", + "secrets": "secrets_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "openarc_4": { + "inputs": { + "flake-utils": "flake-utils_4", + "myuids": "myuids_4", + "nixpkgs": "nixpkgs_9", + "openarc": "openarc_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_5": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_6": { + "inputs": { + "flake-utils": "flake-utils_12", + "myuids": "myuids_9", + "nixpkgs": "nixpkgs_26", + "openarc": "openarc_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_7": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_8": { + "inputs": { + "flake-utils": "flake-utils_14", + "myuids": "myuids_11", + "nixpkgs": "nixpkgs_28", + "openarc": "openarc_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_9": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "opendmarc": { + "inputs": { + "flake-utils": "flake-utils_2", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_2": { + "inputs": { + "environment": "environment_6", + "files-watcher": "files-watcher_3", + "opendmarc": "opendmarc_3", + "secrets": "secrets_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "opendmarc_3": { + "inputs": { + "flake-utils": "flake-utils_5", + "myuids": "myuids_5", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_4": { + "inputs": { + "flake-utils": "flake-utils_13", + "myuids": "myuids_10", + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_5": { + "inputs": { + "flake-utils": "flake-utils_15", + "myuids": "myuids_12", + "nixpkgs": "nixpkgs_29" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_6": { + "inputs": { + "flake-utils": "flake-utils_54", + "myuids": "myuids_37", + "nixpkgs": "nixpkgs_94" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_7": { + "inputs": { + "flake-utils": "flake-utils_56", + "myuids": "myuids_39", + "nixpkgs": "nixpkgs_96" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "paste": { + "inputs": { + "flake-utils": "flake-utils_16", + "nixpkgs": "nixpkgs_30" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "../../paste", + "type": "path" + }, + "original": { + "path": "../../paste", + "type": "path" + } + }, + "paste_2": { + "inputs": { + "flake-utils": "flake-utils_57", + "nixpkgs": "nixpkgs_97" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "../../paste", + "type": "path" + }, + "original": { + "path": "../../paste", + "type": "path" + } + }, + "peertube": { + "flake": false, + "locked": { + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_2": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_3": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_4": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_5": { + "flake": false, + "locked": { + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_6": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_open_instance": { + "inputs": { + "flake-utils": "flake-utils_17", + "myuids": "myuids_13", + "nixpkgs": "nixpkgs_31", + "peertube": "peertube" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_open_instance_2": { + "inputs": { + "flake-utils": "flake-utils_58", + "myuids": "myuids_40", + "nixpkgs": "nixpkgs_98", + "peertube": "peertube_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_origin": { + "inputs": { + "flake-utils": "flake-utils_18", + "myuids": "myuids_14", + "nixpkgs": "nixpkgs_32", + "peertube": "peertube_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_origin_2": { + "inputs": { + "flake-utils": "flake-utils_59", + "myuids": "myuids_41", + "nixpkgs": "nixpkgs_99", + "peertube": "peertube_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "php": { + "inputs": { + "flake-utils": "flake-utils_33", + "nixpkgs": "nixpkgs_56", + "nixpkgs-4": "nixpkgs-4_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "php_2": { + "inputs": { + "flake-utils": "flake-utils_36", + "nixpkgs": "nixpkgs_64", + "nixpkgs-4": "nixpkgs-4_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "private-buildbot": { + "inputs": { + "buildslist": "buildslist", + "flake-utils": "flake-utils_11", + "nixpkgs": "nixpkgs_25" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=", + "path": "../../flakes/private/buildbot", + "type": "path" + }, + "original": { + "path": "../../flakes/private/buildbot", + "type": "path" + } + }, + "private-chatons": { + "inputs": { + "environment": "environment_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-milters": { + "inputs": { + "environment": "environment_13", + "files-watcher": "files-watcher_5", + "openarc": "openarc_6", + "opendmarc": "opendmarc_4", + "secrets": "secrets_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "private-monitoring": { + "inputs": { + "environment": "environment_14", + "naemon": "naemon_3", + "nixpkgs-lib": "nixpkgs-lib_9", + "secrets": "secrets_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "private-openarc": { + "inputs": { + "files-watcher": "files-watcher_6", + "openarc": "openarc_8", + "secrets": "secrets_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "private-opendmarc": { + "inputs": { + "environment": "environment_15", + "files-watcher": "files-watcher_7", + "opendmarc": "opendmarc_5", + "secrets": "secrets_13" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "private-openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "private-paste": { + "inputs": { + "paste": "paste" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=", + "path": "../../flakes/private/paste", + "type": "path" + }, + "original": { + "path": "../../flakes/private/paste", + "type": "path" + } + }, + "private-peertube": { + "inputs": { + "peertube_open_instance": "peertube_open_instance", + "peertube_origin": "peertube_origin" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=", + "path": "../../flakes/private/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/private/peertube", + "type": "path" + } + }, + "private-php": { + "inputs": { + "flake-utils": "flake-utils_19", + "nixpkgs": "nixpkgs_33", + "nixpkgs-4": "nixpkgs-4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "private-ssh": { + "inputs": { + "environment": "environment_16", + "secrets": "secrets_14" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "private-system": { + "inputs": { + "backports": "backports_3", + "environment": "environment_17", + "mypackages": "mypackages_3", + "myuids": "myuids_15", + "secrets-public": "secrets-public_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "private-system_2": { + "inputs": { + "backports": "backports_6", + "environment": "environment_26", + "mypackages": "mypackages_9", + "myuids": "myuids_28", + "secrets-public": "secrets-public_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "public-copanier": { + "inputs": { + "copanier": "copanier", + "flake-utils": "flake-utils_21", + "nixpkgs": "nixpkgs_36" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=", + "path": "../../flakes/copanier", + "type": "path" + }, + "original": { + "path": "../../flakes/copanier", + "type": "path" + } + }, + "public-diaspora": { + "inputs": { + "diaspora": "diaspora", + "flake-utils": "flake-utils_22", + "myuids": "myuids_16", + "nixpkgs": "nixpkgs_37" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=", + "path": "../../flakes/diaspora", + "type": "path" + }, + "original": { + "path": "../../flakes/diaspora", + "type": "path" + } + }, + "public-etherpad-lite": { + "inputs": { + "etherpad-lite": "etherpad-lite", + "flake-utils": "flake-utils_23", + "mypackages": "mypackages_4", + "nixpkgs": "nixpkgs_39" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=", + "path": "../../flakes/etherpad-lite", + "type": "path" + }, + "original": { + "path": "../../flakes/etherpad-lite", + "type": "path" + } + }, + "public-fiche": { + "locked": { + "lastModified": 1, + "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=", + "path": "../../flakes/fiche", + "type": "path" + }, + "original": { + "path": "../../flakes/fiche", + "type": "path" + } + }, + "public-files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "public-grocy": { + "inputs": { + "flake-utils": "flake-utils_24", + "grocy": "grocy", + "mypackages": "mypackages_5", + "nixpkgs": "nixpkgs_41" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=", + "path": "../../flakes/grocy", + "type": "path" + }, + "original": { + "path": "../../flakes/grocy", + "type": "path" + } + }, + "public-loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "public-mastodon": { + "inputs": { + "flake-utils": "flake-utils_25", + "mastodon": "mastodon", + "myuids": "myuids_17", + "nixpkgs": "nixpkgs_42" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=", + "path": "../../flakes/mastodon", + "type": "path" + }, + "original": { + "path": "../../flakes/mastodon", + "type": "path" + } + }, + "public-mediagoblin": { + "inputs": { + "flake-utils": "flake-utils_26", + "mediagoblin": "mediagoblin", + "myuids": "myuids_18", + "nixpkgs": "nixpkgs_43" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=", + "path": "../../flakes/mediagoblin", + "type": "path" + }, + "original": { + "path": "../../flakes/mediagoblin", + "type": "path" + } + }, + "public-multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_8", + "myuids": "myuids_19" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "public-mypackages": { + "inputs": { + "flake-parts": "flake-parts_10", + "nixpkgs": "nixpkgs_44", + "webapps-ttrss": "webapps-ttrss_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../flakes/mypackages", + "type": "path" + }, + "original": { + "path": "../../flakes/mypackages", + "type": "path" + } + }, + "public-myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "public-openarc": { + "inputs": { + "flake-utils": "flake-utils_27", + "myuids": "myuids_20", + "nixpkgs": "nixpkgs_45", + "openarc": "openarc_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../flakes/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/openarc", + "type": "path" + } + }, + "public-opendmarc": { + "inputs": { + "flake-utils": "flake-utils_28", + "myuids": "myuids_21", + "nixpkgs": "nixpkgs_46" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../flakes/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/opendmarc", + "type": "path" + } + }, + "public-peertube": { + "inputs": { + "flake-utils": "flake-utils_29", + "myuids": "myuids_22", + "nixpkgs": "nixpkgs_47", + "peertube": "peertube_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "../../flakes/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/peertube", + "type": "path" + } + }, + "public-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "public-secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "public-surfer": { + "inputs": { + "flake-utils": "flake-utils_30", + "mypackages": "mypackages_6", + "nixpkgs": "nixpkgs_49", + "surfer": "surfer" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=", + "path": "../../flakes/surfer", + "type": "path" + }, + "original": { + "path": "../../flakes/surfer", + "type": "path" + } + }, + "public-taskwarrior-web": { + "inputs": { + "flake-utils": "flake-utils_31", + "nixpkgs": "nixpkgs_50", + "taskwarrior-web": "taskwarrior-web" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=", + "path": "../../flakes/taskwarrior-web", + "type": "path" + }, + "original": { + "path": "../../flakes/taskwarrior-web", + "type": "path" + } + }, + "root": { + "inputs": { + "devshell": "devshell", + "flake-parts": "flake-parts", + "flakes": "flakes", + "nixpkgs": "nixpkgs_106" + } + }, + "rsync_backup": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TxLsFx4DTTScMHkvR0pJgzYea6ILiu1Dl6LA67LtYGo=", + "path": "../../flakes/rsync_backup", + "type": "path" + }, + "original": { + "path": "../../flakes/rsync_backup", + "type": "path" + } + }, + "s-backports": { + "inputs": { + "flake-utils": "flake-utils_40", + "nixpkgs": "nixpkgs_74" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "./backports", + "type": "path" + }, + "original": { + "path": "./backports", + "type": "path" + } + }, + "s-copanier": { + "inputs": { + "copanier": "copanier_2", + "flake-utils": "flake-utils_41", + "nixpkgs": "nixpkgs_75" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=", + "path": "./copanier", + "type": "path" + }, + "original": { + "path": "./copanier", + "type": "path" + } + }, + "s-diaspora": { + "inputs": { + "diaspora": "diaspora_2", + "flake-utils": "flake-utils_42", + "myuids": "myuids_29", + "nixpkgs": "nixpkgs_76" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=", + "path": "./diaspora", + "type": "path" + }, + "original": { + "path": "./diaspora", + "type": "path" + } + }, + "s-etherpad-lite": { + "inputs": { + "etherpad-lite": "etherpad-lite_2", + "flake-utils": "flake-utils_43", + "mypackages": "mypackages_10", + "nixpkgs": "nixpkgs_78" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=", + "path": "./etherpad-lite", + "type": "path" + }, + "original": { + "path": "./etherpad-lite", + "type": "path" + } + }, + "s-fiche": { + "locked": { + "lastModified": 1, + "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=", + "path": "./fiche", + "type": "path" + }, + "original": { + "path": "./fiche", + "type": "path" + } + }, + "s-files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "./files-watcher", + "type": "path" + }, + "original": { + "path": "./files-watcher", + "type": "path" + } + }, + "s-grocy": { + "inputs": { + "flake-utils": "flake-utils_44", + "grocy": "grocy_2", + "mypackages": "mypackages_11", + "nixpkgs": "nixpkgs_80" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=", + "path": "./grocy", + "type": "path" + }, + "original": { + "path": "./grocy", + "type": "path" + } + }, + "s-lib": { + "inputs": { + "colmena": "colmena_7", + "disko": "disko_7", + "flake-parts": "flake-parts_20", + "nixos-anywhere": "nixos-anywhere_7", + "nixpkgs": "nixpkgs_84" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "./lib", + "type": "path" + }, + "original": { + "path": "./lib", + "type": "path" + } + }, + "s-loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "./loginctl-linger", + "type": "path" + }, + "original": { + "path": "./loginctl-linger", + "type": "path" + } + }, + "s-mastodon": { + "inputs": { + "flake-utils": "flake-utils_46", + "mastodon": "mastodon_2", + "myuids": "myuids_30", + "nixpkgs": "nixpkgs_85" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=", + "path": "./mastodon", + "type": "path" + }, + "original": { + "path": "./mastodon", + "type": "path" + } + }, + "s-mediagoblin": { + "inputs": { + "flake-utils": "flake-utils_47", + "mediagoblin": "mediagoblin_2", + "myuids": "myuids_31", + "nixpkgs": "nixpkgs_86" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=", + "path": "./mediagoblin", + "type": "path" + }, + "original": { + "path": "./mediagoblin", + "type": "path" + } + }, + "s-multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_12", + "myuids": "myuids_32" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "./multi-apache-container", + "type": "path" + }, + "original": { + "path": "./multi-apache-container", + "type": "path" + } + }, + "s-mypackages": { + "inputs": { + "flake-parts": "flake-parts_21", + "nixpkgs": "nixpkgs_87", + "webapps-ttrss": "webapps-ttrss_13" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "./mypackages", + "type": "path" + }, + "original": { + "path": "./mypackages", + "type": "path" + } + }, + "s-myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "./myuids", + "type": "path" + }, + "original": { + "path": "./myuids", + "type": "path" + } + }, + "s-naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "./naemon", + "type": "path" + }, + "original": { + "path": "./naemon", + "type": "path" + } + }, + "s-openarc": { + "inputs": { + "flake-utils": "flake-utils_48", + "myuids": "myuids_33", + "nixpkgs": "nixpkgs_88", + "openarc": "openarc_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "./openarc", + "type": "path" + }, + "original": { + "path": "./openarc", + "type": "path" + } + }, + "s-opendmarc": { + "inputs": { + "flake-utils": "flake-utils_49", + "myuids": "myuids_34", + "nixpkgs": "nixpkgs_89" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "./opendmarc", + "type": "path" + }, + "original": { + "path": "./opendmarc", + "type": "path" + } + }, + "s-paste": { + "inputs": { + "flake-utils": "flake-utils_50", + "nixpkgs": "nixpkgs_90" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "./paste", + "type": "path" + }, + "original": { + "path": "./paste", + "type": "path" + } + }, + "s-peertube": { + "inputs": { + "flake-utils": "flake-utils_51", + "myuids": "myuids_35", + "nixpkgs": "nixpkgs_91", + "peertube": "peertube_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./peertube", + "type": "path" + }, + "original": { + "path": "./peertube", + "type": "path" + } + }, + "s-private-buildbot": { + "inputs": { + "buildslist": "buildslist_2", + "flake-utils": "flake-utils_52", + "nixpkgs": "nixpkgs_92" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=", + "path": "./private/buildbot", + "type": "path" + }, + "original": { + "path": "./private/buildbot", + "type": "path" + } + }, + "s-private-chatons": { + "inputs": { + "environment": "environment_27" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "./private/chatons", + "type": "path" + }, + "original": { + "path": "./private/chatons", + "type": "path" + } + }, + "s-private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "./private/environment", + "type": "path" + }, + "original": { + "path": "./private/environment", + "type": "path" + } + }, + "s-private-mail-relay": { + "inputs": { + "environment": "environment_28", + "secrets": "secrets_20" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "./private/mail-relay", + "type": "path" + }, + "original": { + "path": "./private/mail-relay", + "type": "path" + } + }, + "s-private-milters": { + "inputs": { + "environment": "environment_29", + "files-watcher": "files-watcher_13", + "openarc": "openarc_12", + "opendmarc": "opendmarc_6", + "secrets": "secrets_21" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "./private/milters", + "type": "path" + }, + "original": { + "path": "./private/milters", + "type": "path" + } + }, + "s-private-monitoring": { + "inputs": { + "environment": "environment_30", + "naemon": "naemon_6", + "nixpkgs-lib": "nixpkgs-lib_27", + "secrets": "secrets_22" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "./private/monitoring", + "type": "path" + }, + "original": { + "path": "./private/monitoring", + "type": "path" + } + }, + "s-private-openarc": { + "inputs": { + "files-watcher": "files-watcher_14", + "openarc": "openarc_14", + "secrets": "secrets_23" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "./private/openarc", + "type": "path" + }, + "original": { + "path": "./private/openarc", + "type": "path" + } + }, + "s-private-opendmarc": { + "inputs": { + "environment": "environment_31", + "files-watcher": "files-watcher_15", + "opendmarc": "opendmarc_7", + "secrets": "secrets_24" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "./private/opendmarc", + "type": "path" + }, + "original": { + "path": "./private/opendmarc", + "type": "path" + } + }, + "s-private-openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "./private/openldap", + "type": "path" + }, + "original": { + "path": "./private/openldap", + "type": "path" + } + }, + "s-private-paste": { + "inputs": { + "paste": "paste_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=", + "path": "./private/paste", + "type": "path" + }, + "original": { + "path": "./private/paste", + "type": "path" + } + }, + "s-private-peertube": { + "inputs": { + "peertube_open_instance": "peertube_open_instance_2", + "peertube_origin": "peertube_origin_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=", + "path": "./private/peertube", + "type": "path" + }, + "original": { + "path": "./private/peertube", + "type": "path" + } + }, + "s-private-php": { + "inputs": { + "flake-utils": "flake-utils_60", + "nixpkgs": "nixpkgs_100", + "nixpkgs-4": "nixpkgs-4_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "./private/php", + "type": "path" + }, + "original": { + "path": "./private/php", + "type": "path" + } + }, + "s-private-ssh": { + "inputs": { + "environment": "environment_32", + "secrets": "secrets_25" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "./private/ssh", + "type": "path" + }, + "original": { + "path": "./private/ssh", + "type": "path" + } + }, + "s-private-system": { + "inputs": { + "backports": "backports_7", + "environment": "environment_33", + "mypackages": "mypackages_12", + "myuids": "myuids_42", + "secrets-public": "secrets-public_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "./private/system", + "type": "path" + }, + "original": { + "path": "./private/system", + "type": "path" + } + }, + "s-rsync_backup": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TxLsFx4DTTScMHkvR0pJgzYea6ILiu1Dl6LA67LtYGo=", + "path": "./rsync_backup", + "type": "path" + }, + "original": { + "path": "./rsync_backup", + "type": "path" + } + }, + "s-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "./secrets", + "type": "path" + }, + "original": { + "path": "./secrets", + "type": "path" + } + }, + "s-surfer": { + "inputs": { + "flake-utils": "flake-utils_62", + "mypackages": "mypackages_13", + "nixpkgs": "nixpkgs_104", + "surfer": "surfer_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=", + "path": "./surfer", + "type": "path" + }, + "original": { + "path": "./surfer", + "type": "path" + } + }, + "s-taskwarrior-web": { + "inputs": { + "flake-utils": "flake-utils_63", + "nixpkgs": "nixpkgs_105", + "taskwarrior-web": "taskwarrior-web_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=", + "path": "./taskwarrior-web", + "type": "path" + }, + "original": { + "path": "./taskwarrior-web", + "type": "path" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_15": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_16": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_17": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_18": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_19": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_20": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_21": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_22": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_23": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_24": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_25": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_26": { + "locked": { + "lastModified": 1, + "narHash": "sha256-yvhc2jxW1AQVmtrKPoYPr5DgpXKt/ua+ATuxvE3iY6c=", + "path": "./private/environment-dummy", + "type": "path" + }, + "original": { + "path": "./private/environment-dummy", + "type": "path" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "ssh": { + "inputs": { + "environment": "environment_10", + "secrets": "secrets_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_2": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_3": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_4": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_5": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_6": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable_7": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "surfer": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "surfer_2": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "system": { + "inputs": { + "backports": "backports", + "environment": "environment_7", + "mypackages": "mypackages", + "myuids": "myuids_6", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "system_2": { + "inputs": { + "backports": "backports_2", + "environment": "environment_11", + "mypackages": "mypackages_2", + "myuids": "myuids_8", + "secrets-public": "secrets-public_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "system_3": { + "inputs": { + "backports": "backports_4", + "environment": "environment_22", + "mypackages": "mypackages_7", + "myuids": "myuids_24", + "secrets-public": "secrets-public_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "system_4": { + "inputs": { + "backports": "backports_5", + "environment": "environment_25", + "mypackages": "mypackages_8", + "myuids": "myuids_27", + "secrets-public": "secrets-public_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "taskwarrior-web": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + }, + "taskwarrior-web_2": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "flakes", + "n-backup-2", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "flakes", + "n-dilion", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": [ + "flakes", + "n-eldiron", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_4": { + "inputs": { + "nixpkgs": [ + "flakes", + "n-monitoring-1", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_5": { + "inputs": { + "nixpkgs": [ + "flakes", + "n-quatresaisons", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_6": { + "inputs": { + "nixpkgs": [ + "flakes", + "n-zoldene", + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_7": { + "inputs": { + "nixpkgs": [ + "flakes", + "s-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_10": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_11": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_12": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_13": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_14": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_15": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_2": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_3": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_4": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_5": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_6": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_7": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_8": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_9": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..e3ed4c9 --- /dev/null +++ b/flake.nix @@ -0,0 +1,47 @@ +{ + description = "immae-eu infrastructure"; + inputs = { + flake-parts.url = "github:hercules-ci/flake-parts"; + devshell.url = "github:numtide/devshell"; + # nixpkgs for local tools + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + flakes.url = "path:./flakes"; + }; + outputs = inputs@{ self, flake-parts, flakes, ... }: + let + inherit (flakes.subflakes) public private; + inherit (public) mypackages; + in + flake-parts.lib.mkFlake { inherit inputs; } ({ withSystem, ... }: { + imports = [ + inputs.devshell.flakeModule + (mypackages.mylibs.flakePartsAddPerSystem { name = "lib"; type = "unspecified"; }) + ]; + systems = [ "x86_64-linux" ]; + perSystem = { config, inputs', pkgs, system, ... }: + { + packages = mypackages.packages."${system}"; + lib = mypackages.lib."${system}"; + devshells.default = { + packages = [ + pkgs.colmena + pkgs.nixUnstable pkgs.python3 pkgs.sops + pkgs.curl pkgs.shellcheck pkgs.jq + pkgs.gnumake pkgs.yq + ]; + env = [ + { name = "NIX_BUILD_TOP"; value = ""; } + { name = "PATH"; prefix = "scripts"; } + { name = "NIX_PATH"; value = "nixpkgs=${pkgs.path}"; } + ]; + }; + }; + flake = { + # FIXME: next line Can be removed in nix 2.16.* + devShell.x86_64-linux = self.devShells.x86_64-linux.default; + inherit (mypackages) mylibs sources overlays; + inherit (flakes) subflakes; + }; + }); +} diff --git a/flakes/backports/flake.lock b/flakes/backports/flake.lock index 5f9289e..8981e53 100644 --- a/flakes/backports/flake.lock +++ b/flakes/backports/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1629481132, - "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "owner": "numtide", "repo": "flake-utils", - "rev": "997f7efcb746a9c140ce1f13c72263189225f482", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", "type": "github" }, "original": { @@ -17,15 +17,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1634032472, - "narHash": "sha256-IoSg358w6nPpTYLWhvN3UgnU6r322dDPOLFXHyqyIkM=", + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3abf4b55b7c991909fde3115827d398dd7c5a299", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", "type": "github" }, "original": { "owner": "NixOS", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } diff --git a/flakes/backports/flake.nix b/flakes/backports/flake.nix index 8be885f..796664a 100644 --- a/flakes/backports/flake.nix +++ b/flakes/backports/flake.nix @@ -1,62 +1,19 @@ { description = "Backported packages"; - inputs.nixpkgs.url = "github:NixOS/nixpkgs"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { self, flake-utils, nixpkgs }: flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { inherit system; overlays = []; }; + pkgs = import nixpkgs { inherit system; overlays = []; config = {}; }; in rec { packages = { - apprise = pkgs.apprise; - bitlbee-mastodon = pkgs.bitlbee-mastodon; - cointop = pkgs.cointop; - cryptpad = pkgs.cryptpad; - dovecot_fts-xapian = pkgs.dovecot_fts_xapian; - duply = pkgs.duply; - fiche = pkgs.fiche; - influxdb2 = pkgs.influxdb2; - ldapvi = pkgs.ldapvi; - lego = pkgs.lego; - mpd = pkgs.mpd; - mpd-small = pkgs.mpd-small; - opensmtpd = pkgs.opensmtpd; - pass = pkgs.pass; - pg_activity = pkgs.pg_activity; - signald = pkgs.signald; - ssh-to-age = pkgs.ssh-to-age; - stgit = pkgs.stgit; - sops = pkgs.sops; - sudo = pkgs.sudo; - telegram-cli = pkgs.telegram-cli; - woob = pkgs.python3Packages.woob; - zrepl = pkgs.zrepl; + ntfy-sh = pkgs.ntfy-sh; }; legacyPackages = packages; apps = { - apprise = flake-utils.lib.mkApp { drv = packages.apprise; name = "apprise"; }; - cointop = flake-utils.lib.mkApp { drv = packages.cointop; name = "cointop"; }; - cryptpad = flake-utils.lib.mkApp { drv = packages.cryptpad; name = "cryptpad"; }; - duply = flake-utils.lib.mkApp { drv = packages.duply; name = "duply"; }; - fiche = flake-utils.lib.mkApp { drv = packages.fiche; name = "fiche"; }; - influxd = flake-utils.lib.mkApp { drv = packages.influxdb2; name = "influxd"; }; - influx = flake-utils.lib.mkApp { drv = packages.influxdb2; name = "influx"; }; - ldapvi = flake-utils.lib.mkApp { drv = packages.ldapvi; name = "ldapvi"; }; - lego = flake-utils.lib.mkApp { drv = packages.lego; name = "lego"; }; - mpd = flake-utils.lib.mkApp { drv = packages.mpd; name = "mpd"; }; - mpd-small = flake-utils.lib.mkApp { drv = packages.mpd-small; name = "mpd"; }; - opensmtpd = flake-utils.lib.mkApp { drv = packages.opensmtpd; name = "opensmtpd"; }; - pass = flake-utils.lib.mkApp { drv = packages.pass; name = "pass"; }; - pg_activity = flake-utils.lib.mkApp { drv = packages.pg_activity; name = "pg_activity"; }; - signald = flake-utils.lib.mkApp { drv = packages.signald; name = "signald"; }; - ssh-to-age = flake-utils.lib.mkApp { drv = packages.ssh-to-age; name = "ssh-to-age"; }; - stgit = flake-utils.lib.mkApp { drv = packages.stgit; name = "stgit"; }; - sops = flake-utils.lib.mkApp { drv = packages.sops; name = "sops"; }; - sudo = flake-utils.lib.mkApp { drv = packages.sudo; name = "sudo"; }; - telegram-cli = flake-utils.lib.mkApp { drv = packages.telegram-cli; name = "telegram-cli"; }; - woob = flake-utils.lib.mkApp { drv = packages.woob; name = "woob"; }; - zrepl = flake-utils.lib.mkApp { drv = packages.zrepl; name = "zrepl"; }; + ntfy-sh = flake-utils.lib.mkApp { drv = packages.ntfy-sh; name = "ntfy-sh"; }; }; } ) // rec { @@ -66,62 +23,14 @@ in package.override (pkgs.lib.genAttrs packageDeps (n: pkgs."${n}")); }; overlays = { - apprise = final: prev: { apprise = self.packages."${final.system}".apprise; }; - bitlbee-mastodon = final: prev: { - bitlbee-mastodon = lib.overrideDeps final self.packages."${final.system}".bitlbee-mastodon; - }; - cointop = final: prev: { cointop = self.packages."${final.system}".cointop; }; - cryptpad = final: prev: { cryptpad = self.packages."${final.system}".cryptpad; }; - dovecot_fts-xapian = final: prev: { - dovecot_fts-xapian = lib.overrideDeps final self.packages."${final.system}".dovecot_fts-xapian; - }; - duply = final: prev: { duply = self.packages."${final.system}".duply; }; - fiche = final: prev: { fiche = self.packages."${final.system}".fiche; }; - influxdb2 = final: prev: { influxdb2 = self.packages."${final.system}".influxdb2; }; - ldapvi = final: prev: { ldapvi = self.packages."${final.system}".ldapvi; }; - lego = final: prev: { lego = self.packages."${final.system}".lego; }; - mpd = final: prev: { mpd = self.packages."${final.system}".mpd; }; - opensmtpd = final: prev: { opensmtpd = self.packages."${final.system}".opensmtpd; }; - pass = final: prev: { pass = self.packages."${final.system}".pass; }; - pg_activity = final: prev: { pg_activity = self.packages."${final.system}".pg_activity; }; - signald = final: prev: { signald = self.packages."${final.system}".signald; }; - ssh-to-age = final: prev: { ssh-to-age = self.packages."${final.system}".ssh-to-age; }; - stgit = final: prev: { stgit = self.packages."${final.system}".stgit; }; - sops = final: prev: { sops = self.packages."${final.system}".sops; }; - sudo = final: prev: { sudo = self.packages."${final.system}".sudo; }; - telegram-cli = final: prev: { telegram-cli = self.packages."${final.system}".telegram-cli; }; - woob = final: prev: { woob = self.packages."${final.system}".woob; }; - zrepl = final: prev: { zrepl = self.packages."${final.system}".zrepl; }; + ntfy-sh = final: prev: { ntfy-sh = self.packages."${final.system}".ntfy-sh; }; }; overlay = final: prev: ({} - // overlays.apprise final prev - // overlays.bitlbee-mastodon final prev - // overlays.cointop final prev - // overlays.cryptpad final prev - // overlays.dovecot_fts-xapian final prev - // overlays.duply final prev - // overlays.fiche final prev - // overlays.influxdb2 final prev - // overlays.ldapvi final prev - // overlays.lego final prev - // overlays.mpd final prev - // overlays.opensmtpd final prev - // overlays.pass final prev - // overlays.pg_activity final prev - // overlays.signald final prev - // overlays.ssh-to-age final prev - // overlays.stgit final prev - // overlays.sops final prev - // overlays.sudo final prev - // overlays.telegram-cli final prev - // overlays.woob final prev - // overlays.zrepl final prev + // overlays.ntfy-sh final prev ); nixosModules = { - influxdb2 = import (nixpkgs + "/nixos/modules/services/databases/influxdb2.nix"); - mpd = import (nixpkgs + "/nixos/modules/services/audio/mpd.nix"); - zrepl = import (nixpkgs + "/nixos/modules/services/backup/zrepl.nix"); + #coturn = import (nixpkgs + "/nixos/modules/services/networking/coturn.nix"); }; }; } diff --git a/flakes/copanier/default.nix b/flakes/copanier/default.nix new file mode 100644 index 0000000..0486c0a --- /dev/null +++ b/flakes/copanier/default.nix @@ -0,0 +1,30 @@ +{ src, glibcLocales, poetry2nix, fetchFromGitHub, python37, fetchpatch }: +let + poetryApp = poetry2nix.mkPoetryApplication rec { + inherit src; + patches = [ ./fix_reduce.patch ]; + overrides = poetry2nix.overrides.withDefaults (self: super: { + weasyprint = super.weasyprint.overridePythonAttrs (old: { + patches = let + p0 = (fetchpatch { + url = "https://github.com/Kozea/WeasyPrint/commit/47043a1fd7e50a892b9836466f521df85d597c44.patch"; + sha256 = "18lmz6whjqxdpv4fdmg5vcpk2acdl99kfmp14badpw1jmffw7zl2"; + postFetch = '' + sed -i -e "s/font_filename/filename/" $out + ''; + }); + p1 = (builtins.elemAt old.patches 1).overrideAttrs(old: { + postInstall = '' + sed -i -e "s/so.0/so/" $out + ''; + }); + in [ p0 p1 ]; + }); + }); + pyproject = ./pyproject.toml; + poetrylock = ./poetry.lock; + python = python37; + locales = "${glibcLocales}/lib/locale/locale-archive"; + }; +in + poetryApp diff --git a/flakes/copanier/fix_reduce.patch b/flakes/copanier/fix_reduce.patch new file mode 100644 index 0000000..5390bcc --- /dev/null +++ b/flakes/copanier/fix_reduce.patch @@ -0,0 +1,13 @@ +diff --git a/copanier/views/delivery.py b/copanier/views/delivery.py +index 779d52c..1696919 100644 +--- a/copanier/views/delivery.py ++++ b/copanier/views/delivery.py +@@ -401,7 +401,7 @@ async def compute_payments(request, response, id): + balance.append((group_id, amount)) + + debiters, crediters = order_balance(balance) +- results = reduce_balance(debiters[:], crediters[:]) ++ results = reduce_balance(debiters[:], crediters[:], []) + + results_dict = defaultdict(partial(defaultdict, float)) + diff --git a/flakes/copanier/flake.lock b/flakes/copanier/flake.lock new file mode 100644 index 0000000..fe84a9d --- /dev/null +++ b/flakes/copanier/flake.lock @@ -0,0 +1,59 @@ +{ + "nodes": { + "copanier": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "copanier": "copanier", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/copanier/flake.nix b/flakes/copanier/flake.nix new file mode 100644 index 0000000..74e6829 --- /dev/null +++ b/flakes/copanier/flake.nix @@ -0,0 +1,28 @@ +{ + description = "Copanier"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs"; + inputs.copanier = { + url = "github:spiral-project/copanier"; + flake = false; + }; + + outputs = { self, copanier, flake-utils, nixpkgs }: flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + in rec { + packages.copanier = pkgs.callPackage ./. { src = copanier; }; + defaultPackage = packages.copanier; + legacyPackages.copanier = packages.copanier; + apps.copanier = flake-utils.lib.mkApp { drv = packages.copanier; }; + defaultApp = apps.copanier; + }) // rec { + overlays = { + copanier = final: prev: { + copanier = self.defaultPackage."${final.system}"; + }; + }; + overlay = overlays.copanier; + }; + } diff --git a/flakes/copanier/poetry.lock b/flakes/copanier/poetry.lock new file mode 100644 index 0000000..232bdf3 --- /dev/null +++ b/flakes/copanier/poetry.lock @@ -0,0 +1,995 @@ +[[package]] +name = "autoroutes" +version = "0.3.5" +description = "Routes for speed" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +dev = ["cython", "pytest", "twine"] + +[[package]] +name = "biscuits" +version = "0.3.0" +description = "Fast and tasty cookies handling." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "cachetools" +version = "4.2.4" +description = "Extensible memoizing collections and decorators" +category = "main" +optional = false +python-versions = "~=3.5" + +[[package]] +name = "cairocffi" +version = "1.3.0" +description = "cffi-based cairo bindings for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cffi = ">=1.1.0" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest-runner", "pytest-cov", "pytest-flake8", "pytest-isort"] +xcb = ["xcffib (>=0.3.2)"] + +[[package]] +name = "cairosvg" +version = "2.5.2" +description = "A Simple SVG Converter based on Cairo" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +cairocffi = "*" +cssselect2 = "*" +defusedxml = "*" +pillow = "*" +tinycss2 = "*" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest-runner", "pytest-cov", "pytest-flake8", "pytest-isort"] + +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "cffi" +version = "1.14.6" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "chardet" +version = "4.0.0" +description = "Universal encoding detector for Python 2 and 3" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "charset-normalizer" +version = "2.0.6" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "cssselect" +version = "1.1.0" +description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "cssselect2" +version = "0.4.1" +description = "cssselect2" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +tinycss2 = "*" +webencodings = "*" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] + +[[package]] +name = "cssutils" +version = "2.3.0" +description = "A CSS Cascading Style Sheets library for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "lxml", "cssselect", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources"] + +[[package]] +name = "debts" +version = "0.5" +description = "Help solve debts settlement." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +jinja2 = "*" + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "emails" +version = "0.6" +description = "Modern python library for emails." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +chardet = "*" +cssutils = "*" +lxml = "*" +premailer = "*" +python-dateutil = "*" +requests = "*" + +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["genshi", "chardet (>=2.2)", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "httptools" +version = "0.2.0" +description = "A collection of framework independent HTTP protocol utils." +category = "main" +optional = false +python-versions = "*" + +[package.extras] +test = ["Cython (==0.29.22)"] + +[[package]] +name = "idna" +version = "3.2" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "importlib-metadata" +version = "4.8.1" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "jdcal" +version = "1.4.1" +description = "Julian dates from proleptic Gregorian and Julian calendars." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "jinja2" +version = "2.11.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +MarkupSafe = ">=0.23" + +[package.extras] +i18n = ["Babel (>=0.8)"] + +[[package]] +name = "lxml" +version = "4.6.3" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.7)"] + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "minicli" +version = "0.5.0" +description = "Minimalist CLI" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +doc = ["mkdocs (==1.1.2)"] +test = ["pytest (==6.0.1)"] + +[[package]] +name = "multifruits" +version = "0.1.5" +description = "Tasty multipart form data parser built with cython." +category = "main" +optional = false +python-versions = "*" + +[package.extras] +dev = ["Cython (==0.29.21)"] + +[[package]] +name = "openpyxl" +version = "3.0.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "main" +optional = false +python-versions = ">=3.6," + +[package.dependencies] +et-xmlfile = "*" +jdcal = "*" + +[[package]] +name = "pillow" +version = "8.3.2" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "premailer" +version = "3.10.0" +description = "Turns CSS blocks into style attributes" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +cachetools = "*" +cssselect = "*" +cssutils = "*" +lxml = "*" +requests = "*" + +[package.extras] +dev = ["tox", "twine", "therapist", "black", "flake8", "wheel"] +test = ["nose", "mock"] + +[[package]] +name = "pycparser" +version = "2.20" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pyjwt" +version = "1.7.1" +description = "JSON Web Token implementation in Python" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +crypto = ["cryptography (>=1.4)"] +flake8 = ["flake8", "flake8-import-order", "pep8-naming"] +test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] + +[[package]] +name = "pyphen" +version = "0.11.0" +description = "Pure Python module to hyphenate text" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-slugify" +version = "4.0.1" +description = "A Python Slugify application that handles Unicode" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +text-unidecode = ">=1.3" + +[package.extras] +unidecode = ["Unidecode (>=1.1.1)"] + +[[package]] +name = "pyyaml" +version = "5.3.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "requests" +version = "2.26.0" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "roll" +version = "0.13.0" +description = "Roll is a pico framework with performances and aesthetic in mind." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +autoroutes = "0.3.5" +biscuits = "0.3.0" +httptools = "0.2.0" +multifruits = "0.1.5" +websockets = "8.1" + +[package.extras] +docs = ["mkdocs"] +test = ["pytest"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "text-unidecode" +version = "1.3" +description = "The most basic Text::Unidecode port" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "tinycss2" +version = "1.1.0" +description = "tinycss2" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] + +[[package]] +name = "typing-extensions" +version = "3.10.0.2" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "ujson" +version = "3.2.0" +description = "Ultra fast JSON encoder and decoder for Python" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "urllib3" +version = "1.26.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "weasyprint" +version = "51" +description = "The Awesome Document Factory" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +cairocffi = ">=0.9.0" +CairoSVG = ">=2.4.0" +cffi = ">=0.6" +cssselect2 = ">=0.1" +html5lib = ">=0.999999999" +Pyphen = ">=0.9.1" +tinycss2 = ">=1.0.0" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest-runner", "pytest-cov", "pytest-flake8", "pytest-isort"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "websockets" +version = "8.1" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +category = "main" +optional = false +python-versions = ">=3.6.1" + +[[package]] +name = "zipp" +version = "3.6.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.7" +content-hash = "e82001513bafdfab9338f3fe9e786a7cc23c55f7e77a98e6b1d3924ab8887f5f" + +[metadata.files] +autoroutes = [ + {file = "autoroutes-0.3.5.tar.gz", hash = "sha256:087fcc5bd7e6f457931b9e8420d575f6aa7d35803d667013463c58d2bcf6b814"}, +] +biscuits = [ + {file = "biscuits-0.3.0.tar.gz", hash = "sha256:08b899164133c81b99b7307d629a45e2fb6a3bcc3ea7c08b1ff24b464b411307"}, +] +cachetools = [ + {file = "cachetools-4.2.4-py3-none-any.whl", hash = "sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1"}, + {file = "cachetools-4.2.4.tar.gz", hash = "sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693"}, +] +cairocffi = [ + {file = "cairocffi-1.3.0.tar.gz", hash = "sha256:108a3a7cb09e203bdd8501d9baad91d786d204561bd71e9364e8b34897c47b91"}, +] +cairosvg = [ + {file = "CairoSVG-2.5.2-py3-none-any.whl", hash = "sha256:98c276b7e4f0caf01e5c7176765c104ffa1aa1461d63b2053b04ab663cf7052b"}, + {file = "CairoSVG-2.5.2.tar.gz", hash = "sha256:b0b9929cf5dba005178d746a8036fcf0025550f498ca54db61873322384783bc"}, +] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +cffi = [ + {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"}, + {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"}, + {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"}, + {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"}, + {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"}, + {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"}, + {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"}, + {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"}, + {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"}, + {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"}, + {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"}, + {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"}, + {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"}, + {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"}, + {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"}, + {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"}, + {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"}, + {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"}, + {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"}, + {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"}, + {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"}, + {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"}, + {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"}, + {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"}, + {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, +] +chardet = [ + {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, + {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"}, + {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"}, +] +cssselect = [ + {file = "cssselect-1.1.0-py2.py3-none-any.whl", hash = "sha256:f612ee47b749c877ebae5bb77035d8f4202c6ad0f0fc1271b3c18ad6c4468ecf"}, + {file = "cssselect-1.1.0.tar.gz", hash = "sha256:f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc"}, +] +cssselect2 = [ + {file = "cssselect2-0.4.1-py3-none-any.whl", hash = "sha256:2f4a9f20965367bae459e3bb42561f7927e0cfe5b7ea1692757cf67ef5d7dace"}, + {file = "cssselect2-0.4.1.tar.gz", hash = "sha256:93fbb9af860e95dd40bf18c3b2b6ed99189a07c0f29ba76f9c5be71344664ec8"}, +] +cssutils = [ + {file = "cssutils-2.3.0-py3-none-any.whl", hash = "sha256:0cf1f6086b020dee18048ff3999339499f725934017ef9ae2cd5bb77f9ab5f46"}, + {file = "cssutils-2.3.0.tar.gz", hash = "sha256:b2d3b16047caae82e5c590036935bafa1b621cf45c2f38885af4be4838f0fd00"}, +] +debts = [ + {file = "debts-0.5.tar.gz", hash = "sha256:f239fa356500b0cc7d2334a6ad45dcaf542796f759ca44052c59566afca8e5f8"}, +] +defusedxml = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] +emails = [ + {file = "emails-0.6-py2.py3-none-any.whl", hash = "sha256:72c1e3198075709cc35f67e1b49e2da1a2bc087e9b444073db61a379adfb7f3c"}, + {file = "emails-0.6.tar.gz", hash = "sha256:a4c2d67ea8b8831967a750d8edc6e77040d7693143fe280e6d2a367d9c36ff88"}, +] +et-xmlfile = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] +html5lib = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] +httptools = [ + {file = "httptools-0.2.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:79dbc21f3612a78b28384e989b21872e2e3cf3968532601544696e4ed0007ce5"}, + {file = "httptools-0.2.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:78d03dd39b09c99ec917d50189e6743adbfd18c15d5944392d2eabda688bf149"}, + {file = "httptools-0.2.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a23166e5ae2775709cf4f7ad4c2048755ebfb272767d244e1a96d55ac775cca7"}, + {file = "httptools-0.2.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3ab1f390d8867f74b3b5ee2a7ecc9b8d7f53750bd45714bf1cb72a953d7dfa77"}, + {file = "httptools-0.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a7594f9a010cdf1e16a58b3bf26c9da39bbf663e3b8d46d39176999d71816658"}, + {file = "httptools-0.2.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:01b392a166adcc8bc2f526a939a8aabf89fe079243e1543fd0e7dc1b58d737cb"}, + {file = "httptools-0.2.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:80ffa04fe8c8dfacf6e4cef8277347d35b0442c581f5814f3b0cf41b65c43c6e"}, + {file = "httptools-0.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d5682eeb10cca0606c4a8286a3391d4c3c5a36f0c448e71b8bd05be4e1694bfb"}, + {file = "httptools-0.2.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:a289c27ccae399a70eacf32df9a44059ca2ba4ac444604b00a19a6c1f0809943"}, + {file = "httptools-0.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:813871f961edea6cb2fe312f2d9b27d12a51ba92545380126f80d0de1917ea15"}, + {file = "httptools-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:cc9be041e428c10f8b6ab358c6b393648f9457094e1dcc11b4906026d43cd380"}, + {file = "httptools-0.2.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b08d00d889a118f68f37f3c43e359aab24ee29eb2e3fe96d64c6a2ba8b9d6557"}, + {file = "httptools-0.2.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fd3b8905e21431ad306eeaf56644a68fdd621bf8f3097eff54d0f6bdf7262065"}, + {file = "httptools-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:200fc1cdf733a9ff554c0bb97a4047785cfaad9875307d6087001db3eb2b417f"}, + {file = "httptools-0.2.0.tar.gz", hash = "sha256:94505026be56652d7a530ab03d89474dc6021019d6b8682281977163b3471ea0"}, +] +idna = [ + {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, + {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"}, + {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"}, +] +jdcal = [ + {file = "jdcal-1.4.1-py2.py3-none-any.whl", hash = "sha256:1abf1305fce18b4e8aa248cf8fe0c56ce2032392bc64bbd61b5dff2a19ec8bba"}, + {file = "jdcal-1.4.1.tar.gz", hash = "sha256:472872e096eb8df219c23f2689fc336668bdb43d194094b5cc1707e1640acfc8"}, +] +jinja2 = [ + {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, + {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, +] +lxml = [ + {file = "lxml-4.6.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2"}, + {file = "lxml-4.6.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1b7584d421d254ab86d4f0b13ec662a9014397678a7c4265a02a6d7c2b18a75f"}, + {file = "lxml-4.6.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:079f3ae844f38982d156efce585bc540c16a926d4436712cf4baee0cce487a3d"}, + {file = "lxml-4.6.3-cp27-cp27m-win32.whl", hash = "sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106"}, + {file = "lxml-4.6.3-cp27-cp27m-win_amd64.whl", hash = "sha256:8157dadbb09a34a6bd95a50690595e1fa0af1a99445e2744110e3dca7831c4ee"}, + {file = "lxml-4.6.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7728e05c35412ba36d3e9795ae8995e3c86958179c9770e65558ec3fdfd3724f"}, + {file = "lxml-4.6.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:4bff24dfeea62f2e56f5bab929b4428ae6caba2d1eea0c2d6eb618e30a71e6d4"}, + {file = "lxml-4.6.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:74f7d8d439b18fa4c385f3f5dfd11144bb87c1da034a466c5b5577d23a1d9b51"}, + {file = "lxml-4.6.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f90ba11136bfdd25cae3951af8da2e95121c9b9b93727b1b896e3fa105b2f586"}, + {file = "lxml-4.6.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:4c61b3a0db43a1607d6264166b230438f85bfed02e8cff20c22e564d0faff354"}, + {file = "lxml-4.6.3-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:5c8c163396cc0df3fd151b927e74f6e4acd67160d6c33304e805b84293351d16"}, + {file = "lxml-4.6.3-cp35-cp35m-win32.whl", hash = "sha256:f2380a6376dfa090227b663f9678150ef27543483055cc327555fb592c5967e2"}, + {file = "lxml-4.6.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4"}, + {file = "lxml-4.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4"}, + {file = "lxml-4.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:289e9ca1a9287f08daaf796d96e06cb2bc2958891d7911ac7cae1c5f9e1e0ee3"}, + {file = "lxml-4.6.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d"}, + {file = "lxml-4.6.3-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d916d31fd85b2f78c76400d625076d9124de3e4bda8b016d25a050cc7d603f24"}, + {file = "lxml-4.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:820628b7b3135403540202e60551e741f9b6d3304371712521be939470b454ec"}, + {file = "lxml-4.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:c47ff7e0a36d4efac9fd692cfa33fbd0636674c102e9e8d9b26e1b93a94e7617"}, + {file = "lxml-4.6.3-cp36-cp36m-win32.whl", hash = "sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04"}, + {file = "lxml-4.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:92e821e43ad382332eade6812e298dc9701c75fe289f2a2d39c7960b43d1e92a"}, + {file = "lxml-4.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efd7a09678fd8b53117f6bae4fa3825e0a22b03ef0a932e070c0bdbb3a35e654"}, + {file = "lxml-4.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:efac139c3f0bf4f0939f9375af4b02c5ad83a622de52d6dfa8e438e8e01d0eb0"}, + {file = "lxml-4.6.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0fbcf5565ac01dff87cbfc0ff323515c823081c5777a9fc7703ff58388c258c3"}, + {file = "lxml-4.6.3-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:36108c73739985979bf302006527cf8a20515ce444ba916281d1c43938b8bb96"}, + {file = "lxml-4.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:122fba10466c7bd4178b07dba427aa516286b846b2cbd6f6169141917283aae2"}, + {file = "lxml-4.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:cdaf11d2bd275bf391b5308f86731e5194a21af45fbaaaf1d9e8147b9160ea92"}, + {file = "lxml-4.6.3-cp37-cp37m-win32.whl", hash = "sha256:3439c71103ef0e904ea0a1901611863e51f50b5cd5e8654a151740fde5e1cade"}, + {file = "lxml-4.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:4289728b5e2000a4ad4ab8da6e1db2e093c63c08bdc0414799ee776a3f78da4b"}, + {file = "lxml-4.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa"}, + {file = "lxml-4.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:76fa7b1362d19f8fbd3e75fe2fb7c79359b0af8747e6f7141c338f0bee2f871a"}, + {file = "lxml-4.6.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:26e761ab5b07adf5f555ee82fb4bfc35bf93750499c6c7614bd64d12aaa67927"}, + {file = "lxml-4.6.3-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e1cbd3f19a61e27e011e02f9600837b921ac661f0c40560eefb366e4e4fb275e"}, + {file = "lxml-4.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791"}, + {file = "lxml-4.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:1b38116b6e628118dea5b2186ee6820ab138dbb1e24a13e478490c7db2f326ae"}, + {file = "lxml-4.6.3-cp38-cp38-win32.whl", hash = "sha256:89b8b22a5ff72d89d48d0e62abb14340d9e99fd637d046c27b8b257a01ffbe28"}, + {file = "lxml-4.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:2a9d50e69aac3ebee695424f7dbd7b8c6d6eb7de2a2eb6b0f6c7db6aa41e02b7"}, + {file = "lxml-4.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0"}, + {file = "lxml-4.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:7610b8c31688f0b1be0ef882889817939490a36d0ee880ea562a4e1399c447a1"}, + {file = "lxml-4.6.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f8380c03e45cf09f8557bdaa41e1fa7c81f3ae22828e1db470ab2a6c96d8bc23"}, + {file = "lxml-4.6.3-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3082c518be8e97324390614dacd041bb1358c882d77108ca1957ba47738d9d59"}, + {file = "lxml-4.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:884ab9b29feaca361f7f88d811b1eea9bfca36cf3da27768d28ad45c3ee6f969"}, + {file = "lxml-4.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6f12e1427285008fd32a6025e38e977d44d6382cf28e7201ed10d6c1698d2a9a"}, + {file = "lxml-4.6.3-cp39-cp39-win32.whl", hash = "sha256:33bb934a044cf32157c12bfcfbb6649807da20aa92c062ef51903415c704704f"}, + {file = "lxml-4.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83"}, + {file = "lxml-4.6.3.tar.gz", hash = "sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] +minicli = [ + {file = "minicli-0.5.0-py3-none-any.whl", hash = "sha256:c6118c0c6c5678cfc2ad7317dca9bfa8c4da2363337a0adbe526aeeb3007582e"}, + {file = "minicli-0.5.0.tar.gz", hash = "sha256:baea96017039c0eba448cd07d746eda623be3226367b3a532d3843154bb347ad"}, +] +multifruits = [ + {file = "multifruits-0.1.5.tar.gz", hash = "sha256:c5eff8b375121b96a96a0c4bd05cd817ec7e204feadc6c6a211ca16029f78a7f"}, +] +openpyxl = [ + {file = "openpyxl-3.0.5-py2.py3-none-any.whl", hash = "sha256:f7d666b569f729257082cf7ddc56262431878f602dcc2bc3980775c59439cdab"}, + {file = "openpyxl-3.0.5.tar.gz", hash = "sha256:18e11f9a650128a12580a58e3daba14e00a11d9e907c554a17ea016bf1a2c71b"}, +] +pillow = [ + {file = "Pillow-8.3.2-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:c691b26283c3a31594683217d746f1dad59a7ae1d4cfc24626d7a064a11197d4"}, + {file = "Pillow-8.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f514c2717012859ccb349c97862568fdc0479aad85b0270d6b5a6509dbc142e2"}, + {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be25cb93442c6d2f8702c599b51184bd3ccd83adebd08886b682173e09ef0c3f"}, + {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d675a876b295afa114ca8bf42d7f86b5fb1298e1b6bb9a24405a3f6c8338811c"}, + {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59697568a0455764a094585b2551fd76bfd6b959c9f92d4bdec9d0e14616303a"}, + {file = "Pillow-8.3.2-cp310-cp310-win32.whl", hash = "sha256:2d5e9dc0bf1b5d9048a94c48d0813b6c96fccfa4ccf276d9c36308840f40c228"}, + {file = "Pillow-8.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:11c27e74bab423eb3c9232d97553111cc0be81b74b47165f07ebfdd29d825875"}, + {file = "Pillow-8.3.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:11eb7f98165d56042545c9e6db3ce394ed8b45089a67124298f0473b29cb60b2"}, + {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f23b2d3079522fdf3c09de6517f625f7a964f916c956527bed805ac043799b8"}, + {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19ec4cfe4b961edc249b0e04b5618666c23a83bc35842dea2bfd5dfa0157f81b"}, + {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5a31c07cea5edbaeb4bdba6f2b87db7d3dc0f446f379d907e51cc70ea375629"}, + {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15ccb81a6ffc57ea0137f9f3ac2737ffa1d11f786244d719639df17476d399a7"}, + {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8f284dc1695caf71a74f24993b7c7473d77bc760be45f776a2c2f4e04c170550"}, + {file = "Pillow-8.3.2-cp36-cp36m-win32.whl", hash = "sha256:4abc247b31a98f29e5224f2d31ef15f86a71f79c7f4d2ac345a5d551d6393073"}, + {file = "Pillow-8.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a048dad5ed6ad1fad338c02c609b862dfaa921fcd065d747194a6805f91f2196"}, + {file = "Pillow-8.3.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:06d1adaa284696785375fa80a6a8eb309be722cf4ef8949518beb34487a3df71"}, + {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd24054aaf21e70a51e2a2a5ed1183560d3a69e6f9594a4bfe360a46f94eba83"}, + {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a330bf7014ee034046db43ccbb05c766aa9e70b8d6c5260bfc38d73103b0ba"}, + {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13654b521fb98abdecec105ea3fb5ba863d1548c9b58831dd5105bb3873569f1"}, + {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1bd983c565f92779be456ece2479840ec39d386007cd4ae83382646293d681b"}, + {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4326ea1e2722f3dc00ed77c36d3b5354b8fb7399fb59230249ea6d59cbed90da"}, + {file = "Pillow-8.3.2-cp37-cp37m-win32.whl", hash = "sha256:085a90a99404b859a4b6c3daa42afde17cb3ad3115e44a75f0d7b4a32f06a6c9"}, + {file = "Pillow-8.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:18a07a683805d32826c09acfce44a90bf474e6a66ce482b1c7fcd3757d588df3"}, + {file = "Pillow-8.3.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4e59e99fd680e2b8b11bbd463f3c9450ab799305d5f2bafb74fefba6ac058616"}, + {file = "Pillow-8.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4d89a2e9219a526401015153c0e9dd48319ea6ab9fe3b066a20aa9aee23d9fd3"}, + {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fd98c8294f57636084f4b076b75f86c57b2a63a8410c0cd172bc93695ee979"}, + {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b11c9d310a3522b0fd3c35667914271f570576a0e387701f370eb39d45f08a4"}, + {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0412516dcc9de9b0a1e0ae25a280015809de8270f134cc2c1e32c4eeb397cf30"}, + {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bcb04ff12e79b28be6c9988f275e7ab69f01cc2ba319fb3114f87817bb7c74b6"}, + {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0b9911ec70731711c3b6ebcde26caea620cbdd9dcb73c67b0730c8817f24711b"}, + {file = "Pillow-8.3.2-cp38-cp38-win32.whl", hash = "sha256:ce2e5e04bb86da6187f96d7bab3f93a7877830981b37f0287dd6479e27a10341"}, + {file = "Pillow-8.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:35d27687f027ad25a8d0ef45dd5208ef044c588003cdcedf05afb00dbc5c2deb"}, + {file = "Pillow-8.3.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:04835e68ef12904bc3e1fd002b33eea0779320d4346082bd5b24bec12ad9c3e9"}, + {file = "Pillow-8.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:10e00f7336780ca7d3653cf3ac26f068fa11b5a96894ea29a64d3dc4b810d630"}, + {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cde7a4d3687f21cffdf5bb171172070bb95e02af448c4c8b2f223d783214056"}, + {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c3ff00110835bdda2b1e2b07f4a2548a39744bb7de5946dc8e95517c4fb2ca6"}, + {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d409030bf3bd05fa66fb5fdedc39c521b397f61ad04309c90444e893d05f7d"}, + {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bff50ba9891be0a004ef48828e012babaaf7da204d81ab9be37480b9020a82b"}, + {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7dbfbc0020aa1d9bc1b0b8bcf255a7d73f4ad0336f8fd2533fcc54a4ccfb9441"}, + {file = "Pillow-8.3.2-cp39-cp39-win32.whl", hash = "sha256:963ebdc5365d748185fdb06daf2ac758116deecb2277ec5ae98139f93844bc09"}, + {file = "Pillow-8.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:cc9d0dec711c914ed500f1d0d3822868760954dce98dfb0b7382a854aee55d19"}, + {file = "Pillow-8.3.2-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2c661542c6f71dfd9dc82d9d29a8386287e82813b0375b3a02983feac69ef864"}, + {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:548794f99ff52a73a156771a0402f5e1c35285bd981046a502d7e4793e8facaa"}, + {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b68f565a4175e12e68ca900af8910e8fe48aaa48fd3ca853494f384e11c8bcd"}, + {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:838eb85de6d9307c19c655c726f8d13b8b646f144ca6b3771fa62b711ebf7624"}, + {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:feb5db446e96bfecfec078b943cc07744cc759893cef045aa8b8b6d6aaa8274e"}, + {file = "Pillow-8.3.2-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:fc0db32f7223b094964e71729c0361f93db43664dd1ec86d3df217853cedda87"}, + {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd4fd83aa912d7b89b4b4a1580d30e2a4242f3936882a3f433586e5ab97ed0d5"}, + {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d0c8ebbfd439c37624db98f3877d9ed12c137cadd99dde2d2eae0dab0bbfc355"}, + {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cb3dd7f23b044b0737317f892d399f9e2f0b3a02b22b2c692851fb8120d82c6"}, + {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a66566f8a22561fc1a88dc87606c69b84fa9ce724f99522cf922c801ec68f5c1"}, + {file = "Pillow-8.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ce651ca46d0202c302a535d3047c55a0131a720cf554a578fc1b8a2aff0e7d96"}, + {file = "Pillow-8.3.2.tar.gz", hash = "sha256:dde3f3ed8d00c72631bc19cbfff8ad3b6215062a5eed402381ad365f82f0c18c"}, +] +premailer = [ + {file = "premailer-3.10.0-py2.py3-none-any.whl", hash = "sha256:021b8196364d7df96d04f9ade51b794d0b77bcc19e998321c515633a2273be1a"}, + {file = "premailer-3.10.0.tar.gz", hash = "sha256:d1875a8411f5dc92b53ef9f193db6c0f879dc378d618e0ad292723e388bfe4c2"}, +] +pycparser = [ + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, +] +pyjwt = [ + {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, + {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, +] +pyphen = [ + {file = "pyphen-0.11.0-py3-none-any.whl", hash = "sha256:e3c1b1d05deaa31acdd78e2e24005402358feb7a4b407c4af7e5cc2e41c4d608"}, + {file = "pyphen-0.11.0.tar.gz", hash = "sha256:e2c3ed82c3a04317df5102addafe89652b0876bc6c6265f5dd4c3efaf02315e8"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +python-slugify = [ + {file = "python-slugify-4.0.1.tar.gz", hash = "sha256:69a517766e00c1268e5bbfc0d010a0a8508de0b18d30ad5a1ff357f8ae724270"}, +] +pyyaml = [ + {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, + {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, + {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, + {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, + {file = "PyYAML-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a"}, + {file = "PyYAML-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e"}, + {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, +] +requests = [ + {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, + {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, +] +roll = [ + {file = "roll-0.13.0-py3-none-any.whl", hash = "sha256:a9a833c791167406599f4a234c7b244e074e9e1c796f94adf99bde2894730684"}, + {file = "roll-0.13.0.tar.gz", hash = "sha256:5847d408bc74ec495d55fe7b482b4d780f88fc6ab56c0bef49336d3fa078e050"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +text-unidecode = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] +tinycss2 = [ + {file = "tinycss2-1.1.0-py3-none-any.whl", hash = "sha256:0353b5234bcaee7b1ac7ca3dea7e02cd338a9f8dcbb8f2dcd32a5795ec1e5f9a"}, + {file = "tinycss2-1.1.0.tar.gz", hash = "sha256:fbdcac3044d60eb85fdb2aa840ece43cf7dbe798e373e6ee0be545d4d134e18a"}, +] +typing-extensions = [ + {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, + {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, + {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, +] +ujson = [ + {file = "ujson-3.2.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:437e051a3e292ddbd5b4682f9b6c3e2ea4cd059d0d75bc9f8314349d63cbb015"}, + {file = "ujson-3.2.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a27ea44406100a97fb0fcc0b18dcdaf324824e722a00856a2992fafc65779351"}, + {file = "ujson-3.2.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6f7c24dabb0ff0ff43744d18211af6035ef37197f530c13edf704e627da7251d"}, + {file = "ujson-3.2.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:5ae6f599ef7c01ef626697f9e15e9d4e2a186ab4c0593ddb529b86866b562efb"}, + {file = "ujson-3.2.0-cp35-cp35m-win_amd64.whl", hash = "sha256:59048958793e0b0489449a414e2fbe54644457be1dd882b99a4fe16158632af1"}, + {file = "ujson-3.2.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a476525862a394018a7a3438c86596815b84518b2744184444fc6f8b0e3e4aee"}, + {file = "ujson-3.2.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2050c7f1ce72055f1b6fba29e4694ccf4509917d3be3ed6f3543ef3ff00eec4a"}, + {file = "ujson-3.2.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fda324ca055e671eae46e8fc32b46fab20eb251d3e6e22beb67f71f1d240b0b4"}, + {file = "ujson-3.2.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:0bdc62a1543d697e9c649ac0ac41e0d076a7b886d6b45f9f21971e25b90a2b27"}, + {file = "ujson-3.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d0ad63fc88d4e4cb7630f59aacd742256804a4cee447e9589e55957107a469b7"}, + {file = "ujson-3.2.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:66d47eabb4f0e12b5784b1a49c59bc6f32e91e18e02f2a43c5e91e2f6ad9cc60"}, + {file = "ujson-3.2.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:253edfe274538bb1060ab8877d51fc75e416047d5fab5340454a48b971f30612"}, + {file = "ujson-3.2.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6ee651c0210a67e3a72367de53ccac83b623913214e7c75015caadfad2b7e0dc"}, + {file = "ujson-3.2.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:0784f35f2ace41ed55c435ee11f9d9877cf3e6ff03c8850f87504cb93e9a9469"}, + {file = "ujson-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:812748c8de041f1ef5e9b37f33121c0c7390055fa5f12215b3d06a63b1c055a2"}, + {file = "ujson-3.2.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:17460d88dd4b9630e449e5d29b97301e6dbbbedbf46a6f95f3b2cb7e1333e6ea"}, + {file = "ujson-3.2.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:2d50cb3d87d4aabe6dbeb6ef79025bf9fdf350c4355c24819dc5c5cc38bad3dc"}, + {file = "ujson-3.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7060105de892cada2f01bd072d33b2421b4eefd32536207c1c9f2ade18656139"}, + {file = "ujson-3.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:7b6496b3e2bc396628f114fd96ec41655b10c84adececc0ef8cf1c2329dae36c"}, + {file = "ujson-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:782bdf016da793a3bf138e50ed973428e59006b8d73a9e1911bc6207c6b79fff"}, + {file = "ujson-3.2.0.tar.gz", hash = "sha256:abb1996ba1c1d2faf5b1e38efa97da7f64e5373a31f705b96fe0587f5f778db4"}, +] +urllib3 = [ + {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"}, + {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, +] +weasyprint = [ + {file = "WeasyPrint-51-py3-none-any.whl", hash = "sha256:469974f6e74b1eef71dc56a9b80cc17621f319234d2a4ab656ddd0fd9e66c27f"}, + {file = "WeasyPrint-51.tar.gz", hash = "sha256:b3e971973a4f03c1430e6b838b75b5b57630415fcae8666d2be1347630ff6d6a"}, +] +webencodings = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] +websockets = [ + {file = "websockets-8.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c"}, + {file = "websockets-8.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170"}, + {file = "websockets-8.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8"}, + {file = "websockets-8.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:295359a2cc78736737dd88c343cd0747546b2174b5e1adc223824bcaf3e164cb"}, + {file = "websockets-8.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:1d3f1bf059d04a4e0eb4985a887d49195e15ebabc42364f4eb564b1d065793f5"}, + {file = "websockets-8.1-cp36-cp36m-win32.whl", hash = "sha256:2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a"}, + {file = "websockets-8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5"}, + {file = "websockets-8.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989"}, + {file = "websockets-8.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d"}, + {file = "websockets-8.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779"}, + {file = "websockets-8.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:751a556205d8245ff94aeef23546a1113b1dd4f6e4d102ded66c39b99c2ce6c8"}, + {file = "websockets-8.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:3ef56fcc7b1ff90de46ccd5a687bbd13a3180132268c4254fc0fa44ecf4fc422"}, + {file = "websockets-8.1-cp37-cp37m-win32.whl", hash = "sha256:7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc"}, + {file = "websockets-8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308"}, + {file = "websockets-8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c1ec8db4fac31850286b7cd3b9c0e1b944204668b8eb721674916d4e28744092"}, + {file = "websockets-8.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:5c01fd846263a75bc8a2b9542606927cfad57e7282965d96b93c387622487485"}, + {file = "websockets-8.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9bef37ee224e104a413f0780e29adb3e514a5b698aabe0d969a6ba426b8435d1"}, + {file = "websockets-8.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d705f8aeecdf3262379644e4b55107a3b55860eb812b673b28d0fbc347a60c55"}, + {file = "websockets-8.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:c8a116feafdb1f84607cb3b14aa1418424ae71fee131642fc568d21423b51824"}, + {file = "websockets-8.1-cp38-cp38-win32.whl", hash = "sha256:e898a0863421650f0bebac8ba40840fc02258ef4714cb7e1fd76b6a6354bda36"}, + {file = "websockets-8.1-cp38-cp38-win_amd64.whl", hash = "sha256:f8a7bff6e8664afc4e6c28b983845c5bc14965030e3fb98789734d416af77c4b"}, + {file = "websockets-8.1.tar.gz", hash = "sha256:5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f"}, +] +zipp = [ + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, +] diff --git a/flakes/copanier/pyproject.toml b/flakes/copanier/pyproject.toml new file mode 100644 index 0000000..ba487ae --- /dev/null +++ b/flakes/copanier/pyproject.toml @@ -0,0 +1,40 @@ +[tool.poetry] +name = "copanier" +version = "0.0.4" +description = "" +authors = ["Your Name "] + +[tool.poetry.dependencies] +python = "^3.7" +Jinja2 = "2.11.2" +openpyxl = "3.0.5" +PyJWT = "1.7.1" +PyYAML = "5.3.1" +roll = "0.13.0" +ujson = "3.2.0" +minicli = "0.5.0" +python-slugify = "4.0.1" +debts = "0.5" +emails = "0.6" +Weasyprint = "51" + +#[tool.poetry.dev-dependencies] +#hupper = "1.10.2" +#minicli = "0.5.0" +#usine = "0.2.3" +# +#[tool.poetry.group.test.dependencies] +#pyquery = "1.4.1" +#pytest = "6.0.2" +#pytest-asyncio = "0.14.0" +# +#[tool.poetry.group.prod.dependencies] +#gunicorn = "20.0.4" +#uvloop = "0.14.0" + +[tool.poetry.scripts] +copanier = 'copanier:main' + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/flakes/diaspora/default.nix b/flakes/diaspora/default.nix new file mode 100644 index 0000000..f4038ad --- /dev/null +++ b/flakes/diaspora/default.nix @@ -0,0 +1,74 @@ +{ ldap ? false, varDir ? "/var/lib/diaspora", podmin_email ? null, config_dir ? "/etc/diaspora", + src, stdenv, bundlerEnv, writeText, + cacert, defaultGemConfig, perl, ruby_2_4, nodejs, which, git }: +let + diaspora_src = stdenv.mkDerivation { + inherit (src) version; + pname = "diaspora"; + inherit src; + buildPhase = '' + ${if ldap then "patch -p1 < ${./ldap.patch}" else ""} + # FIXME: bundlerEnv below doesn't take postgresql group for some + # reason + echo 'gem "pg", "1.1.3"' >> Gemfile + ''; + installPhase = '' + cp -a . $out + ''; + }; + gems = bundlerEnv { + name = "diaspora-env"; + gemfile = "${diaspora_src}/Gemfile"; + lockfile = "${diaspora_src}/Gemfile.lock"; + gemset = if ldap then ./gemset_ldap.nix else ./gemset.nix; + groups = [ "postgresql" "default" "production" ]; + gemConfig = defaultGemConfig // { + kostya-sigar = attrs: { + buildInputs = [ perl ]; + }; + }; + }; + build_config = writeText "diaspora.yml" '' + configuration: + environment: + certificate_authorities: '${cacert}/etc/ssl/certs/ca-bundle.crt' + ${if podmin_email != null then '' + # dummy comment for indentation + admins: + podmin_email: '${podmin_email}' + '' else ""} + production: + environment: + ''; + dummy_token = writeText "secret_token.rb" '' + Diaspora::Application.config.secret_key_base = 'dummy' + ''; + diaspora = stdenv.mkDerivation { + name = "diaspora"; + version = src.version; + inherit diaspora_src; + builder = writeText "build_diaspora" '' + source $stdenv/setup + cp -a $diaspora_src $out + cd $out + chmod -R u+rwX . + tar -czf public/source.tar.gz ./{app,db,lib,script,Gemfile,Gemfile.lock,Rakefile,config.ru} + ln -s database.yml.example config/database.yml + ln -s ${build_config} config/diaspora.yml + ln -s ${dummy_token} config/initializers/secret_token.rb + ln -sf ${varDir}/schedule.yml config/schedule.yml + ln -sf ${varDir}/oidc_key.pem config/oidc_key.pem + ln -sf ${varDir}/uploads public/uploads + RAILS_ENV=production ${gems}/bin/rake assets:precompile + ln -sf ${config_dir}/database.yml config/database.yml + ln -sf ${config_dir}/diaspora.yml config/diaspora.yml + ln -sf ${config_dir}/secret_token.rb config/initializers/secret_token.rb + rm -rf tmp log + ln -sf ${varDir}/tmp tmp + ln -sf ${varDir}/log log + ''; + propagatedBuildInputs = [ gems nodejs which git ]; + passthru = { inherit gems varDir; }; + }; +in + diaspora diff --git a/flakes/diaspora/flake.lock b/flakes/diaspora/flake.lock new file mode 100644 index 0000000..3af470f --- /dev/null +++ b/flakes/diaspora/flake.lock @@ -0,0 +1,75 @@ +{ + "nodes": { + "diaspora": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "nixpkgs": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "root": { + "inputs": { + "diaspora": "diaspora", + "flake-utils": "flake-utils", + "myuids": "myuids", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/diaspora/flake.nix b/flakes/diaspora/flake.nix new file mode 100644 index 0000000..21b05d6 --- /dev/null +++ b/flakes/diaspora/flake.nix @@ -0,0 +1,214 @@ +{ + description = "A privacy-aware, distributed, open source social network."; + inputs.myuids = { + url = "path:../myuids"; + }; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs = { + url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742"; + flake = false; + }; + inputs.diaspora = { + url = "github:diaspora/diaspora/v0.7.10.0"; + flake = false; + }; + + outputs = { self, myuids, nixpkgs, diaspora, flake-utils }: flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + version = (builtins.fromJSON (builtins.readFile ./flake.lock)).nodes.diaspora.original.ref; + inherit (pkgs) callPackage; + in rec { + packages.diaspora = callPackage ./. { src = diaspora // { inherit version; }; }; + defaultPackage = packages.diaspora; + legacyPackages.diaspora = packages.diaspora; + checks = { + build = defaultPackage; + }; + } + ) // rec { + overlays = { + diaspora = final: prev: { + diaspora = self.defaultPackage."${final.system}"; + }; + }; + overlay = overlays.diaspora; + nixosModule = { 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.diaspora; + description = '' + Diaspora package to use. + ''; + }; + withLdap = lib.mkEnableOption "Add ldap patch"; + # 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; + ldap = cfg.withLdap; + }; + 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 { + nixpkgs.overlays = [ self.overlay ]; + users.users = lib.optionalAttrs (cfg.user == name) { + "${name}" = { + uid = myuids.lib.uids.diaspora; + 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}" = { + gid = myuids.lib.gids.diaspora; + }; + }; + + 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/flakes/diaspora/gemset.nix b/flakes/diaspora/gemset.nix new file mode 100644 index 0000000..e47f5b7 --- /dev/null +++ b/flakes/diaspora/gemset.nix @@ -0,0 +1,3047 @@ +{ + actioncable = { + dependencies = ["actionpack" "nio4r" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081"; + type = "gem"; + }; + version = "5.1.6"; + }; + active_model_serializers = { + dependencies = ["activemodel" "concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z"; + type = "gem"; + }; + version = "0.9.7"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2"; + type = "gem"; + }; + version = "5.1.6"; + }; + activemodel = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport" "arel"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord-import = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6"; + type = "gem"; + }; + version = "0.27.0"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll"; + type = "gem"; + }; + version = "5.1.6"; + }; + acts-as-taggable-on = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl"; + type = "gem"; + }; + version = "6.0.0"; + }; + acts_as_api = { + dependencies = ["activemodel" "activesupport" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc"; + type = "gem"; + }; + version = "1.0.1"; + }; + addressable = { + dependencies = ["public_suffix"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; + type = "gem"; + }; + version = "2.5.2"; + }; + aes_key_wrap = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07"; + type = "gem"; + }; + version = "1.0.1"; + }; + arel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"; + type = "gem"; + }; + version = "8.0.0"; + }; + asset_sync = { + dependencies = ["activemodel" "fog-core" "mime-types" "unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx"; + type = "gem"; + }; + version = "2.5.0"; + }; + ast = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; + type = "gem"; + }; + version = "2.4.0"; + }; + attr_required = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; + type = "gem"; + }; + version = "1.0.1"; + }; + autoprefixer-rails = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3"; + type = "gem"; + }; + version = "8.6.5"; + }; + backports = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"; + type = "gem"; + }; + version = "3.11.4"; + }; + bcrypt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; + type = "gem"; + }; + version = "3.1.12"; + }; + bindata = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy"; + type = "gem"; + }; + version = "2.4.4"; + }; + bootstrap-sass = { + dependencies = ["autoprefixer-rails" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"; + type = "gem"; + }; + version = "3.3.7"; + }; + bootstrap-switch-rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l"; + type = "gem"; + }; + version = "3.3.3"; + }; + buftok = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs"; + type = "gem"; + }; + version = "0.2.0"; + }; + builder = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; + type = "gem"; + }; + version = "3.2.3"; + }; + byebug = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; + type = "gem"; + }; + version = "10.0.2"; + }; + capybara = { + dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m"; + type = "gem"; + }; + version = "3.11.1"; + }; + carrierwave = { + dependencies = ["activemodel" "activesupport" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs"; + type = "gem"; + }; + version = "1.2.3"; + }; + celluloid = { + dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-essentials = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-extras = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-fsm = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-io = { + dependencies = ["celluloid" "nio4r" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-pool = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-supervision = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw"; + type = "gem"; + }; + version = "0.20.6"; + }; + chunky_png = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; + type = "gem"; + }; + version = "1.3.10"; + }; + cliver = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; + type = "gem"; + }; + version = "0.3.2"; + }; + coderay = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + compass = { + dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-core = { + dependencies = ["multi_json" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-import-once = { + dependencies = ["sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; + type = "gem"; + }; + version = "1.0.5"; + }; + compass-rails = { + dependencies = ["compass" "sass-rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr"; + type = "gem"; + }; + version = "3.1.0"; + }; + concurrent-ruby = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb"; + type = "gem"; + }; + version = "1.1.3"; + }; + configurate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1"; + type = "gem"; + }; + version = "0.3.1"; + }; + connection_pool = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; + type = "gem"; + }; + version = "2.2.2"; + }; + coveralls = { + dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"; + type = "gem"; + }; + version = "0.8.22"; + }; + crack = { + dependencies = ["safe_yaml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; + type = "gem"; + }; + version = "0.4.3"; + }; + crass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; + type = "gem"; + }; + version = "1.0.4"; + }; + cucumber = { + dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j"; + type = "gem"; + }; + version = "3.1.2"; + }; + cucumber-api-steps = { + dependencies = ["cucumber" "jsonpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw"; + type = "gem"; + }; + version = "0.14.0"; + }; + cucumber-core = { + dependencies = ["backports" "cucumber-tag_expressions" "gherkin"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c"; + type = "gem"; + }; + version = "3.2.1"; + }; + cucumber-expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw"; + type = "gem"; + }; + version = "6.0.1"; + }; + cucumber-rails = { + dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7"; + type = "gem"; + }; + version = "1.6.0"; + }; + cucumber-tag_expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc"; + type = "gem"; + }; + version = "1.1.1"; + }; + cucumber-wire = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"; + type = "gem"; + }; + version = "0.0.1"; + }; + database_cleaner = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x"; + type = "gem"; + }; + version = "1.7.0"; + }; + devise = { + dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; + type = "gem"; + }; + version = "4.5.0"; + }; + devise_lastseenable = { + dependencies = ["devise" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y"; + type = "gem"; + }; + version = "0.0.6"; + }; + diaspora-prosody-config = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp"; + type = "gem"; + }; + version = "0.0.7"; + }; + diaspora_federation = { + dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-json_schema = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-rails = { + dependencies = ["actionpack" "diaspora_federation"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-test = { + dependencies = ["diaspora_federation" "fabrication" "uuid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4"; + type = "gem"; + }; + version = "0.2.5"; + }; + diff-lcs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; + type = "gem"; + }; + version = "1.3.1"; + }; + domain_name = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; + type = "gem"; + }; + version = "0.5.20180417"; + }; + entypo-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6"; + type = "gem"; + }; + version = "3.0.0"; + }; + equalizer = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4"; + type = "gem"; + }; + version = "0.0.11"; + }; + erubi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1"; + type = "gem"; + }; + version = "1.7.1"; + }; + eslintrb = { + dependencies = ["execjs" "multi_json" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx"; + type = "gem"; + }; + version = "2.1.0"; + }; + et-orbi = { + dependencies = ["tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; + type = "gem"; + }; + version = "1.1.6"; + }; + ethon = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48"; + type = "gem"; + }; + version = "0.11.0"; + }; + excon = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; + type = "gem"; + }; + version = "0.62.0"; + }; + execjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; + type = "gem"; + }; + version = "2.7.0"; + }; + eye = { + dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk"; + type = "gem"; + }; + version = "0.10.0"; + }; + fabrication = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; + type = "gem"; + }; + version = "2.20.1"; + }; + factory_girl = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla"; + type = "gem"; + }; + version = "4.8.0"; + }; + factory_girl_rails = { + dependencies = ["factory_girl" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv"; + type = "gem"; + }; + version = "4.8.0"; + }; + faraday = { + dependencies = ["multipart-post"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52"; + type = "gem"; + }; + version = "0.15.3"; + }; + faraday-cookie_jar = { + dependencies = ["faraday" "http-cookie"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6"; + type = "gem"; + }; + version = "0.0.6"; + }; + faraday_middleware = { + dependencies = ["faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d"; + type = "gem"; + }; + version = "0.12.2"; + }; + ffi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; + type = "gem"; + }; + version = "1.9.25"; + }; + fixture_builder = { + dependencies = ["activerecord" "activesupport" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627"; + type = "gem"; + }; + version = "0.5.2.rc3"; + }; + fog-aws = { + dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs"; + type = "gem"; + }; + version = "3.3.0"; + }; + fog-core = { + dependencies = ["builder" "excon" "formatador" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8"; + type = "gem"; + }; + version = "2.1.2"; + }; + fog-json = { + dependencies = ["fog-core" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; + type = "gem"; + }; + version = "1.2.0"; + }; + fog-xml = { + dependencies = ["fog-core" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; + type = "gem"; + }; + version = "0.1.3"; + }; + formatador = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + fugit = { + dependencies = ["et-orbi" "raabro"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; + type = "gem"; + }; + version = "1.1.6"; + }; + fuubar = { + dependencies = ["rspec-core" "ruby-progressbar"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; + type = "gem"; + }; + version = "2.3.2"; + }; + get_process_mem = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; + type = "gem"; + }; + version = "0.2.3"; + }; + gherkin = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s"; + type = "gem"; + }; + version = "5.1.0"; + }; + gitlab = { + dependencies = ["httparty" "terminal-table"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34"; + type = "gem"; + }; + version = "4.7.0"; + }; + globalid = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; + type = "gem"; + }; + version = "0.4.1"; + }; + gon = { + dependencies = ["actionpack" "multi_json" "request_store"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl"; + type = "gem"; + }; + version = "6.2.1"; + }; + guard = { + dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; + type = "gem"; + }; + version = "2.15.0"; + }; + guard-compat = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; + type = "gem"; + }; + version = "1.2.1"; + }; + guard-rspec = { + dependencies = ["guard" "guard-compat" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; + type = "gem"; + }; + version = "4.7.3"; + }; + guard-rubocop = { + dependencies = ["guard" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp"; + type = "gem"; + }; + version = "1.3.0"; + }; + haml = { + dependencies = ["temple" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"; + type = "gem"; + }; + version = "5.0.4"; + }; + haml_lint = { + dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv"; + type = "gem"; + }; + version = "0.28.0"; + }; + hamlit = { + dependencies = ["temple" "thor" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf"; + type = "gem"; + }; + version = "2.9.1"; + }; + handlebars_assets = { + dependencies = ["execjs" "sprockets" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca"; + type = "gem"; + }; + version = "0.23.2"; + }; + hashdiff = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; + type = "gem"; + }; + version = "0.3.7"; + }; + hashie = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb"; + type = "gem"; + }; + version = "3.5.7"; + }; + http = { + dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; + type = "gem"; + }; + version = "3.3.0"; + }; + http-cookie = { + dependencies = ["domain_name"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; + type = "gem"; + }; + version = "1.0.3"; + }; + http-form_data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; + type = "gem"; + }; + version = "2.1.1"; + }; + http_accept_language = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; + type = "gem"; + }; + version = "2.1.1"; + }; + "http_parser.rb" = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"; + type = "gem"; + }; + version = "0.6.0"; + }; + httparty = { + dependencies = ["mime-types" "multi_xml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730"; + type = "gem"; + }; + version = "0.16.3"; + }; + httpclient = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; + type = "gem"; + }; + version = "2.8.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7"; + type = "gem"; + }; + version = "1.1.1"; + }; + i18n-inflector = { + dependencies = ["i18n"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g"; + type = "gem"; + }; + version = "2.6.7"; + }; + i18n-inflector-rails = { + dependencies = ["actionpack" "i18n-inflector" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk"; + type = "gem"; + }; + version = "1.0.7"; + }; + ipaddress = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; + type = "gem"; + }; + version = "0.8.3"; + }; + jaro_winkler = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah"; + type = "gem"; + }; + version = "1.5.1"; + }; + jasmine = { + dependencies = ["jasmine-core" "phantomjs" "rack" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-core = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-jquery-rails = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv"; + type = "gem"; + }; + version = "2.0.3"; + }; + jquery-rails = { + dependencies = ["rails-dom-testing" "railties" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8"; + type = "gem"; + }; + version = "4.3.3"; + }; + js-routes = { + dependencies = ["railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm"; + type = "gem"; + }; + version = "1.4.4"; + }; + js_image_paths = { + dependencies = ["rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf"; + type = "gem"; + }; + version = "0.1.1"; + }; + json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; + type = "gem"; + }; + version = "2.1.0"; + }; + json-jwt = { + dependencies = ["activesupport" "aes_key_wrap" "bindata"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r"; + type = "gem"; + }; + version = "1.9.4"; + }; + json-schema = { + dependencies = ["addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; + type = "gem"; + }; + version = "2.8.1"; + }; + json-schema-rspec = { + dependencies = ["json-schema" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9"; + type = "gem"; + }; + version = "0.0.4"; + }; + jsonpath = { + dependencies = ["multi_json" "to_regexp"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d"; + type = "gem"; + }; + version = "0.9.6"; + }; + jwt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; + type = "gem"; + }; + version = "2.1.0"; + }; + kgio = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"; + type = "gem"; + }; + version = "2.11.2"; + }; + kostya-sigar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb"; + type = "gem"; + }; + version = "2.0.4"; + }; + leaflet-rails = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb"; + type = "gem"; + }; + version = "1.3.1"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; + type = "gem"; + }; + version = "3.1.5"; + }; + little-plugger = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym"; + type = "gem"; + }; + version = "1.1.4"; + }; + logging = { + dependencies = ["little-plugger" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn"; + type = "gem"; + }; + version = "2.2.2"; + }; + logging-rails = { + dependencies = ["logging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239"; + type = "gem"; + }; + version = "0.6.0"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; + type = "gem"; + }; + version = "2.2.3"; + }; + lumberjack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; + type = "gem"; + }; + version = "1.0.13"; + }; + macaddr = { + dependencies = ["systemu"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b"; + type = "gem"; + }; + version = "1.7.1"; + }; + mail = { + dependencies = ["mini_mime"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; + type = "gem"; + }; + version = "2.7.1"; + }; + markdown-it-html5-embed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c"; + type = "gem"; + }; + version = "1.0.0"; + }; + markerb = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76"; + type = "gem"; + }; + version = "1.1.0"; + }; + memoizable = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c"; + type = "gem"; + }; + version = "0.4.2"; + }; + method_source = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + mime-types = { + dependencies = ["mime-types-data"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; + type = "gem"; + }; + version = "3.2.2"; + }; + mime-types-data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; + type = "gem"; + }; + version = "3.2018.0812"; + }; + mini_magick = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p"; + type = "gem"; + }; + version = "4.9.2"; + }; + mini_mime = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; + type = "gem"; + }; + version = "1.0.1"; + }; + mini_portile2 = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11"; + type = "gem"; + }; + version = "2.3.0"; + }; + minitest = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; + type = "gem"; + }; + version = "5.11.3"; + }; + mobile-fu = { + dependencies = ["rack-mobile-detect" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i"; + type = "gem"; + }; + version = "1.4.0"; + }; + multi_json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + multi_test = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"; + type = "gem"; + }; + version = "0.1.2"; + }; + multi_xml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; + type = "gem"; + }; + version = "0.6.0"; + }; + multipart-post = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; + type = "gem"; + }; + version = "2.0.0"; + }; + mysql2 = { + groups = ["mysql"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4"; + type = "gem"; + }; + version = "0.5.2"; + }; + naught = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg"; + type = "gem"; + }; + version = "1.1.0"; + }; + nenv = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; + type = "gem"; + }; + version = "0.3.0"; + }; + nio4r = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; + type = "gem"; + }; + version = "2.3.1"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz"; + type = "gem"; + }; + version = "1.8.5"; + }; + notiffany = { + dependencies = ["nenv" "shellany"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; + type = "gem"; + }; + version = "0.1.1"; + }; + oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y"; + type = "gem"; + }; + version = "0.5.4"; + }; + oauth2 = { + dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"; + type = "gem"; + }; + version = "1.4.1"; + }; + octokit = { + dependencies = ["sawyer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6"; + type = "gem"; + }; + version = "4.13.0"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"; + type = "gem"; + }; + version = "1.8.1"; + }; + omniauth-oauth = { + dependencies = ["oauth" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037"; + type = "gem"; + }; + version = "1.1.0"; + }; + omniauth-oauth2 = { + dependencies = ["oauth2" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr"; + type = "gem"; + }; + version = "1.5.0"; + }; + omniauth-tumblr = { + dependencies = ["multi_json" "omniauth-oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w"; + type = "gem"; + }; + version = "1.2"; + }; + omniauth-twitter = { + dependencies = ["omniauth-oauth" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; + type = "gem"; + }; + version = "1.4.0"; + }; + omniauth-wordpress = { + dependencies = ["omniauth-oauth2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303"; + type = "gem"; + }; + version = "0.2.2"; + }; + open_graph_reader = { + dependencies = ["faraday" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21"; + type = "gem"; + }; + version = "0.6.2"; + }; + openid_connect = { + dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd"; + type = "gem"; + }; + version = "1.1.6"; + }; + orm_adapter = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; + type = "gem"; + }; + version = "0.5.0"; + }; + parallel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"; + type = "gem"; + }; + version = "1.12.1"; + }; + parser = { + dependencies = ["ast"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f"; + type = "gem"; + }; + version = "2.5.3.0"; + }; + pg = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"; + type = "gem"; + }; + version = "1.1.3"; + }; + phantomjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk"; + type = "gem"; + }; + version = "2.1.1.0"; + }; + poltergeist = { + dependencies = ["capybara" "cliver" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95"; + type = "gem"; + }; + version = "1.18.1"; + }; + powerpack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; + type = "gem"; + }; + version = "0.1.2"; + }; + pronto = { + dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz"; + type = "gem"; + }; + version = "0.9.5"; + }; + pronto-eslint = { + dependencies = ["eslintrb" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-haml = { + dependencies = ["haml_lint" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg"; + type = "gem"; + }; + version = "0.9.0"; + }; + pronto-rubocop = { + dependencies = ["pronto" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-scss = { + dependencies = ["pronto" "scss_lint"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za"; + type = "gem"; + }; + version = "0.9.1"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; + type = "gem"; + }; + version = "3.6.0"; + }; + public_suffix = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; + type = "gem"; + }; + version = "3.0.3"; + }; + raabro = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; + type = "gem"; + }; + version = "1.1.6"; + }; + rack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-cors = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; + type = "gem"; + }; + version = "1.0.2"; + }; + rack-google-analytics = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj"; + type = "gem"; + }; + version = "1.2.0"; + }; + rack-mobile-detect = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5"; + type = "gem"; + }; + version = "0.4.0"; + }; + rack-oauth2 = { + dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii"; + type = "gem"; + }; + version = "1.9.3"; + }; + rack-piwik = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z"; + type = "gem"; + }; + version = "0.3.0"; + }; + rack-protection = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq"; + type = "gem"; + }; + version = "2.0.4"; + }; + rack-rewrite = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; + type = "gem"; + }; + version = "1.5.1"; + }; + rack-ssl = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; + type = "gem"; + }; + version = "1.4.1"; + }; + rack-test = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rails = { + dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q"; + type = "gem"; + }; + version = "5.1.6"; + }; + rails-assets-autosize = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib"; + type = "gem"; + }; + version = "4.0.2"; + }; + rails-assets-backbone = { + dependencies = ["rails-assets-underscore"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id"; + type = "gem"; + }; + version = "1.3.3"; + }; + rails-assets-blueimp-gallery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq"; + type = "gem"; + }; + version = "2.33.0"; + }; + rails-assets-bootstrap = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v"; + type = "gem"; + }; + version = "3.3.7"; + }; + rails-assets-bootstrap-markdown = { + dependencies = ["rails-assets-bootstrap"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3"; + type = "gem"; + }; + version = "2.10.0"; + }; + rails-assets-corejs-typeahead = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg"; + type = "gem"; + }; + version = "1.2.1"; + }; + rails-assets-diaspora_jsxc = { + dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi"; + type = "gem"; + }; + version = "0.1.5.develop.7"; + }; + rails-assets-emojione = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52"; + type = "gem"; + }; + version = "2.0.1"; + }; + "rails-assets-favico.js" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv"; + type = "gem"; + }; + version = "0.3.10"; + }; + rails-assets-fine-uploader = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv"; + type = "gem"; + }; + version = "5.13.0"; + }; + rails-assets-highlightjs = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp"; + type = "gem"; + }; + version = "9.12.0"; + }; + rails-assets-jasmine = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5"; + type = "gem"; + }; + version = "3.3.0"; + }; + rails-assets-jasmine-ajax = { + dependencies = ["rails-assets-jasmine"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg"; + type = "gem"; + }; + version = "3.4.0"; + }; + rails-assets-jquery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y"; + type = "gem"; + }; + version = "3.3.1"; + }; + rails-assets-jquery-colorbox = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp"; + type = "gem"; + }; + version = "1.6.4"; + }; + rails-assets-jquery-fullscreen-plugin = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58"; + type = "gem"; + }; + version = "0.5.0"; + }; + rails-assets-jquery-placeholder = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi"; + type = "gem"; + }; + version = "2.3.1"; + }; + rails-assets-jquery-textchange = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj"; + type = "gem"; + }; + version = "0.2.3"; + }; + "rails-assets-jquery.are-you-sure" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0"; + type = "gem"; + }; + version = "1.9.0"; + }; + "rails-assets-jquery.slimscroll" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998"; + type = "gem"; + }; + version = "1.3.8"; + }; + "rails-assets-jquery.ui" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa"; + type = "gem"; + }; + version = "1.11.4"; + }; + rails-assets-markdown-it = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9"; + type = "gem"; + }; + version = "8.4.2"; + }; + rails-assets-markdown-it--markdown-it-for-inline = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl"; + type = "gem"; + }; + version = "0.1.1"; + }; + rails-assets-markdown-it-diaspora-mention = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig"; + type = "gem"; + }; + version = "1.2.0"; + }; + rails-assets-markdown-it-hashtag = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk"; + type = "gem"; + }; + version = "0.4.0"; + }; + rails-assets-markdown-it-sanitizer = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36"; + type = "gem"; + }; + version = "0.4.3"; + }; + rails-assets-markdown-it-sub = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-markdown-it-sup = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-underscore = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc"; + type = "gem"; + }; + version = "1.9.1"; + }; + rails-assets-utatti-perfect-scrollbar = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v"; + type = "gem"; + }; + version = "1.4.0"; + }; + rails-controller-testing = { + dependencies = ["actionpack" "actionview" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy"; + type = "gem"; + }; + version = "1.0.2"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; + type = "gem"; + }; + version = "2.0.3"; + }; + rails-html-sanitizer = { + dependencies = ["loofah"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; + type = "gem"; + }; + version = "1.0.4"; + }; + rails-i18n = { + dependencies = ["i18n" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; + type = "gem"; + }; + version = "5.1.2"; + }; + rails-timeago = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv"; + type = "gem"; + }; + version = "2.16.0"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8"; + type = "gem"; + }; + version = "5.1.6"; + }; + rainbow = { + dependencies = ["rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w"; + type = "gem"; + }; + version = "2.2.2"; + }; + raindrops = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"; + type = "gem"; + }; + version = "0.19.0"; + }; + rake = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"; + type = "gem"; + }; + version = "12.3.1"; + }; + rb-fsevent = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; + type = "gem"; + }; + version = "0.9.10"; + }; + redcarpet = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; + type = "gem"; + }; + version = "3.4.0"; + }; + redis = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv"; + type = "gem"; + }; + version = "3.3.5"; + }; + regexp_parser = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; + type = "gem"; + }; + version = "1.3.0"; + }; + request_store = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; + type = "gem"; + }; + version = "1.4.1"; + }; + responders = { + dependencies = ["actionpack" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; + type = "gem"; + }; + version = "2.4.0"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; + type = "gem"; + }; + version = "3.8.2"; + }; + rspec-json_expectations = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn"; + type = "gem"; + }; + version = "2.1.0"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p"; + type = "gem"; + }; + version = "3.8.1"; + }; + rspec-support = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; + type = "gem"; + }; + version = "3.8.0"; + }; + rubocop = { + dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i"; + type = "gem"; + }; + version = "0.60.0"; + }; + ruby-oembed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0"; + type = "gem"; + }; + version = "0.12.0"; + }; + ruby-progressbar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; + type = "gem"; + }; + version = "1.10.0"; + }; + ruby_dep = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; + type = "gem"; + }; + version = "1.5.0"; + }; + rubyzip = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj"; + type = "gem"; + }; + version = "1.2.2"; + }; + rugged = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6"; + type = "gem"; + }; + version = "0.27.5"; + }; + safe_yaml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; + type = "gem"; + }; + version = "1.0.4"; + }; + sass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; + type = "gem"; + }; + version = "3.4.25"; + }; + sass-rails = { + dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"; + type = "gem"; + }; + version = "5.0.7"; + }; + sawyer = { + dependencies = ["addressable" "faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; + type = "gem"; + }; + version = "0.8.1"; + }; + scss_lint = { + dependencies = ["rake" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp"; + type = "gem"; + }; + version = "0.55.0"; + }; + secure_headers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5"; + type = "gem"; + }; + version = "6.0.0"; + }; + shellany = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; + type = "gem"; + }; + version = "0.0.1"; + }; + shoulda-matchers = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"; + type = "gem"; + }; + version = "3.1.2"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack-protection" "redis"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26"; + type = "gem"; + }; + version = "5.2.3"; + }; + sidekiq-cron = { + dependencies = ["fugit" "sidekiq"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0"; + type = "gem"; + }; + version = "1.0.4"; + }; + simple_captcha2 = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3"; + type = "gem"; + }; + version = "0.4.3"; + }; + simple_oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l"; + type = "gem"; + }; + version = "0.3.1"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sinon-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb"; + type = "gem"; + }; + version = "1.15.0"; + }; + spring = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75"; + type = "gem"; + }; + version = "2.0.2"; + }; + spring-commands-cucumber = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a"; + type = "gem"; + }; + version = "1.0.1"; + }; + spring-commands-rspec = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; + type = "gem"; + }; + version = "1.0.4"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; + type = "gem"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; + type = "gem"; + }; + version = "3.2.1"; + }; + state_machines = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; + type = "gem"; + }; + version = "0.5.0"; + }; + string-direction = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj"; + type = "gem"; + }; + version = "1.2.1"; + }; + swd = { + dependencies = ["activesupport" "attr_required" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd"; + type = "gem"; + }; + version = "1.1.2"; + }; + sysexits = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; + type = "gem"; + }; + version = "1.2.0"; + }; + systemu = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"; + type = "gem"; + }; + version = "2.6.5"; + }; + temple = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; + type = "gem"; + }; + version = "0.8.0"; + }; + term-ansicolor = { + dependencies = ["tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d"; + type = "gem"; + }; + version = "1.7.0"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; + type = "gem"; + }; + version = "1.8.0"; + }; + thor = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; + type = "gem"; + }; + version = "0.19.4"; + }; + thread_safe = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; + type = "gem"; + }; + version = "0.3.6"; + }; + tilt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; + type = "gem"; + }; + version = "2.0.8"; + }; + timecop = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp"; + type = "gem"; + }; + version = "0.9.1"; + }; + timers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; + type = "gem"; + }; + version = "4.2.0"; + }; + tins = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj"; + type = "gem"; + }; + version = "1.20.2"; + }; + to_regexp = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v"; + type = "gem"; + }; + version = "0.2.1"; + }; + turbo_dev_assets = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx"; + type = "gem"; + }; + version = "0.0.2"; + }; + twitter = { + dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5"; + type = "gem"; + }; + version = "6.2.0"; + }; + twitter-text = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; + type = "gem"; + }; + version = "1.14.7"; + }; + typhoeus = { + dependencies = ["ethon"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5"; + type = "gem"; + }; + version = "1.3.1"; + }; + tzinfo = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; + type = "gem"; + }; + version = "1.2.5"; + }; + uglifier = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1"; + type = "gem"; + }; + version = "4.1.19"; + }; + unf = { + dependencies = ["unf_ext"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; + type = "gem"; + }; + version = "0.1.4"; + }; + unf_ext = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; + type = "gem"; + }; + version = "0.0.7.5"; + }; + unicode-display_width = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57"; + type = "gem"; + }; + version = "1.4.0"; + }; + unicorn = { + dependencies = ["kgio" "raindrops"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak"; + type = "gem"; + }; + version = "5.4.1"; + }; + unicorn-worker-killer = { + dependencies = ["get_process_mem" "unicorn"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva"; + type = "gem"; + }; + version = "0.4.4"; + }; + uuid = { + dependencies = ["macaddr"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f"; + type = "gem"; + }; + version = "2.3.9"; + }; + valid = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3"; + type = "gem"; + }; + version = "1.2.0"; + }; + validate_email = { + dependencies = ["activemodel" "mail"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; + type = "gem"; + }; + version = "0.1.6"; + }; + validate_url = { + dependencies = ["activemodel" "addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh"; + type = "gem"; + }; + version = "1.0.2"; + }; + versionist = { + dependencies = ["activesupport" "railties" "yard"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m"; + type = "gem"; + }; + version = "1.7.0"; + }; + warden = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"; + type = "gem"; + }; + version = "1.2.8"; + }; + webfinger = { + dependencies = ["activesupport" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar"; + type = "gem"; + }; + version = "1.1.0"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib"; + type = "gem"; + }; + version = "3.4.2"; + }; + websocket-driver = { + dependencies = ["websocket-extensions"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l"; + type = "gem"; + }; + version = "0.6.5"; + }; + websocket-extensions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; + type = "gem"; + }; + version = "0.1.3"; + }; + will_paginate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9"; + type = "gem"; + }; + version = "3.1.6"; + }; + xpath = { + dependencies = ["nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; + yard = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"; + type = "gem"; + }; + version = "0.9.16"; + }; +} diff --git a/flakes/diaspora/gemset_ldap.nix b/flakes/diaspora/gemset_ldap.nix new file mode 100644 index 0000000..d7892f8 --- /dev/null +++ b/flakes/diaspora/gemset_ldap.nix @@ -0,0 +1,3056 @@ +{ + actioncable = { + dependencies = ["actionpack" "nio4r" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081"; + type = "gem"; + }; + version = "5.1.6"; + }; + active_model_serializers = { + dependencies = ["activemodel" "concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z"; + type = "gem"; + }; + version = "0.9.7"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2"; + type = "gem"; + }; + version = "5.1.6"; + }; + activemodel = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport" "arel"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord-import = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6"; + type = "gem"; + }; + version = "0.27.0"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll"; + type = "gem"; + }; + version = "5.1.6"; + }; + acts-as-taggable-on = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl"; + type = "gem"; + }; + version = "6.0.0"; + }; + acts_as_api = { + dependencies = ["activemodel" "activesupport" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc"; + type = "gem"; + }; + version = "1.0.1"; + }; + addressable = { + dependencies = ["public_suffix"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; + type = "gem"; + }; + version = "2.5.2"; + }; + aes_key_wrap = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07"; + type = "gem"; + }; + version = "1.0.1"; + }; + arel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"; + type = "gem"; + }; + version = "8.0.0"; + }; + asset_sync = { + dependencies = ["activemodel" "fog-core" "mime-types" "unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx"; + type = "gem"; + }; + version = "2.5.0"; + }; + ast = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; + type = "gem"; + }; + version = "2.4.0"; + }; + attr_required = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; + type = "gem"; + }; + version = "1.0.1"; + }; + autoprefixer-rails = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3"; + type = "gem"; + }; + version = "8.6.5"; + }; + backports = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"; + type = "gem"; + }; + version = "3.11.4"; + }; + bcrypt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; + type = "gem"; + }; + version = "3.1.12"; + }; + bindata = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy"; + type = "gem"; + }; + version = "2.4.4"; + }; + bootstrap-sass = { + dependencies = ["autoprefixer-rails" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"; + type = "gem"; + }; + version = "3.3.7"; + }; + bootstrap-switch-rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l"; + type = "gem"; + }; + version = "3.3.3"; + }; + buftok = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs"; + type = "gem"; + }; + version = "0.2.0"; + }; + builder = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; + type = "gem"; + }; + version = "3.2.3"; + }; + byebug = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; + type = "gem"; + }; + version = "10.0.2"; + }; + capybara = { + dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m"; + type = "gem"; + }; + version = "3.11.1"; + }; + carrierwave = { + dependencies = ["activemodel" "activesupport" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs"; + type = "gem"; + }; + version = "1.2.3"; + }; + celluloid = { + dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-essentials = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-extras = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-fsm = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-io = { + dependencies = ["celluloid" "nio4r" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-pool = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-supervision = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw"; + type = "gem"; + }; + version = "0.20.6"; + }; + chunky_png = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; + type = "gem"; + }; + version = "1.3.10"; + }; + cliver = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; + type = "gem"; + }; + version = "0.3.2"; + }; + coderay = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + compass = { + dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-core = { + dependencies = ["multi_json" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-import-once = { + dependencies = ["sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; + type = "gem"; + }; + version = "1.0.5"; + }; + compass-rails = { + dependencies = ["compass" "sass-rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr"; + type = "gem"; + }; + version = "3.1.0"; + }; + concurrent-ruby = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb"; + type = "gem"; + }; + version = "1.1.3"; + }; + configurate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1"; + type = "gem"; + }; + version = "0.3.1"; + }; + connection_pool = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; + type = "gem"; + }; + version = "2.2.2"; + }; + coveralls = { + dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"; + type = "gem"; + }; + version = "0.8.22"; + }; + crack = { + dependencies = ["safe_yaml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; + type = "gem"; + }; + version = "0.4.3"; + }; + crass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; + type = "gem"; + }; + version = "1.0.4"; + }; + cucumber = { + dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j"; + type = "gem"; + }; + version = "3.1.2"; + }; + cucumber-api-steps = { + dependencies = ["cucumber" "jsonpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw"; + type = "gem"; + }; + version = "0.14.0"; + }; + cucumber-core = { + dependencies = ["backports" "cucumber-tag_expressions" "gherkin"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c"; + type = "gem"; + }; + version = "3.2.1"; + }; + cucumber-expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw"; + type = "gem"; + }; + version = "6.0.1"; + }; + cucumber-rails = { + dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7"; + type = "gem"; + }; + version = "1.6.0"; + }; + cucumber-tag_expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc"; + type = "gem"; + }; + version = "1.1.1"; + }; + cucumber-wire = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"; + type = "gem"; + }; + version = "0.0.1"; + }; + database_cleaner = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x"; + type = "gem"; + }; + version = "1.7.0"; + }; + devise = { + dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; + type = "gem"; + }; + version = "4.5.0"; + }; + devise_lastseenable = { + dependencies = ["devise" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y"; + type = "gem"; + }; + version = "0.0.6"; + }; + diaspora-prosody-config = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp"; + type = "gem"; + }; + version = "0.0.7"; + }; + diaspora_federation = { + dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-json_schema = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-rails = { + dependencies = ["actionpack" "diaspora_federation"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-test = { + dependencies = ["diaspora_federation" "fabrication" "uuid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4"; + type = "gem"; + }; + version = "0.2.5"; + }; + diff-lcs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; + type = "gem"; + }; + version = "1.3.1"; + }; + domain_name = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; + type = "gem"; + }; + version = "0.5.20180417"; + }; + entypo-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6"; + type = "gem"; + }; + version = "3.0.0"; + }; + equalizer = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4"; + type = "gem"; + }; + version = "0.0.11"; + }; + erubi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1"; + type = "gem"; + }; + version = "1.7.1"; + }; + eslintrb = { + dependencies = ["execjs" "multi_json" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx"; + type = "gem"; + }; + version = "2.1.0"; + }; + et-orbi = { + dependencies = ["tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; + type = "gem"; + }; + version = "1.1.6"; + }; + ethon = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48"; + type = "gem"; + }; + version = "0.11.0"; + }; + excon = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; + type = "gem"; + }; + version = "0.62.0"; + }; + execjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; + type = "gem"; + }; + version = "2.7.0"; + }; + eye = { + dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk"; + type = "gem"; + }; + version = "0.10.0"; + }; + fabrication = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; + type = "gem"; + }; + version = "2.20.1"; + }; + factory_girl = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla"; + type = "gem"; + }; + version = "4.8.0"; + }; + factory_girl_rails = { + dependencies = ["factory_girl" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv"; + type = "gem"; + }; + version = "4.8.0"; + }; + faraday = { + dependencies = ["multipart-post"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52"; + type = "gem"; + }; + version = "0.15.3"; + }; + faraday-cookie_jar = { + dependencies = ["faraday" "http-cookie"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6"; + type = "gem"; + }; + version = "0.0.6"; + }; + faraday_middleware = { + dependencies = ["faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d"; + type = "gem"; + }; + version = "0.12.2"; + }; + ffi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; + type = "gem"; + }; + version = "1.9.25"; + }; + fixture_builder = { + dependencies = ["activerecord" "activesupport" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627"; + type = "gem"; + }; + version = "0.5.2.rc3"; + }; + fog-aws = { + dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs"; + type = "gem"; + }; + version = "3.3.0"; + }; + fog-core = { + dependencies = ["builder" "excon" "formatador" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8"; + type = "gem"; + }; + version = "2.1.2"; + }; + fog-json = { + dependencies = ["fog-core" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; + type = "gem"; + }; + version = "1.2.0"; + }; + fog-xml = { + dependencies = ["fog-core" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; + type = "gem"; + }; + version = "0.1.3"; + }; + formatador = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + fugit = { + dependencies = ["et-orbi" "raabro"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; + type = "gem"; + }; + version = "1.1.6"; + }; + fuubar = { + dependencies = ["rspec-core" "ruby-progressbar"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; + type = "gem"; + }; + version = "2.3.2"; + }; + get_process_mem = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; + type = "gem"; + }; + version = "0.2.3"; + }; + gherkin = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s"; + type = "gem"; + }; + version = "5.1.0"; + }; + gitlab = { + dependencies = ["httparty" "terminal-table"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34"; + type = "gem"; + }; + version = "4.7.0"; + }; + globalid = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; + type = "gem"; + }; + version = "0.4.1"; + }; + gon = { + dependencies = ["actionpack" "multi_json" "request_store"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl"; + type = "gem"; + }; + version = "6.2.1"; + }; + guard = { + dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; + type = "gem"; + }; + version = "2.15.0"; + }; + guard-compat = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; + type = "gem"; + }; + version = "1.2.1"; + }; + guard-rspec = { + dependencies = ["guard" "guard-compat" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; + type = "gem"; + }; + version = "4.7.3"; + }; + guard-rubocop = { + dependencies = ["guard" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp"; + type = "gem"; + }; + version = "1.3.0"; + }; + haml = { + dependencies = ["temple" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"; + type = "gem"; + }; + version = "5.0.4"; + }; + haml_lint = { + dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv"; + type = "gem"; + }; + version = "0.28.0"; + }; + hamlit = { + dependencies = ["temple" "thor" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf"; + type = "gem"; + }; + version = "2.9.1"; + }; + handlebars_assets = { + dependencies = ["execjs" "sprockets" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca"; + type = "gem"; + }; + version = "0.23.2"; + }; + hashdiff = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; + type = "gem"; + }; + version = "0.3.7"; + }; + hashie = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb"; + type = "gem"; + }; + version = "3.5.7"; + }; + http = { + dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; + type = "gem"; + }; + version = "3.3.0"; + }; + http-cookie = { + dependencies = ["domain_name"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; + type = "gem"; + }; + version = "1.0.3"; + }; + http-form_data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; + type = "gem"; + }; + version = "2.1.1"; + }; + http_accept_language = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; + type = "gem"; + }; + version = "2.1.1"; + }; + "http_parser.rb" = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"; + type = "gem"; + }; + version = "0.6.0"; + }; + httparty = { + dependencies = ["mime-types" "multi_xml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730"; + type = "gem"; + }; + version = "0.16.3"; + }; + httpclient = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; + type = "gem"; + }; + version = "2.8.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7"; + type = "gem"; + }; + version = "1.1.1"; + }; + i18n-inflector = { + dependencies = ["i18n"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g"; + type = "gem"; + }; + version = "2.6.7"; + }; + i18n-inflector-rails = { + dependencies = ["actionpack" "i18n-inflector" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk"; + type = "gem"; + }; + version = "1.0.7"; + }; + ipaddress = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; + type = "gem"; + }; + version = "0.8.3"; + }; + jaro_winkler = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah"; + type = "gem"; + }; + version = "1.5.1"; + }; + jasmine = { + dependencies = ["jasmine-core" "phantomjs" "rack" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-core = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-jquery-rails = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv"; + type = "gem"; + }; + version = "2.0.3"; + }; + jquery-rails = { + dependencies = ["rails-dom-testing" "railties" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8"; + type = "gem"; + }; + version = "4.3.3"; + }; + js-routes = { + dependencies = ["railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm"; + type = "gem"; + }; + version = "1.4.4"; + }; + js_image_paths = { + dependencies = ["rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf"; + type = "gem"; + }; + version = "0.1.1"; + }; + json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; + type = "gem"; + }; + version = "2.1.0"; + }; + json-jwt = { + dependencies = ["activesupport" "aes_key_wrap" "bindata"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r"; + type = "gem"; + }; + version = "1.9.4"; + }; + json-schema = { + dependencies = ["addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; + type = "gem"; + }; + version = "2.8.1"; + }; + json-schema-rspec = { + dependencies = ["json-schema" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9"; + type = "gem"; + }; + version = "0.0.4"; + }; + jsonpath = { + dependencies = ["multi_json" "to_regexp"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d"; + type = "gem"; + }; + version = "0.9.6"; + }; + jwt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; + type = "gem"; + }; + version = "2.1.0"; + }; + kgio = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"; + type = "gem"; + }; + version = "2.11.2"; + }; + kostya-sigar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb"; + type = "gem"; + }; + version = "2.0.4"; + }; + leaflet-rails = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb"; + type = "gem"; + }; + version = "1.3.1"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; + type = "gem"; + }; + version = "3.1.5"; + }; + little-plugger = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym"; + type = "gem"; + }; + version = "1.1.4"; + }; + logging = { + dependencies = ["little-plugger" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn"; + type = "gem"; + }; + version = "2.2.2"; + }; + logging-rails = { + dependencies = ["logging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239"; + type = "gem"; + }; + version = "0.6.0"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; + type = "gem"; + }; + version = "2.2.3"; + }; + lumberjack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; + type = "gem"; + }; + version = "1.0.13"; + }; + macaddr = { + dependencies = ["systemu"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b"; + type = "gem"; + }; + version = "1.7.1"; + }; + mail = { + dependencies = ["mini_mime"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; + type = "gem"; + }; + version = "2.7.1"; + }; + markdown-it-html5-embed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c"; + type = "gem"; + }; + version = "1.0.0"; + }; + markerb = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76"; + type = "gem"; + }; + version = "1.1.0"; + }; + memoizable = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c"; + type = "gem"; + }; + version = "0.4.2"; + }; + method_source = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + mime-types = { + dependencies = ["mime-types-data"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; + type = "gem"; + }; + version = "3.2.2"; + }; + mime-types-data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; + type = "gem"; + }; + version = "3.2018.0812"; + }; + mini_magick = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p"; + type = "gem"; + }; + version = "4.9.2"; + }; + mini_mime = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; + type = "gem"; + }; + version = "1.0.1"; + }; + mini_portile2 = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11"; + type = "gem"; + }; + version = "2.3.0"; + }; + minitest = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; + type = "gem"; + }; + version = "5.11.3"; + }; + mobile-fu = { + dependencies = ["rack-mobile-detect" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i"; + type = "gem"; + }; + version = "1.4.0"; + }; + multi_json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + multi_test = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"; + type = "gem"; + }; + version = "0.1.2"; + }; + multi_xml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; + type = "gem"; + }; + version = "0.6.0"; + }; + multipart-post = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; + type = "gem"; + }; + version = "2.0.0"; + }; + mysql2 = { + groups = ["mysql"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4"; + type = "gem"; + }; + version = "0.5.2"; + }; + naught = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg"; + type = "gem"; + }; + version = "1.1.0"; + }; + nenv = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; + type = "gem"; + }; + version = "0.3.0"; + }; + net-ldap = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "016igqz81a8zcwqzp5bbhryqmb2skmyf57ij3nb5z8sxwhw22jgh"; + type = "gem"; + }; + version = "0.16.1"; + }; + nio4r = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; + type = "gem"; + }; + version = "2.3.1"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz"; + type = "gem"; + }; + version = "1.8.5"; + }; + notiffany = { + dependencies = ["nenv" "shellany"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; + type = "gem"; + }; + version = "0.1.1"; + }; + oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y"; + type = "gem"; + }; + version = "0.5.4"; + }; + oauth2 = { + dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"; + type = "gem"; + }; + version = "1.4.1"; + }; + octokit = { + dependencies = ["sawyer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6"; + type = "gem"; + }; + version = "4.13.0"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"; + type = "gem"; + }; + version = "1.8.1"; + }; + omniauth-oauth = { + dependencies = ["oauth" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037"; + type = "gem"; + }; + version = "1.1.0"; + }; + omniauth-oauth2 = { + dependencies = ["oauth2" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr"; + type = "gem"; + }; + version = "1.5.0"; + }; + omniauth-tumblr = { + dependencies = ["multi_json" "omniauth-oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w"; + type = "gem"; + }; + version = "1.2"; + }; + omniauth-twitter = { + dependencies = ["omniauth-oauth" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; + type = "gem"; + }; + version = "1.4.0"; + }; + omniauth-wordpress = { + dependencies = ["omniauth-oauth2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303"; + type = "gem"; + }; + version = "0.2.2"; + }; + open_graph_reader = { + dependencies = ["faraday" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21"; + type = "gem"; + }; + version = "0.6.2"; + }; + openid_connect = { + dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd"; + type = "gem"; + }; + version = "1.1.6"; + }; + orm_adapter = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; + type = "gem"; + }; + version = "0.5.0"; + }; + parallel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"; + type = "gem"; + }; + version = "1.12.1"; + }; + parser = { + dependencies = ["ast"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f"; + type = "gem"; + }; + version = "2.5.3.0"; + }; + pg = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"; + type = "gem"; + }; + version = "1.1.3"; + }; + phantomjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk"; + type = "gem"; + }; + version = "2.1.1.0"; + }; + poltergeist = { + dependencies = ["capybara" "cliver" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95"; + type = "gem"; + }; + version = "1.18.1"; + }; + powerpack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; + type = "gem"; + }; + version = "0.1.2"; + }; + pronto = { + dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz"; + type = "gem"; + }; + version = "0.9.5"; + }; + pronto-eslint = { + dependencies = ["eslintrb" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-haml = { + dependencies = ["haml_lint" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg"; + type = "gem"; + }; + version = "0.9.0"; + }; + pronto-rubocop = { + dependencies = ["pronto" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-scss = { + dependencies = ["pronto" "scss_lint"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za"; + type = "gem"; + }; + version = "0.9.1"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; + type = "gem"; + }; + version = "3.6.0"; + }; + public_suffix = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; + type = "gem"; + }; + version = "3.0.3"; + }; + raabro = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; + type = "gem"; + }; + version = "1.1.6"; + }; + rack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-cors = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; + type = "gem"; + }; + version = "1.0.2"; + }; + rack-google-analytics = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj"; + type = "gem"; + }; + version = "1.2.0"; + }; + rack-mobile-detect = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5"; + type = "gem"; + }; + version = "0.4.0"; + }; + rack-oauth2 = { + dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii"; + type = "gem"; + }; + version = "1.9.3"; + }; + rack-piwik = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z"; + type = "gem"; + }; + version = "0.3.0"; + }; + rack-protection = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq"; + type = "gem"; + }; + version = "2.0.4"; + }; + rack-rewrite = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; + type = "gem"; + }; + version = "1.5.1"; + }; + rack-ssl = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; + type = "gem"; + }; + version = "1.4.1"; + }; + rack-test = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rails = { + dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q"; + type = "gem"; + }; + version = "5.1.6"; + }; + rails-assets-autosize = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib"; + type = "gem"; + }; + version = "4.0.2"; + }; + rails-assets-backbone = { + dependencies = ["rails-assets-underscore"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id"; + type = "gem"; + }; + version = "1.3.3"; + }; + rails-assets-blueimp-gallery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq"; + type = "gem"; + }; + version = "2.33.0"; + }; + rails-assets-bootstrap = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v"; + type = "gem"; + }; + version = "3.3.7"; + }; + rails-assets-bootstrap-markdown = { + dependencies = ["rails-assets-bootstrap"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3"; + type = "gem"; + }; + version = "2.10.0"; + }; + rails-assets-corejs-typeahead = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg"; + type = "gem"; + }; + version = "1.2.1"; + }; + rails-assets-diaspora_jsxc = { + dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi"; + type = "gem"; + }; + version = "0.1.5.develop.7"; + }; + rails-assets-emojione = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52"; + type = "gem"; + }; + version = "2.0.1"; + }; + "rails-assets-favico.js" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv"; + type = "gem"; + }; + version = "0.3.10"; + }; + rails-assets-fine-uploader = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv"; + type = "gem"; + }; + version = "5.13.0"; + }; + rails-assets-highlightjs = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp"; + type = "gem"; + }; + version = "9.12.0"; + }; + rails-assets-jasmine = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5"; + type = "gem"; + }; + version = "3.3.0"; + }; + rails-assets-jasmine-ajax = { + dependencies = ["rails-assets-jasmine"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg"; + type = "gem"; + }; + version = "3.4.0"; + }; + rails-assets-jquery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y"; + type = "gem"; + }; + version = "3.3.1"; + }; + rails-assets-jquery-colorbox = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp"; + type = "gem"; + }; + version = "1.6.4"; + }; + rails-assets-jquery-fullscreen-plugin = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58"; + type = "gem"; + }; + version = "0.5.0"; + }; + rails-assets-jquery-placeholder = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi"; + type = "gem"; + }; + version = "2.3.1"; + }; + rails-assets-jquery-textchange = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj"; + type = "gem"; + }; + version = "0.2.3"; + }; + "rails-assets-jquery.are-you-sure" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0"; + type = "gem"; + }; + version = "1.9.0"; + }; + "rails-assets-jquery.slimscroll" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998"; + type = "gem"; + }; + version = "1.3.8"; + }; + "rails-assets-jquery.ui" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa"; + type = "gem"; + }; + version = "1.11.4"; + }; + rails-assets-markdown-it = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9"; + type = "gem"; + }; + version = "8.4.2"; + }; + rails-assets-markdown-it--markdown-it-for-inline = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl"; + type = "gem"; + }; + version = "0.1.1"; + }; + rails-assets-markdown-it-diaspora-mention = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig"; + type = "gem"; + }; + version = "1.2.0"; + }; + rails-assets-markdown-it-hashtag = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk"; + type = "gem"; + }; + version = "0.4.0"; + }; + rails-assets-markdown-it-sanitizer = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36"; + type = "gem"; + }; + version = "0.4.3"; + }; + rails-assets-markdown-it-sub = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-markdown-it-sup = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-underscore = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc"; + type = "gem"; + }; + version = "1.9.1"; + }; + rails-assets-utatti-perfect-scrollbar = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v"; + type = "gem"; + }; + version = "1.4.0"; + }; + rails-controller-testing = { + dependencies = ["actionpack" "actionview" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy"; + type = "gem"; + }; + version = "1.0.2"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; + type = "gem"; + }; + version = "2.0.3"; + }; + rails-html-sanitizer = { + dependencies = ["loofah"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; + type = "gem"; + }; + version = "1.0.4"; + }; + rails-i18n = { + dependencies = ["i18n" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; + type = "gem"; + }; + version = "5.1.2"; + }; + rails-timeago = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv"; + type = "gem"; + }; + version = "2.16.0"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8"; + type = "gem"; + }; + version = "5.1.6"; + }; + rainbow = { + dependencies = ["rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w"; + type = "gem"; + }; + version = "2.2.2"; + }; + raindrops = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"; + type = "gem"; + }; + version = "0.19.0"; + }; + rake = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"; + type = "gem"; + }; + version = "12.3.1"; + }; + rb-fsevent = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; + type = "gem"; + }; + version = "0.9.10"; + }; + redcarpet = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; + type = "gem"; + }; + version = "3.4.0"; + }; + redis = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv"; + type = "gem"; + }; + version = "3.3.5"; + }; + regexp_parser = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; + type = "gem"; + }; + version = "1.3.0"; + }; + request_store = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; + type = "gem"; + }; + version = "1.4.1"; + }; + responders = { + dependencies = ["actionpack" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; + type = "gem"; + }; + version = "2.4.0"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; + type = "gem"; + }; + version = "3.8.2"; + }; + rspec-json_expectations = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn"; + type = "gem"; + }; + version = "2.1.0"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p"; + type = "gem"; + }; + version = "3.8.1"; + }; + rspec-support = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; + type = "gem"; + }; + version = "3.8.0"; + }; + rubocop = { + dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i"; + type = "gem"; + }; + version = "0.60.0"; + }; + ruby-oembed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0"; + type = "gem"; + }; + version = "0.12.0"; + }; + ruby-progressbar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; + type = "gem"; + }; + version = "1.10.0"; + }; + ruby_dep = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; + type = "gem"; + }; + version = "1.5.0"; + }; + rubyzip = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj"; + type = "gem"; + }; + version = "1.2.2"; + }; + rugged = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6"; + type = "gem"; + }; + version = "0.27.5"; + }; + safe_yaml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; + type = "gem"; + }; + version = "1.0.4"; + }; + sass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; + type = "gem"; + }; + version = "3.4.25"; + }; + sass-rails = { + dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"; + type = "gem"; + }; + version = "5.0.7"; + }; + sawyer = { + dependencies = ["addressable" "faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; + type = "gem"; + }; + version = "0.8.1"; + }; + scss_lint = { + dependencies = ["rake" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp"; + type = "gem"; + }; + version = "0.55.0"; + }; + secure_headers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5"; + type = "gem"; + }; + version = "6.0.0"; + }; + shellany = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; + type = "gem"; + }; + version = "0.0.1"; + }; + shoulda-matchers = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"; + type = "gem"; + }; + version = "3.1.2"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack-protection" "redis"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26"; + type = "gem"; + }; + version = "5.2.3"; + }; + sidekiq-cron = { + dependencies = ["fugit" "sidekiq"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0"; + type = "gem"; + }; + version = "1.0.4"; + }; + simple_captcha2 = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3"; + type = "gem"; + }; + version = "0.4.3"; + }; + simple_oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l"; + type = "gem"; + }; + version = "0.3.1"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sinon-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb"; + type = "gem"; + }; + version = "1.15.0"; + }; + spring = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75"; + type = "gem"; + }; + version = "2.0.2"; + }; + spring-commands-cucumber = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a"; + type = "gem"; + }; + version = "1.0.1"; + }; + spring-commands-rspec = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; + type = "gem"; + }; + version = "1.0.4"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; + type = "gem"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; + type = "gem"; + }; + version = "3.2.1"; + }; + state_machines = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; + type = "gem"; + }; + version = "0.5.0"; + }; + string-direction = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj"; + type = "gem"; + }; + version = "1.2.1"; + }; + swd = { + dependencies = ["activesupport" "attr_required" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd"; + type = "gem"; + }; + version = "1.1.2"; + }; + sysexits = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; + type = "gem"; + }; + version = "1.2.0"; + }; + systemu = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"; + type = "gem"; + }; + version = "2.6.5"; + }; + temple = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; + type = "gem"; + }; + version = "0.8.0"; + }; + term-ansicolor = { + dependencies = ["tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d"; + type = "gem"; + }; + version = "1.7.0"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; + type = "gem"; + }; + version = "1.8.0"; + }; + thor = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; + type = "gem"; + }; + version = "0.19.4"; + }; + thread_safe = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; + type = "gem"; + }; + version = "0.3.6"; + }; + tilt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; + type = "gem"; + }; + version = "2.0.8"; + }; + timecop = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp"; + type = "gem"; + }; + version = "0.9.1"; + }; + timers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; + type = "gem"; + }; + version = "4.2.0"; + }; + tins = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj"; + type = "gem"; + }; + version = "1.20.2"; + }; + to_regexp = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v"; + type = "gem"; + }; + version = "0.2.1"; + }; + turbo_dev_assets = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx"; + type = "gem"; + }; + version = "0.0.2"; + }; + twitter = { + dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5"; + type = "gem"; + }; + version = "6.2.0"; + }; + twitter-text = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; + type = "gem"; + }; + version = "1.14.7"; + }; + typhoeus = { + dependencies = ["ethon"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5"; + type = "gem"; + }; + version = "1.3.1"; + }; + tzinfo = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; + type = "gem"; + }; + version = "1.2.5"; + }; + uglifier = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1"; + type = "gem"; + }; + version = "4.1.19"; + }; + unf = { + dependencies = ["unf_ext"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; + type = "gem"; + }; + version = "0.1.4"; + }; + unf_ext = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; + type = "gem"; + }; + version = "0.0.7.5"; + }; + unicode-display_width = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57"; + type = "gem"; + }; + version = "1.4.0"; + }; + unicorn = { + dependencies = ["kgio" "raindrops"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak"; + type = "gem"; + }; + version = "5.4.1"; + }; + unicorn-worker-killer = { + dependencies = ["get_process_mem" "unicorn"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva"; + type = "gem"; + }; + version = "0.4.4"; + }; + uuid = { + dependencies = ["macaddr"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f"; + type = "gem"; + }; + version = "2.3.9"; + }; + valid = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3"; + type = "gem"; + }; + version = "1.2.0"; + }; + validate_email = { + dependencies = ["activemodel" "mail"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; + type = "gem"; + }; + version = "0.1.6"; + }; + validate_url = { + dependencies = ["activemodel" "addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh"; + type = "gem"; + }; + version = "1.0.2"; + }; + versionist = { + dependencies = ["activesupport" "railties" "yard"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m"; + type = "gem"; + }; + version = "1.7.0"; + }; + warden = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"; + type = "gem"; + }; + version = "1.2.8"; + }; + webfinger = { + dependencies = ["activesupport" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar"; + type = "gem"; + }; + version = "1.1.0"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib"; + type = "gem"; + }; + version = "3.4.2"; + }; + websocket-driver = { + dependencies = ["websocket-extensions"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l"; + type = "gem"; + }; + version = "0.6.5"; + }; + websocket-extensions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; + type = "gem"; + }; + version = "0.1.3"; + }; + will_paginate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9"; + type = "gem"; + }; + version = "3.1.6"; + }; + xpath = { + dependencies = ["nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; + yard = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"; + type = "gem"; + }; + version = "0.9.16"; + }; +} diff --git a/flakes/diaspora/ldap.patch b/flakes/diaspora/ldap.patch new file mode 100644 index 0000000..3d4f785 --- /dev/null +++ b/flakes/diaspora/ldap.patch @@ -0,0 +1,256 @@ +commit 936a14e225037aca4cdeac11c843c7985e636c88 +Author: Ismaël Bouya +Date: Mon Jul 24 19:58:24 2017 +0200 + + Add LDAP to diaspora + +diff --git a/Gemfile b/Gemfile +index 414b0138d..2a934e9c9 100644 +--- a/Gemfile ++++ b/Gemfile +@@ -217,6 +217,9 @@ gem "thor", "0.19.1" + + # gem "therubyracer", :platform => :ruby + ++# LDAP ++gem 'net-ldap', '~> 0.16' ++ + group :production do # we don"t install these on travis to speed up test runs + # Analytics + +diff --git a/Gemfile.lock b/Gemfile.lock +index 84f8172e4..cdbf19fcd 100644 +--- a/Gemfile.lock 2019-01-13 19:55:52.538561762 +0100 ++++ b/Gemfile.lock 2019-01-13 19:58:11.087099067 +0100 +@@ -398,6 +398,7 @@ + mysql2 (0.5.2) + naught (1.1.0) + nenv (0.3.0) ++ net-ldap (0.16.1) + nio4r (2.3.1) + nokogiri (1.8.5) + mini_portile2 (~> 2.3.0) +@@ -820,6 +821,7 @@ + minitest + mobile-fu (= 1.4.0) + mysql2 (= 0.5.2) ++ net-ldap (~> 0.16) + nokogiri (= 1.8.5) + omniauth (= 1.8.1) + omniauth-tumblr (= 1.2) +diff --git a/app/models/user.rb b/app/models/user.rb +index 940a48f25..d1e2beeee 100644 +--- a/app/models/user.rb ++++ b/app/models/user.rb +@@ -337,6 +337,12 @@ class User < ActiveRecord::Base + end + + def send_confirm_email ++ if skip_email_confirmation? ++ self.email = unconfirmed_email ++ self.unconfirmed_email = nil ++ save ++ end ++ + return if unconfirmed_email.blank? + Workers::Mail::ConfirmEmail.perform_async(id) + end +@@ -554,6 +560,14 @@ class User < ActiveRecord::Base + end + end + ++ def ldap_user? ++ AppConfig.ldap.enable? && ldap_dn.present? ++ end ++ ++ def skip_email_confirmation? ++ ldap_user? && AppConfig.ldap.skip_email_confirmation? ++ end ++ + private + + def clearable_fields +diff --git a/config/defaults.yml b/config/defaults.yml +index c046aff07..66e9afa13 100644 +--- a/config/defaults.yml ++++ b/config/defaults.yml +@@ -202,6 +202,20 @@ defaults: + scope: tags + include_user_tags: false + pod_tags: ++ ldap: ++ enable: false ++ host: localhost ++ port: 389 ++ only_ldap: true ++ mail_attribute: mail ++ skip_email_confirmation: true ++ use_bind_dn: true ++ bind_dn: "cn=diaspora,dc=example,dc=com" ++ bind_pw: "password" ++ search_base: "dc=example,dc=com" ++ search_filter: "uid=%{username}" ++ bind_template: "uid=%{username},dc=example,dc=com" ++ + + development: + environment: +diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example +index b2573625d..c357c8651 100644 +--- a/config/diaspora.yml.example ++++ b/config/diaspora.yml.example +@@ -710,6 +710,36 @@ configuration: ## Section + ## If scope is 'tags', a comma separated list of tags here can be set. + ## For example "linux,diaspora", to receive posts related to these tags + #pod_tags: ++ ldap: ++ # Uncomment next line if you want to use LDAP on your instance ++ enable: true ++ host: localhost ++ port: 389 ++ # Use only LDAP authentication (don't try other means) ++ only_ldap: true ++ # LDAP attribute to find the user's e-mail. Necessary to create accounts ++ # for not existing users ++ mail_attribute: mail ++ # Skip e-mail confirmation when creating an account via LDAP. ++ skip_email_confirmation: true ++ # ----- Using bind_dn and bind_pw ++ # bind_dn and bind_pw may be used if the diaspora instance ++ # should be able to connect to LDAP to find and search for users. ++ ++ use_bind_dn: true ++ bind_dn: "cn=diaspora,dc=example,dc=com" ++ bind_pw: "password" ++ search_base: "dc=example,dc=com" ++ # This is the filter with which to search for the user. %{username} will ++ # be replaced by the given login. ++ search_filter: "uid=%{username}" ++ # ++ # ----- Using template ++ # This setting doesn't require a diaspora LDAP user. Use a template, and ++ # diaspora will try to login with the templated dn and password ++ # ++ # bind_template: "uid=%{username},dc=example,dc=com" ++ + + ## Here you can override settings defined above if you need + ## to have them different in different environments. +diff --git a/config/initializers/0_ldap_authenticatable.rb b/config/initializers/0_ldap_authenticatable.rb +new file mode 100644 +index 000000000..49846502f +--- /dev/null ++++ b/config/initializers/0_ldap_authenticatable.rb +@@ -0,0 +1,82 @@ ++require 'net/ldap' ++require 'devise/strategies/authenticatable' ++ ++module Devise ++ module Strategies ++ class LdapAuthenticatable < Authenticatable ++ def valid? ++ AppConfig.ldap.enable? && params[:user].present? ++ end ++ ++ def authenticate! ++ ldap = Net::LDAP.new( ++ host: AppConfig.ldap.host, ++ port: AppConfig.ldap.port, ++ encryption: :simple_tls, ++ ) ++ ++ if AppConfig.ldap.use_bind_dn? ++ ldap.auth AppConfig.ldap.bind_dn, AppConfig.ldap.bind_pw ++ ++ if !ldap.bind ++ return fail(:ldap_configuration_error) ++ end ++ ++ search_filter = AppConfig.ldap.search_filter % { username: params[:user][:username] } ++ ++ result = ldap.search(base: AppConfig.ldap.search_base, filter: search_filter, result_set: true) ++ ++ if result.count != 1 ++ return login_fail ++ end ++ ++ user_dn = result.first.dn ++ user_email = result.first[AppConfig.ldap.mail_attribute].first ++ else ++ user_dn = AppConfig.ldap.bind_template % { username: params[:user][:username] } ++ end ++ ++ ldap.auth user_dn, params[:user][:password] ++ ++ if ldap.bind ++ user = User.find_by(ldap_dn: user_dn) ++ ++ # We don't want to trust too much the email attribute from ++ # LDAP: if the user can edit it himself, he may login as ++ # anyone ++ if user.nil? ++ if !AppConfig.ldap.use_bind_dn? ++ result = ldap.search(base: user_dn, scope: Net::LDAP::SearchScope_BaseObject, filter: "(objectClass=*)", result_set: true) ++ user_email = result.first[AppConfig.ldap.mail_attribute].first ++ end ++ ++ if user_email.present? && User.find_by(email: user_email).nil? ++ # Password is used for remember_me token ++ user = User.build(email: user_email, ldap_dn: user_dn, password: SecureRandom.hex, username: params[:user][:username]) ++ user.save ++ user.seed_aspects ++ elsif User.find_by(email: user_email).present? ++ return fail(:ldap_existing_email) ++ else ++ return fail(:ldap_cannot_create_account_without_email) ++ end ++ end ++ ++ success!(user) ++ else ++ return login_fail ++ end ++ end ++ ++ def login_fail ++ if AppConfig.ldap.only_ldap? ++ return fail(:ldap_invalid_login) ++ else ++ return pass ++ end ++ end ++ end ++ end ++end ++ ++Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable) +diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb +index 3698e2373..14e88063e 100644 +--- a/config/initializers/devise.rb ++++ b/config/initializers/devise.rb +@@ -250,10 +250,9 @@ Devise.setup do |config| + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # +- # config.warden do |manager| +- # manager.intercept_401 = false +- # manager.default_strategies(:scope => :user).unshift :some_external_strategy +- # end ++ config.warden do |manager| ++ manager.default_strategies(scope: :user).unshift :ldap_authenticatable ++ end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine +diff --git a/db/migrate/20170724182100_add_ldap_dn_to_users.rb b/db/migrate/20170724182100_add_ldap_dn_to_users.rb +new file mode 100644 +index 000000000..f5cc84d11 +--- /dev/null ++++ b/db/migrate/20170724182100_add_ldap_dn_to_users.rb +@@ -0,0 +1,6 @@ ++class AddLdapDnToUsers < ActiveRecord::Migration ++ def change ++ add_column :users, :ldap_dn, :text, null: true, default: nil ++ add_index :users, ['ldap_dn'], :length => { "ldap_dn" => 191 } ++ end ++end diff --git a/flakes/etherpad-lite/default.nix b/flakes/etherpad-lite/default.nix new file mode 100644 index 0000000..1dd5aa4 --- /dev/null +++ b/flakes/etherpad-lite/default.nix @@ -0,0 +1,68 @@ +{ varDir ? "/var/lib/etherpad-lite" # if you override this change the StateDirectory in service file too! +, nodeEnv, stdenv, callPackage, src, lib, nodejs }: +let + moduleNames = [ + "ep_aa_file_menu_toolbar" "ep_adminpads" "ep_align" "ep_bookmark" + "ep_clear_formatting" "ep_colors" "ep_comments_page" + "ep_copy_paste_select_all" "ep_cursortrace" "ep_delete_empty_pads" + "ep_embedmedia" "ep_font_family" "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" + ]; + # nix files are built using node2nix -i node-packages.json + allModules = lib.attrsets.genAttrs moduleNames + (name: (callPackage (./modules + "/${name}/node-packages.nix") { nodeEnv = callPackage nodeEnv {}; }).${name}); + toPassthru = pkg: moduleNames: { + inherit varDir allModules nodejs moduleNames; + withModules = withModules pkg; + }; + withModules = pkg: toModules: + let + modules = toModules allModules; + toInstallModule = n: '' + cp -a ${n}/lib/node_modules/${n.packageName} $out/node_modules + if [ ! -f $out/node_modules/${n.packageName}/.ep_initialized ]; then + chmod u+w $out/node_modules/${n.packageName}/ + ln -s ${varDir}/ep_initialized/${n.packageName} $out/node_modules/${n.packageName}/.ep_initialized + fi + ''; + modulesNames = map (n: n.packageName) modules; + newEtherpad = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallModule modules); + passthru = toPassthru newEtherpad moduleNames; + }); + in newEtherpad; + # built using node2nix -l package-lock.json + # and changing "./." to "src" + node-environment = (callPackage ./node-packages.nix { + nodeEnv = callPackage nodeEnv {}; + src = stdenv.mkDerivation { + pname = "etherpad-lite"; + version = src.version; + inherit src; + patches = [ ./libreoffice_patch.diff ]; + buildPhase = '' + touch src/.ep_initialized + ''; + installPhase = '' + cp -a src/ $out + ''; + }; + }).package; + package = stdenv.mkDerivation rec { + name = "etherpad-lite-${src.version}"; + src = node-environment; + version = src.version; + installPhase = '' + mkdir -p $out + mkdir $out/node_modules + cp -a lib/node_modules/ep_etherpad-lite $out/src + chmod u+w $out/src/static/js/ + ln -s ../src $out/node_modules/ep_etherpad-lite + ln -s ${varDir}/var $out/var + ''; + passthru = toPassthru package []; + }; +in package diff --git a/flakes/etherpad-lite/etherpad_cleanup.sql b/flakes/etherpad-lite/etherpad_cleanup.sql new file mode 100644 index 0000000..4002715 --- /dev/null +++ b/flakes/etherpad-lite/etherpad_cleanup.sql @@ -0,0 +1,30 @@ +DO $$ + DECLARE todelete record; + BEGIN + FOR todelete IN + select split_part(key, ':', 4) as k from store where key like 'mypads:jobqueue:deletePad:%' + LOOP + select * from store where key in (select 'readonly2pad:' || split_part(value, '"', 2) from store where key = 'pad2readonly:' || todelete.k); + select * from store where key = 'pad2readonly:' || todelete.k; + select * from store where key like 'pad:' || todelete.k || ':revs:%'; + select * from store where key like 'pad:' || todelete.k || ':chats:%'; + END LOOP; + END $$ + +-- /nix/store/1i77431p6996lbyflpkb803zsiaj24kx-etherpad-lite-1.8.3/node_modules/ep_mypads/scripts/mypads-jobqueue-minion.js +for toDelete in + select split_part(key, ':', 4) from store where key like 'mypads:jobqueue:deletePad:%' +loop + select * from store where key in (select 'readonly2pad:' || split_part(value, '"', 2) from store where key = 'pad2readonly:' || toDelete); + select * from store where key = 'pad2readonly:' || toDelete; + select * from store where key like 'pad:' || toDelete || ':revs:%'; + select * from store where key like 'pad:' || toDelete || ':chats:%'; +end loop +--select * from store where key in (select 'pad2readonly:' || split_part(key, ':', 4) from store where key like 'mypads:jobqueue:deletePad:%'); +-- +--delete from store where key in (select 'readonly2pad:' || split_part(value, '"', 2) from store where key in (select 'pad2readonly:' || split_part(key, ':', 4) from store where key like 'mypads:jobqueue:deletePad:%')) +--delete from store where key in (select 'pad2readonly:' || split_part(key, ':', 4) from store where key like 'mypads:jobqueue:deletePad:%'); +--delete from store where key like any(select 'pad:' || split_part(key, ':', 4) || ':revs:%' from store where key like 'mypads:jobqueue:deletePad:%'); +--delete from store where key like any(select 'pad:' || split_part(key, ':', 4) || ':chats:%' from store where key like 'mypads:jobqueue:deletePad:%'); +--delete from store where key like 'mypads:jobqueue:deletePad:%'; + diff --git a/flakes/etherpad-lite/flake.lock b/flakes/etherpad-lite/flake.lock new file mode 100644 index 0000000..19d9ffa --- /dev/null +++ b/flakes/etherpad-lite/flake.lock @@ -0,0 +1,150 @@ +{ + "nodes": { + "etherpad-lite": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "root": { + "inputs": { + "etherpad-lite": "etherpad-lite", + "flake-utils": "flake-utils", + "mypackages": "mypackages", + "nixpkgs": "nixpkgs_2" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/etherpad-lite/flake.nix b/flakes/etherpad-lite/flake.nix new file mode 100644 index 0000000..6e0d7db --- /dev/null +++ b/flakes/etherpad-lite/flake.nix @@ -0,0 +1,227 @@ +{ + description = "Your self-hosted, globally interconnected microblogging community"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs = { + url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742"; + flake = false; + }; + inputs.etherpad-lite = { + url = "github:ether/etherpad-lite/1.8.3"; + flake = false; + }; + inputs.mypackages.url = "path:../mypackages"; + + outputs = { self, nixpkgs, etherpad-lite, flake-utils, mypackages }: flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + version = (builtins.fromJSON (builtins.readFile ./flake.lock)).nodes.etherpad-lite.original.ref; + inherit (pkgs) callPackage; + in rec { + packages.etherpad-lite = callPackage ./. { inherit (mypackages.mylibs) nodeEnv; src = etherpad-lite // { inherit version; }; }; + defaultPackage = packages.etherpad-lite; + legacyPackages.etherpad-lite = packages.etherpad-lite; + checks = { + build = defaultPackage; + }; + } + ) // rec { + overlays = { + etherpad-lite = final: prev: { + etherpad-lite = self.defaultPackage."${final.system}"; + }; + }; + overlay = overlays.etherpad-lite; + nixosModule = { lib, pkgs, config, ... }: + let + name = "etherpad-lite"; + cfg = config.services.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.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 { + nixpkgs.overlays = [ self.overlay ]; + systemd.services.etherpad-lite-cleanup = { + description = "Etherpad-lite cleanup old mypads"; + after = [ "network.target" "postgresql.service" ]; + wants = [ "postgresql.service" ]; + + environment.NODE_ENV = "production"; + environment.HOME = cfg.workdir; + + path = [ cfg.workdir.nodejs ]; + + script = '' + exec ${cfg.workdir.nodejs}/bin/node ${cfg.workdir}/node_modules/ep_mypads/scripts/mypads-jobqueue-minion.js \ + --settings ${cfg.configFile} \ + --oneshot + ''; + + serviceConfig = { + DynamicUser = true; + User = cfg.user; + Group = cfg.group; + WorkingDirectory = "%T"; + PrivateTmp = true; + NoNewPrivileges = true; + PrivateDevices = true; + ProtectHome = true; + ProtectControlGroups = true; + ProtectKernelModules = true; + Type = "oneshot"; + }; + }; + 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 = [ cfg.workdir.nodejs ]; + + script = '' + exec ${cfg.workdir.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}/var ${cfg.dataDir}/ep_initialized" + "+${pkgs.coreutils}/bin/chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir} ${cfg.configFile} ${cfg.sessionKeyFile} ${cfg.apiKeyFile}" + ]; + }; + }; + + }; + }; + }; +} + + diff --git a/flakes/etherpad-lite/libreoffice_patch.diff b/flakes/etherpad-lite/libreoffice_patch.diff new file mode 100644 index 0000000..86fac15 --- /dev/null +++ b/flakes/etherpad-lite/libreoffice_patch.diff @@ -0,0 +1,12 @@ +diff --git a/src/node/utils/LibreOffice.js b/src/node/utils/LibreOffice.js +index 267f7a0c..10518577 100644 +--- a/src/node/utils/LibreOffice.js ++++ b/src/node/utils/LibreOffice.js +@@ -78,6 +78,7 @@ function doConvertTask(task, callback) { + '--invisible', + '--nologo', + '--nolockcheck', ++ '-env:UserInstallation=file:///tmp/', + '--writer', + '--convert-to', task.type, + task.srcFile, diff --git a/flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.json b/flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.json new file mode 100644 index 0000000..9b0f681 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.json @@ -0,0 +1 @@ +[ "ep_aa_file_menu_toolbar" ] diff --git a/flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.nix b/flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.nix new file mode 100644 index 0000000..8a2fb1b --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.nix @@ -0,0 +1,26 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_aa_file_menu_toolbar = nodeEnv.buildNodePackage { + name = "ep_aa_file_menu_toolbar"; + packageName = "ep_aa_file_menu_toolbar"; + version = "0.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_aa_file_menu_toolbar/-/ep_aa_file_menu_toolbar-0.1.6.tgz"; + sha1 = "aaa374d9429c9b2382311fab69e0ff819b53b7b0"; + }; + buildInputs = globalBuildInputs; + meta = { + description = "File / Menu style toolbar"; + homepage = https://github.com/JohnMcLear/ep_file_menu_toolbar; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_adminpads/node-packages.json b/flakes/etherpad-lite/modules/ep_adminpads/node-packages.json new file mode 100644 index 0000000..7643607 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_adminpads/node-packages.json @@ -0,0 +1 @@ +[ "ep_adminpads" ] diff --git a/flakes/etherpad-lite/modules/ep_adminpads/node-packages.nix b/flakes/etherpad-lite/modules/ep_adminpads/node-packages.nix new file mode 100644 index 0000000..2f62257 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_adminpads/node-packages.nix @@ -0,0 +1,27 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_adminpads = nodeEnv.buildNodePackage { + name = "ep_adminpads"; + packageName = "ep_adminpads"; + version = "0.0.12"; + src = fetchurl { + url = "https://github.com/spcsser/ep_adminpads/archive/master.tar.gz"; + sha1 = "49ypihbwxmd97g813aq2rjwh7pq1y08a"; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Gives the ability to list and administrate all pads on admin page"; + homepage = "https://github.com/spcsser/ep_adminpads#readme"; + license = "MIT"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} diff --git a/flakes/etherpad-lite/modules/ep_align/node-packages.json b/flakes/etherpad-lite/modules/ep_align/node-packages.json new file mode 100644 index 0000000..9405dd2 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_align/node-packages.json @@ -0,0 +1 @@ +[ "ep_align" ] diff --git a/flakes/etherpad-lite/modules/ep_align/node-packages.nix b/flakes/etherpad-lite/modules/ep_align/node-packages.nix new file mode 100644 index 0000000..1a57a9c --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_align/node-packages.nix @@ -0,0 +1,26 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_align = nodeEnv.buildNodePackage { + name = "ep_align"; + packageName = "ep_align"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_align/-/ep_align-0.2.0.tgz"; + sha512 = "bMrwsieCfz3LkxuIXiNu7UKkUQ7b+ceI09XRd1cCMskDwuJow3N3hB4/gecqfF+v4lS0qmDEa7bJvSTrhHiXBQ=="; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Add Left/Center/Right/Justify to lines of text in a pad"; + homepage = "https://github.com/johnmclear/ep_align#readme"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_bookmark/node-packages.json b/flakes/etherpad-lite/modules/ep_bookmark/node-packages.json new file mode 100644 index 0000000..80745ca --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_bookmark/node-packages.json @@ -0,0 +1 @@ +[ "ep_bookmark" ] diff --git a/flakes/etherpad-lite/modules/ep_bookmark/node-packages.nix b/flakes/etherpad-lite/modules/ep_bookmark/node-packages.nix new file mode 100644 index 0000000..3975044 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_bookmark/node-packages.nix @@ -0,0 +1,26 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_bookmark = nodeEnv.buildNodePackage { + name = "ep_bookmark"; + packageName = "ep_bookmark"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_bookmark/-/ep_bookmark-1.2.0.tgz"; + sha512 = "sHTXIKui1l+PxeBtzlwSvRg8TZ8w9PE5aaxTg5b/siwNmprXeoiL6ZUiOTGmp18yLXs1ltJ2BzSqJX57pjGVWg=="; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Etherpad plugin for users to save a list of bookmarks of their visited pads locally in the browser's local storage"; + homepage = "https://github.com/Gared/ep_bookmark#readme"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.json b/flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.json new file mode 100644 index 0000000..07c0662 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.json @@ -0,0 +1 @@ +[ "ep_clear_formatting" ] diff --git a/flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.nix b/flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.nix new file mode 100644 index 0000000..adb22f1 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_clear_formatting/node-packages.nix @@ -0,0 +1,25 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_clear_formatting = nodeEnv.buildNodePackage { + name = "ep_clear_formatting"; + packageName = "ep_clear_formatting"; + version = "0.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_clear_formatting/-/ep_clear_formatting-0.0.2.tgz"; + sha1 = "b16970b9c6be01246d23cb5a81777aa220d06fc4"; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Clear formatting on a selection, this plugin requires the file menu"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_colors/node-packages.json b/flakes/etherpad-lite/modules/ep_colors/node-packages.json new file mode 100644 index 0000000..b513f5c --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_colors/node-packages.json @@ -0,0 +1 @@ +[ "ep_colors" ] diff --git a/flakes/etherpad-lite/modules/ep_colors/node-packages.nix b/flakes/etherpad-lite/modules/ep_colors/node-packages.nix new file mode 100644 index 0000000..f2f8201 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_colors/node-packages.nix @@ -0,0 +1,25 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_colors = nodeEnv.buildNodePackage { + name = "ep_colors"; + packageName = "ep_colors"; + version = "0.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_colors/-/ep_colors-0.0.3.tgz"; + sha1 = "aa95e1b12e009ed6b05d0ccb188ca4829e799780"; + }; + buildInputs = globalBuildInputs; + meta = { + description = "add colors to the etherpad"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_comments_page/node-packages.json b/flakes/etherpad-lite/modules/ep_comments_page/node-packages.json new file mode 100644 index 0000000..ae32884 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_comments_page/node-packages.json @@ -0,0 +1 @@ +["ep_comments_page"] diff --git a/flakes/etherpad-lite/modules/ep_comments_page/node-packages.nix b/flakes/etherpad-lite/modules/ep_comments_page/node-packages.nix new file mode 100644 index 0000000..8d7c85a --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_comments_page/node-packages.nix @@ -0,0 +1,342 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = { + "after-0.8.2" = { + name = "after"; + packageName = "after"; + version = "0.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/after/-/after-0.8.2.tgz"; + sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f"; + }; + }; + "arraybuffer.slice-0.0.7" = { + name = "arraybuffer.slice"; + packageName = "arraybuffer.slice"; + version = "0.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz"; + sha512 = "wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="; + }; + }; + "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=="; + }; + }; + "backo2-1.0.2" = { + name = "backo2"; + packageName = "backo2"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz"; + sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947"; + }; + }; + "base64-arraybuffer-0.1.5" = { + name = "base64-arraybuffer"; + packageName = "base64-arraybuffer"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz"; + sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8"; + }; + }; + "better-assert-1.0.2" = { + name = "better-assert"; + packageName = "better-assert"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz"; + sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522"; + }; + }; + "blob-0.0.5" = { + name = "blob"; + packageName = "blob"; + version = "0.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz"; + sha512 = "gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="; + }; + }; + "callsite-1.0.0" = { + name = "callsite"; + packageName = "callsite"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz"; + sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20"; + }; + }; + "component-bind-1.0.0" = { + name = "component-bind"; + packageName = "component-bind"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz"; + sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"; + }; + }; + "component-emitter-1.2.1" = { + name = "component-emitter"; + packageName = "component-emitter"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz"; + sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; + }; + }; + "component-inherit-0.0.3" = { + name = "component-inherit"; + packageName = "component-inherit"; + version = "0.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz"; + sha1 = "645fc4adf58b72b649d5cae65135619db26ff143"; + }; + }; + "debug-3.1.0" = { + name = "debug"; + packageName = "debug"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz"; + sha512 = "OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="; + }; + }; + "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=="; + }; + }; + "engine.io-client-3.4.1" = { + name = "engine.io-client"; + packageName = "engine.io-client"; + version = "3.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.1.tgz"; + sha512 = "RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw=="; + }; + }; + "engine.io-parser-2.2.0" = { + name = "engine.io-parser"; + packageName = "engine.io-parser"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz"; + sha512 = "6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w=="; + }; + }; + "formidable-1.2.2" = { + name = "formidable"; + packageName = "formidable"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz"; + sha512 = "V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="; + }; + }; + "has-binary2-1.0.3" = { + name = "has-binary2"; + packageName = "has-binary2"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz"; + sha512 = "G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw=="; + }; + }; + "has-cors-1.1.0" = { + name = "has-cors"; + packageName = "has-cors"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz"; + sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39"; + }; + }; + "indexof-0.0.1" = { + name = "indexof"; + packageName = "indexof"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz"; + sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; + }; + }; + "isarray-2.0.1" = { + name = "isarray"; + packageName = "isarray"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz"; + sha1 = "a37d94ed9cda2d59865c9f76fe596ee1f338741e"; + }; + }; + "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.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=="; + }; + }; + "object-component-0.0.3" = { + name = "object-component"; + packageName = "object-component"; + version = "0.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz"; + sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291"; + }; + }; + "parseqs-0.0.5" = { + name = "parseqs"; + packageName = "parseqs"; + version = "0.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz"; + sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d"; + }; + }; + "parseuri-0.0.5" = { + name = "parseuri"; + packageName = "parseuri"; + version = "0.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz"; + sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a"; + }; + }; + "socket.io-client-2.3.0" = { + name = "socket.io-client"; + packageName = "socket.io-client"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz"; + sha512 = "cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA=="; + }; + }; + "socket.io-parser-3.3.0" = { + name = "socket.io-parser"; + packageName = "socket.io-parser"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz"; + sha512 = "hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng=="; + }; + }; + "to-array-0.1.4" = { + name = "to-array"; + packageName = "to-array"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz"; + sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"; + }; + }; + "ws-6.1.4" = { + name = "ws"; + packageName = "ws"; + version = "6.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz"; + sha512 = "eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA=="; + }; + }; + "xmlhttprequest-ssl-1.5.5" = { + name = "xmlhttprequest-ssl"; + packageName = "xmlhttprequest-ssl"; + version = "1.5.5"; + src = fetchurl { + url = "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz"; + sha1 = "c2876b06168aadc40e57d97e81191ac8f4398b3e"; + }; + }; + "yeast-0.1.2" = { + name = "yeast"; + packageName = "yeast"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz"; + sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419"; + }; + }; + }; +in +{ + ep_comments_page = nodeEnv.buildNodePackage { + name = "ep_comments_page"; + packageName = "ep_comments_page"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_comments_page/-/ep_comments_page-0.1.0.tgz"; + sha512 = "aHUfyR3HZ677wgL1hJEeaa1yIabW3PjaFXHhWnlEXdIDXL3WmgkGQ4Y1ccHp057EmquCwNb595HADQO+QUK/lw=="; + }; + dependencies = [ + sources."after-0.8.2" + sources."arraybuffer.slice-0.0.7" + sources."async-limiter-1.0.1" + sources."backo2-1.0.2" + sources."base64-arraybuffer-0.1.5" + sources."better-assert-1.0.2" + sources."blob-0.0.5" + sources."callsite-1.0.0" + sources."component-bind-1.0.0" + sources."component-emitter-1.2.1" + sources."component-inherit-0.0.3" + sources."debug-4.1.1" + sources."engine.io-client-3.4.1" + sources."engine.io-parser-2.2.0" + sources."formidable-1.2.2" + sources."has-binary2-1.0.3" + sources."has-cors-1.1.0" + sources."indexof-0.0.1" + sources."isarray-2.0.1" + sources."ms-2.1.2" + sources."object-component-0.0.3" + sources."parseqs-0.0.5" + sources."parseuri-0.0.5" + sources."socket.io-client-2.3.0" + (sources."socket.io-parser-3.3.0" // { + dependencies = [ + sources."debug-3.1.0" + sources."ms-2.0.0" + ]; + }) + sources."to-array-0.1.4" + sources."ws-6.1.4" + sources."xmlhttprequest-ssl-1.5.5" + sources."yeast-0.1.2" + ]; + buildInputs = globalBuildInputs; + meta = { + description = "Adds comments on sidebar and link it to the text. Support for Page View, requires ep_page_view"; + homepage = "https://github.com/ether/ep_comments#readme"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.json b/flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.json new file mode 100644 index 0000000..f6da8df --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.json @@ -0,0 +1 @@ +[ "ep_copy_paste_select_all" ] diff --git a/flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.nix b/flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.nix new file mode 100644 index 0000000..504bee2 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.nix @@ -0,0 +1,26 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_copy_paste_select_all = nodeEnv.buildNodePackage { + name = "ep_copy_paste_select_all"; + packageName = "ep_copy_paste_select_all"; + version = "0.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_copy_paste_select_all/-/ep_copy_paste_select_all-0.0.4.tgz"; + sha1 = "41b89ece9da8e549a7ca4b11cdfa0a27344f21c8"; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Add support to do Copy, Paste, Select All and Find and Replace, this plugin requires the file menu"; + homepage = https://github.com/ether/ep_copy_paste_select_all; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_cursortrace/node-packages.json b/flakes/etherpad-lite/modules/ep_cursortrace/node-packages.json new file mode 100644 index 0000000..b409581 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_cursortrace/node-packages.json @@ -0,0 +1 @@ +[ "ep_cursortrace" ] diff --git a/flakes/etherpad-lite/modules/ep_cursortrace/node-packages.nix b/flakes/etherpad-lite/modules/ep_cursortrace/node-packages.nix new file mode 100644 index 0000000..d8c1480 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_cursortrace/node-packages.nix @@ -0,0 +1,26 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_cursortrace = nodeEnv.buildNodePackage { + name = "ep_cursortrace"; + packageName = "ep_cursortrace"; + version = "2.0.15"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_cursortrace/-/ep_cursortrace-2.0.15.tgz"; + sha1 = "fa374f2d4be2708af998fbb407633c55d9031326"; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Show cursor/caret movements of other users in real time"; + homepage = https://github.com/redhog/ep_cursortrace; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.json b/flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.json new file mode 100644 index 0000000..8688afc --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.json @@ -0,0 +1 @@ +[ "ep_delete_empty_pads" ] diff --git a/flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.nix b/flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.nix new file mode 100644 index 0000000..8f3e9c0 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_delete_empty_pads/node-packages.nix @@ -0,0 +1,26 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = {}; +in +{ + ep_delete_empty_pads = nodeEnv.buildNodePackage { + name = "ep_delete_empty_pads"; + packageName = "ep_delete_empty_pads"; + version = "0.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/ep_delete_empty_pads/-/ep_delete_empty_pads-0.0.6.tgz"; + sha512 = "ZpVKhWYUBAz5jWXT4Ldjraa5oAmOmOiSaNUSVOdVEG7DLeoNaTrjSQx0KZl4EjF1Qp/oUQwX69ryjY0assmdrw=="; + }; + buildInputs = globalBuildInputs; + meta = { + description = "Delete pads which were never edited"; + license = "Apache-2.0"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +} \ No newline at end of file diff --git a/flakes/etherpad-lite/modules/ep_embedmedia/fix.patch b/flakes/etherpad-lite/modules/ep_embedmedia/fix.patch new file mode 100644 index 0000000..162f1b0 --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_embedmedia/fix.patch @@ -0,0 +1,85 @@ +diff --git a/ep.json b/ep.json +index 083d484..6803475 100644 +--- a/ep.json ++++ b/ep.json +@@ -5,6 +5,7 @@ + "hooks": { + "eejsBlock_editbarMenuLeft": "ep_embedmedia/hooks:eejsBlock_editbarMenuLeft", + "eejsBlock_scripts": "ep_embedmedia/hooks:eejsBlock_scripts", ++ "eejsBlock_timesliderBody": "ep_embedmedia/hooks:eejsBlock_scripts", + "eejsBlock_styles": "ep_embedmedia/hooks:eejsBlock_styles", + "eejsBlock_body": "ep_embedmedia/hooks:eejsBlock_body" + }, +diff --git a/static/css/main.css b/static/css/main.css +index 72a460f..3b66d8e 100644 +--- a/static/css/main.css ++++ b/static/css/main.css +@@ -6,10 +6,18 @@ + z-index:999999; + } + ++#embedMediaSrc { ++ max-width: 100%; ++} ++ + .embedMediaButton { + padding:10px; + } + ++#doEmbedMedia{ ++ color:blue; ++} ++ + #cancelEmbedMedia{ + color:red; + } +@@ -19,6 +27,6 @@ + } + + .buttonicon-embed-media:before{ +- content:"\e80b"; ++ content:"\e83b"; + top: 2px !important; + } +diff --git a/static/js/main.js b/static/js/main.js +index 8c94767..19415d5 100644 +--- a/static/js/main.js ++++ b/static/js/main.js +@@ -10,22 +10,25 @@ $(document).ready(function () { + } else { + module.slideDown("fast"); + } ++ module.toggleClass("popup-show"); + }); + + $("#doEmbedMedia").click(function () { + var padeditor = require('ep_etherpad-lite/static/js/pad_editor').padeditor; + + $("#embedMediaModal").slideUp("fast"); ++ $("#embedMediaModal").removeClass("popup-show"); + + return padeditor.ace.callWithAce(function (ace) { +- rep = ace.ace_getRep(); ++ var rep = ace.ace_getRep(); + ace.ace_replaceRange(rep.selStart, rep.selEnd, "E"); + ace.ace_performSelectionChange([rep.selStart[0],rep.selStart[1]-1], rep.selStart, false); +- ace.ace_performDocumentApplyAttributesToRange(rep.selStart, rep.selEnd, [["embedMedia", escape($("#embedMediaSrc")[0].value)]]); ++ ace.ace_performDocumentApplyAttributesToRange(rep.selStart, rep.selEnd, [["embedMedia", escape($("#embedMediaSrc")[0].value)]]); + }, "embedMedia"); + }); + + $("#cancelEmbedMedia").click(function () { + $("#embedMediaModal").slideUp("fast"); ++ $("#embedMediaModal").removeClass("popup-show"); + }); + }); +diff --git a/templates/modals.ejs b/templates/modals.ejs +index 9340698..8915a3b 100644 +--- a/templates/modals.ejs ++++ b/templates/modals.ejs +@@ -1,4 +1,4 @@ +- +diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html +index 5ef0bc211..e0e8280ad 100644 +--- a/skins/larry/templates/mail.html ++++ b/skins/larry/templates/mail.html +@@ -56,6 +56,7 @@ + +
  • +
  • ++
  • +
  • + +
    diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix new file mode 100644 index 0000000..bdddf2f --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix @@ -0,0 +1,85 @@ +{ varDir ? "/var/lib/roundcubemail" +, roundcube_config ? "/etc/roundcube/config.php" +, stdenv, fetchurl, jre, unzip, lib, callPackage }: +let + defaultInstall = '' + mkdir -p $out + cp -R . $out/ + cd $out + if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then + ln -s larry skins/elastic + fi + ''; + buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: + stdenv.mkDerivation rec { + name = "roundcube-${appName}-${version}"; + inherit version; + phases = "unpackPhase installPhase"; + inherit installPhase; + src = fetchurl { inherit url sha256; }; + passthru.pluginName = appName; + }; + skinNames = []; + allSkins = lib.attrsets.genAttrs skinNames + (name: callPackage (./skins + "/${name}") {}); + pluginNames = [ + "automatic_addressbook" "carddav" "contextmenu" + "contextmenu_folder" "html5_notifier" "ident_switch" + "message_highlight" "thunderbird_labels" + ]; + allPlugins = lib.attrsets.genAttrs pluginNames + (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; }); + toPassthru = pkg: plugins: skins: { + inherit plugins skins allSkins allPlugins; + withSkins = withSkins pkg; + withPlugins = withPlugins pkg; + }; + withPlugins = pkg: toPlugins: + let + plugins = toPlugins allPlugins; + toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}"; + newRoundcube = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); + passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins; + }); + in newRoundcube; + withSkins = pkg: toSkins: + let + skins = toSkins allSkins; + toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}"; + newRoundcube = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins); + passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins); + }); + in newRoundcube; + shrinker = fetchurl { + url = "https://dl.google.com/closure-compiler/compiler-20200719.zip"; + sha256 = "0j46y9ack2yq67naca6nfysbmyilwjlkl29dbswidf1lq09yhhj3"; + }; + package = stdenv.mkDerivation rec { + version = "1.4.4"; + name = "roundcubemail-${version}"; + src= fetchurl { + url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; + sha256 = "1my726p0wmsn21nbdsjx02h6hnbh8nidzipzdy0gk0qgda1j729b"; + }; + patches = [ ./add_all.patch ]; # This patch includes js modification which requires to re-run the jsshrink below + buildInputs = [ unzip jre ]; + buildPhase = '' + mkdir -p /tmp + unzip -p "${shrinker}" "*.jar" > "/tmp/compiler.jar" + ./bin/jsshrink.sh + sed -i \ + -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ + config/defaults.inc.php + sed -i \ + -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ + config/defaults.inc.php + ''; + installPhase = '' + cp -a . $out + ln -s ${roundcube_config} $out/config/config.inc.php + ''; + passthru = toPassthru package [] []; + }; +in package diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix new file mode 100644 index 0000000..cd9efee --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "automatic_addressbook"; + version = "0.4.3"; + url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz"; + sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix new file mode 100644 index 0000000..ad6856b --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "carddav"; + version = "3.0.3"; + url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2"; + sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix new file mode 100644 index 0000000..34a43a7 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "contextmenu"; + version = "3.2"; + url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz"; + sha256 = "1j7qns42bvgwav8d5n8g16iajyrhydd76hgil8625f3xyjbv4mx0"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix new file mode 100644 index 0000000..e5cb46d --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "contextmenu_folder"; + version = "1.3.3"; + url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz"; + sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix new file mode 100644 index 0000000..a5788b3 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "html5_notifier"; + version = "v0.6.4"; + url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz"; + sha256 = "1w6xkffgxwbahi7acixdh5sgjvsjlfwdq942gkvc64byk8r3bhsj"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix new file mode 100644 index 0000000..3e10fee --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "ident_switch"; + version = "4.2"; + url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz"; + sha256 = "0rf2krjsnly4i0mzgsbx09xckr3p9a9dzxf8qq4lkyng1a7dvjkq"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix new file mode 100644 index 0000000..dc7138a --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "message_highlight"; + version = "4.4"; + url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz"; + sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j"; +} diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix new file mode 100644 index 0000000..b67f16a --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "thunderbird_labels"; + version = "v1.4.2"; + url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz"; + sha256 = "00dqqlq6m8a6dwynp6gwfimc10anbs8kh0qdy8xvq2l06hk6jxyc"; +} diff --git a/flakes/mypackages/pkgs/webapps/spip/default.nix b/flakes/mypackages/pkgs/webapps/spip/default.nix new file mode 100644 index 0000000..20d5c8c --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/spip/default.nix @@ -0,0 +1,32 @@ +{ siteName ? "spip" +, siteDir ? runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out" +, environment ? "prod" +, ldap ? false +, varDir ? "/var/lib/${siteName}_${environment}" +, lib, fetchzip, runCommand, stdenv }: +let + app = stdenv.mkDerivation rec { + name = "${siteName}-${environment}-spip-${version}"; + version = "3.2.7"; + src = fetchzip { + url = "https://files.spip.net/spip/archives/SPIP-v${version}.zip"; + sha256 = "0n4kc95nhn524zbb11bpfjs965pm4v026s3m3q44pl8nyms91r33"; + }; + paches = lib.optionals ldap [ ./spip_ldap_patch.patch ]; + buildPhase = '' + rm -rf IMG local tmp config/remove.txt + ln -sf ${./spip_mes_options.php} config/mes_options.php + echo "Require all denied" > "config/.htaccess" + ln -sf ${varDir}/{IMG,local} . + ''; + installPhase = '' + cp -a . $out + cp -a ${siteDir}/* $out + ''; + passthru = { + inherit siteName siteDir environment varDir; + webRoot = app; + spipConfig = ./spip_mes_options.php; + }; + }; +in app diff --git a/flakes/mypackages/pkgs/webapps/spip/spip_ldap_patch.patch b/flakes/mypackages/pkgs/webapps/spip/spip_ldap_patch.patch new file mode 100644 index 0000000..653c909 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/spip/spip_ldap_patch.patch @@ -0,0 +1,60 @@ +--- old/ecrire/auth/ldap.php 2017-06-08 21:58:17.000000000 +0200 ++++ new/ecrire/auth/ldap.php 2017-06-10 02:54:02.687954143 +0200 +@@ -171,24 +171,41 @@ + $desc = isset($ldap['attributes']) && $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ; + + $logins = is_array($desc['login']) ? $desc['login'] : array($desc['login']); ++ if (isset($GLOBALS['ldap_search'])) { ++ $search_query = str_replace("%user%", $login_search, $GLOBALS['ldap_search']); ++ $result = @ldap_search($ldap_link, $ldap_base, $search_query, array("dn")); ++ $info = @ldap_get_entries($ldap_link, $result); ++ // Ne pas accepter les resultats si plus d'une entree ++ // (on veut un attribut unique) + +- // Tenter une recherche pour essayer de retrouver le DN +- foreach ($logins as $att) { +- $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn")); +- $info = @ldap_get_entries($ldap_link, $result); +- // Ne pas accepter les resultats si plus d'une entree +- // (on veut un attribut unique) ++ if (is_array($info) and $info['count'] == 1) { ++ $dn = $info[0]['dn']; ++ if (!$checkpass) { ++ return $dn; ++ } ++ if (@ldap_bind($ldap_link, $dn, $pass)) { ++ return $dn; ++ } ++ } ++ } else { ++ // Tenter une recherche pour essayer de retrouver le DN ++ foreach ($logins as $att) { ++ $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn")); ++ $info = @ldap_get_entries($ldap_link, $result); ++ // Ne pas accepter les resultats si plus d'une entree ++ // (on veut un attribut unique) + +- if (is_array($info) and $info['count'] == 1) { +- $dn = $info[0]['dn']; +- if (!$checkpass) { +- return $dn; +- } +- if (@ldap_bind($ldap_link, $dn, $pass)) { +- return $dn; +- } +- } +- } ++ if (is_array($info) and $info['count'] == 1) { ++ $dn = $info[0]['dn']; ++ if (!$checkpass) { ++ return $dn; ++ } ++ if (@ldap_bind($ldap_link, $dn, $pass)) { ++ return $dn; ++ } ++ } ++ } ++ } + + if ($checkpass and !isset($dn)) { + // Si echec, essayer de deviner le DN diff --git a/flakes/mypackages/pkgs/webapps/spip/spip_mes_options.php b/flakes/mypackages/pkgs/webapps/spip/spip_mes_options.php new file mode 100644 index 0000000..8db8389 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/spip/spip_mes_options.php @@ -0,0 +1,18 @@ + diff --git a/flakes/mypackages/pkgs/webapps/ttrss/default.nix b/flakes/mypackages/pkgs/webapps/ttrss/default.nix new file mode 100644 index 0000000..fa2453e --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/default.nix @@ -0,0 +1,37 @@ +{ ttrss_config ? "/etc/ttrss/config.php" +, varDir ? "/var/lib/ttrss" +, stdenv, lib, callPackage, sources }: +let + pluginNames = [ "auth_ldap" "af_feedmod" "feediron" "ff_instagram" "tumblr_gdpr_ua" ]; + allPlugins = lib.attrsets.genAttrs pluginNames + (name: callPackage (./plugins + "/${name}") {}); + toPassthru = pkg: plugins: { + inherit plugins allPlugins; + withPlugins = withPlugins pkg; + }; + withPlugins = pkg: toPlugins: + let + plugins = toPlugins allPlugins; + toInstallPlugin = n: + "ln -sf ${n} $out/plugins/${n.pluginName}"; + newTtrss = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); + passthru = toPassthru newTtrss (pkg.plugins ++ plugins); + }); + in newTtrss; + package = stdenv.mkDerivation rec { + pname = "tt-rss"; + version = "${sources.tools.ttrss.shortRev}-master"; + name = "${pname}-${version}"; + src = sources.tools.ttrss; + buildPhase = '' + rm -rf lock feed-icons cache + ln -sf ${varDir}/{lock,feed-icons,cache} . + ''; + installPhase = '' + cp -a . $out + ln -s ${ttrss_config} $out/config.php + ''; + passthru = toPassthru package []; + }; +in package diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix b/flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix new file mode 100644 index 0000000..39f9e0e --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix @@ -0,0 +1,18 @@ +{ patched ? false, stdenv, fetchFromGitHub, lib }: +stdenv.mkDerivation ({ + pname = "ttrss-af_feedmod"; + version = "0ea2092-master"; + src = fetchFromGitHub { + owner = "mbirth"; + repo = "ttrss_plugin-af_feedmod"; + rev = "0ea2092dd34067ecd898802cfca3570023d1ecfe"; + sha256 = "02ibf47zcrsc2rr45wsix8gxyyf371davj8n8i0gj1zdq95klvnv"; + fetchSubmodules = true; + }; + patches = lib.optionals patched [ ./type_replace.patch ]; + installPhase = '' + mkdir $out + cp init.php $out + ''; + passthru.pluginName = "af_feedmod"; +}) diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch b/flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch new file mode 100644 index 0000000..d622577 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch @@ -0,0 +1,12 @@ +--- a/init.php 2014-06-16 14:21:06.995480038 +0200 ++++ b/init.php 2014-06-16 14:22:00.151027654 +0200 +@@ -147,6 +147,9 @@ + } + } + break; ++ case 'replace': ++ $article['content'] = preg_replace("/".$config['pattern']."/",$config['replacement'],$article['content']); ++ break; + + default: + // unknown type or invalid config diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix b/flakes/mypackages/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix new file mode 100644 index 0000000..d283160 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix @@ -0,0 +1,17 @@ +{ stdenv, fetchFromGitHub }: +stdenv.mkDerivation ({ + pname = "ttrss-auth-ldap"; + version = "4d751b0-master"; + src = fetchFromGitHub { + owner = "hydrian"; + repo = "TTRSS-Auth-LDAP"; + rev = "4d751b095c29a8dbe2dc7bb07777742956136e94"; + sha256 = "0b9fl86acrzpcv41r7pj3bl8b3n72hpkdywzx9zjyfqv5pskxyim"; + fetchSubmodules = true; + }; + installPhase = '' + mkdir $out + cp plugins/auth_ldap/init.php $out + ''; + passthru.pluginName = "auth_ldap"; +}) diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/default.nix b/flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/default.nix new file mode 100644 index 0000000..2f86416 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/default.nix @@ -0,0 +1,18 @@ +{ patched ? false, stdenv, fetchFromGitHub, lib }: +stdenv.mkDerivation ({ + pname = "ttrss-feediron"; + version = "407168c-master"; + src = fetchFromGitHub { + owner = "m42e"; + repo = "ttrss_plugin-feediron"; + rev = "407168c628880b5ced572cc549db6d50e866d3c8"; + sha256 = "17b95ifpcph6m03hjd1mhi8gi1hw9yd3fnffmw66fqr5c9l3zd9r"; + fetchSubmodules = true; + }; + patches = lib.optionals patched [ ./json_reformat.patch ]; + installPhase = '' + mkdir $out + cp -a . $out + ''; + passthru.pluginName = "feediron"; +}) diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch b/flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch new file mode 100644 index 0000000..e1c44d9 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch @@ -0,0 +1,18 @@ +diff --git a/init.php b/init.php +index 3c0f2f9..1aad146 100644 +--- a/init.php ++++ b/init.php +@@ -600,10 +600,11 @@ class Feediron extends Plugin implements IHandler + return false; + } + +- $this->host->set($this, 'json_conf', Feediron_Json::format($json_conf)); ++ $new_conf = json_encode(json_decode($json_conf), JSON_PRETTY_PRINT); ++ $this->host->set($this, 'json_conf', $new_conf); + $json_reply['success'] = true; + $json_reply['message'] = __('Configuration saved.'); +- $json_reply['json_conf'] = Feediron_Json::format($json_conf); ++ $json_reply['json_conf'] = $new_conf; + echo json_encode($json_reply); + } + diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix b/flakes/mypackages/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix new file mode 100644 index 0000000..f0df588 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix @@ -0,0 +1,17 @@ +{ stdenv, fetchFromGitHub }: +stdenv.mkDerivation ({ + pname = "ttrss-ff_instagram"; + version = "0366ffb-master"; + src = fetchFromGitHub { + owner = "wltb"; + repo = "ff_instagram"; + rev = "0366ffb18c4d490c8fbfba2f5f3367a5af23cfe8"; + sha256 = "0vvzl6wi6jmrqknsfddvckjgsgfizz1d923d1nyrpzjfn6bda1vk"; + fetchSubmodules = true; + }; + installPhase = '' + mkdir $out + cp -a . $out + ''; + passthru.pluginName = "ff_instagram"; +}) diff --git a/flakes/mypackages/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix b/flakes/mypackages/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix new file mode 100644 index 0000000..072b6c3 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix @@ -0,0 +1,17 @@ +{ stdenv, fetchFromGitHub }: +stdenv.mkDerivation ({ + pname = "ttrss-tumblr_gdpr_ua"; + version = "287c584-master"; + src = fetchFromGitHub { + owner = "hkockerbeck"; + repo = "ttrss-tumblr-gdpr-ua"; + rev = "287c584e68845d524f920156bff0b2eaa6f65117"; + sha256 = "1fviawgcclqky4k4xv1sqzvpb8i74w9f0pclm09m78s8l85wh9py"; + fetchSubmodules = true; + }; + installPhase = '' + mkdir $out + cp -a . $out + ''; + passthru.pluginName = "tumblr_gdpr_ua"; +}) diff --git a/flakes/mypackages/pkgs/webapps/wallabag/default.nix b/flakes/mypackages/pkgs/webapps/wallabag/default.nix new file mode 100644 index 0000000..bd420d4 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/wallabag/default.nix @@ -0,0 +1,54 @@ +{ varDir ? "/var/lib/wallabag" +, wallabag_config ? "/etc/wallabag/parameters.yml" +, ldap ? false +, composerEnv, fetchurl, lib }: +composerEnv.buildPackage rec { + packages = { + "fr3d/ldap-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "fr3d-ldap-bundle-5a8927c11af45fa06331b97221c6da1a4a237475"; + src = fetchurl { + url = https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475; + sha256 = "168zkd82j200wd6h0a3lq81g5s2pifg889rv27q2g429nppsbfxc"; + }; + }; + }; + "zendframework/zend-ldap" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-ldap-b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49; + sha256 = "0mn4yqnb5prqhrbbybmw1i2rx7xf4s4wagbdq9qi55fa0vk3jgw9"; + }; + }; + }; + }; + noDev = true; + doRemoveVendor = false; + # Beware when upgrading, I probably messed up with the migrations table + # (due to a psql bug in wallabag) + version = "2.3.8"; + name = "wallabag-${version}"; + src = fetchurl { + url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz"; + sha256 = "1sr62hfk2f2rl5by48dg8yd1gchngjnc850as17wr3w287p1kwsq"; + }; + unpackPhase = '' + unpackFile "$src" + sourceRoot=${version} + src=$PWD/${version} + ''; + patches = lib.optionals ldap [ ./ldap.patch ]; + preInstall = '' + export SYMFONY_ENV="prod" + ''; + postInstall = '' + rm -rf web/assets var/{cache,logs,sessions} app/config/parameters.yml data + ln -sf ${wallabag_config} app/config/parameters.yml + ln -sf ${varDir}/var/{cache,logs,sessions} var + ln -sf ${varDir}/data data + ln -sf ${varDir}/assets web/assets + ''; +} diff --git a/flakes/mypackages/pkgs/webapps/wallabag/ldap.patch b/flakes/mypackages/pkgs/webapps/wallabag/ldap.patch new file mode 100644 index 0000000..e04dae1 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/wallabag/ldap.patch @@ -0,0 +1,664 @@ +diff --git a/.travis.yml b/.travis.yml +index 04cea258..56b1f576 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -58,6 +58,7 @@ install: + + before_script: + - PHP=$TRAVIS_PHP_VERSION ++ - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini + - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; + # xdebug isn't enable for PHP 7.1 + - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi +diff --git a/app/AppKernel.php b/app/AppKernel.php +index 40726f05..c4f465dc 100644 +--- a/app/AppKernel.php ++++ b/app/AppKernel.php +@@ -42,6 +42,10 @@ class AppKernel extends Kernel + new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(), + ]; + ++ if (class_exists('FR3D\\LdapBundle\\FR3DLdapBundle')) { ++ $bundles[] = new FR3D\LdapBundle\FR3DLdapBundle(); ++ } ++ + if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { + $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); + $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); +diff --git a/app/DoctrineMigrations/Version20170710113900.php b/app/DoctrineMigrations/Version20170710113900.php +new file mode 100644 +index 00000000..7be83110 +--- /dev/null ++++ b/app/DoctrineMigrations/Version20170710113900.php +@@ -0,0 +1,54 @@ ++container = $container; ++ } ++ ++ private function getTable($tableName) ++ { ++ return $this->container->getParameter('database_table_prefix').$tableName; ++ } ++ ++ /** ++ * @param Schema $schema ++ */ ++ public function up(Schema $schema) ++ { ++ $usersTable = $schema->getTable($this->getTable('user')); ++ ++ $this->skipIf($usersTable->hasColumn('dn'), 'It seems that you already played this migration.'); ++ ++ $usersTable->addColumn('dn', 'text', [ ++ 'default' => null, ++ 'notnull' => false, ++ ]); ++ } ++ ++ /** ++ * @param Schema $schema ++ */ ++ public function down(Schema $schema) ++ { ++ $usersTable = $schema->getTable($this->getTable('user')); ++ $usersTable->dropColumn('dn'); ++ } ++} ++ +diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist +index 6b0cb8e8..cfd41b69 100644 +--- a/app/config/parameters.yml.dist ++++ b/app/config/parameters.yml.dist +@@ -62,3 +62,23 @@ parameters: + redis_port: 6379 + redis_path: null + redis_password: null ++ ++ # ldap configuration ++ # To enable, you need to require fr3d/ldap-bundle ++ ldap_enabled: false ++ ldap_host: localhost ++ ldap_port: 389 ++ ldap_tls: false ++ ldap_ssl: false ++ ldap_bind_requires_dn: true ++ ldap_base: dc=example,dc=com ++ ldap_manager_dn: ou=Manager,dc=example,dc=com ++ ldap_manager_pw: password ++ ldap_filter: (&(ObjectClass=Person)) ++ # optional (if null: no ldap user is admin) ++ ldap_admin_filter: (&(memberOf=ou=admins,dc=example,dc=com)(uid=%s)) ++ ldap_username_attribute: uid ++ ldap_email_attribute: mail ++ ldap_name_attribute: cn ++ # optional (default sets user as enabled unconditionally) ++ ldap_enabled_attribute: ~ +diff --git a/app/config/security.yml b/app/config/security.yml +index 02afc9ea..48fbb553 100644 +--- a/app/config/security.yml ++++ b/app/config/security.yml +@@ -6,6 +6,7 @@ security: + ROLE_ADMIN: ROLE_USER + ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] + ++ # /!\ This list is modified in WallabagUserBundle when LDAP is enabled + providers: + administrators: + entity: +@@ -36,6 +37,7 @@ security: + pattern: ^/login$ + anonymous: ~ + ++ # /!\ This section is modified in WallabagUserBundle when LDAP is enabled + secured_area: + pattern: ^/ + form_login: +diff --git a/composer.json b/composer.json +index 0483da1d..e3e47bdc 100644 +--- a/composer.json ++++ b/composer.json +@@ -87,7 +87,11 @@ + "bdunogier/guzzle-site-authenticator": "^1.0.0", + "defuse/php-encryption": "^2.1", + "html2text/html2text": "^4.1", +- "sulu/symfony-intl-fix": "^1.0" ++ "sulu/symfony-intl-fix": "^1.0", ++ "fr3d/ldap-bundle": "^3.0" ++ }, ++ "suggest": { ++ "fr3d/ldap-bundle": "If you want to authenticate via LDAP" + }, + "require-dev": { + "doctrine/doctrine-fixtures-bundle": "~2.2", +diff --git a/composer.lock b/composer.lock +index b3b0a4c6..8c8a87ee 100644 +--- a/composer.lock ++++ b/composer.lock +@@ -1346,6 +1346,65 @@ + ], + "time": "2019-05-09T11:53:40+00:00" + }, ++ { ++ "name": "fr3d/ldap-bundle", ++ "version": "v3.0.0", ++ "source": { ++ "type": "git", ++ "url": "https://github.com/Maks3w/FR3DLdapBundle.git", ++ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475" ++ }, ++ "dist": { ++ "type": "zip", ++ "url": "https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475", ++ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475", ++ "shasum": "" ++ }, ++ "require": { ++ "php": ">=5.5", ++ "psr/log": "~1.0", ++ "symfony/config": "2.3 - 3", ++ "symfony/dependency-injection": "2.3 - 3", ++ "symfony/polyfill-php56": "^1.1", ++ "symfony/security": "2.3 - 3", ++ "symfony/security-bundle": "2.3 - 3", ++ "zendframework/zend-ldap": "2.5 - 3" ++ }, ++ "require-dev": { ++ "fabpot/php-cs-fixer": "1.11.*", ++ "fr3d/psr3-message-assertions": "0.1.*", ++ "friendsofsymfony/user-bundle": "~1.3", ++ "maks3w/phpunit-methods-trait": "^4.6", ++ "phpunit/phpunit": "^4.6", ++ "symfony/validator": "2.3 - 3" ++ }, ++ "suggest": { ++ "friendsofsymfony/user-bundle": "Integrate authentication and management for DB users, useful for unmanned LDAP servers", ++ "symfony/validator": "Allow pre-validate for existing users before register new ones" ++ }, ++ "type": "symfony-bundle", ++ "autoload": { ++ "psr-4": { ++ "FR3D\\LdapBundle\\": "" ++ } ++ }, ++ "notification-url": "https://packagist.org/downloads/", ++ "license": [ ++ "MIT" ++ ], ++ "authors": [ ++ { ++ "name": "Maks3w" ++ } ++ ], ++ "description": "This package provide users and authentication services based on LDAP directories for Symfony2 framework", ++ "homepage": "https://github.com/Maks3w/FR3DLdapBundle", ++ "keywords": [ ++ "Authentication", ++ "ldap" ++ ], ++ "time": "2016-02-12T17:45:14+00:00" ++ }, + { + "name": "friendsofsymfony/jsrouting-bundle", + "version": "1.6.3", +@@ -7069,6 +7128,59 @@ + "zf2" + ], + "time": "2018-04-25T15:33:34+00:00" ++ }, ++ { ++ "name": "zendframework/zend-ldap", ++ "version": "2.10.0", ++ "source": { ++ "type": "git", ++ "url": "https://github.com/zendframework/zend-ldap.git", ++ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49" ++ }, ++ "dist": { ++ "type": "zip", ++ "url": "https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49", ++ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49", ++ "shasum": "" ++ }, ++ "require": { ++ "ext-ldap": "*", ++ "php": "^5.6 || ^7.0" ++ }, ++ "require-dev": { ++ "php-mock/php-mock-phpunit": "^1.1.2 || ^2.1.1", ++ "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", ++ "zendframework/zend-coding-standard": "~1.0.0", ++ "zendframework/zend-config": "^2.5", ++ "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", ++ "zendframework/zend-stdlib": "^2.7 || ^3.0" ++ }, ++ "suggest": { ++ "zendframework/zend-eventmanager": "Zend\\EventManager component" ++ }, ++ "type": "library", ++ "extra": { ++ "branch-alias": { ++ "dev-master": "2.10.x-dev", ++ "dev-develop": "2.11.x-dev" ++ } ++ }, ++ "autoload": { ++ "psr-4": { ++ "Zend\\Ldap\\": "src/" ++ } ++ }, ++ "notification-url": "https://packagist.org/downloads/", ++ "license": [ ++ "BSD-3-Clause" ++ ], ++ "description": "Provides support for LDAP operations including but not limited to binding, searching and modifying entries in an LDAP directory", ++ "keywords": [ ++ "ZendFramework", ++ "ldap", ++ "zf" ++ ], ++ "time": "2018-07-05T05:05:12+00:00" + } + ], + "packages-dev": [ +diff --git a/scripts/install.sh b/scripts/install.sh +index affa715f..45254212 100755 +--- a/scripts/install.sh ++++ b/scripts/install.sh +@@ -37,5 +37,8 @@ fi + TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) + + git checkout $TAG ++if [ -n "$LDAP_ENABLED" ]; then ++ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle ++fi + SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist + php bin/console wallabag:install --env=$ENV +diff --git a/scripts/update.sh b/scripts/update.sh +index 3ef10439..eeee28d6 100755 +--- a/scripts/update.sh ++++ b/scripts/update.sh +@@ -42,6 +42,9 @@ git fetch origin + git fetch --tags + TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) + git checkout $TAG --force ++if [ -n "$LDAP_ENABLED" ]; then ++ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle ++fi + SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist + php bin/console doctrine:migrations:migrate --no-interaction --env=$ENV + php bin/console cache:clear --env=$ENV +diff --git a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php +index 5ca3482e..904a6af1 100644 +--- a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php ++++ b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php +@@ -6,9 +6,34 @@ use Symfony\Component\Config\FileLocator; + use Symfony\Component\DependencyInjection\ContainerBuilder; + use Symfony\Component\DependencyInjection\Loader; + use Symfony\Component\HttpKernel\DependencyInjection\Extension; ++use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; + +-class WallabagUserExtension extends Extension ++class WallabagUserExtension extends Extension implements PrependExtensionInterface + { ++ public function prepend(ContainerBuilder $container) ++ { ++ $ldap = $container->getParameter('ldap_enabled'); ++ ++ if ($ldap) { ++ $container->prependExtensionConfig('security', array( ++ 'providers' => array( ++ 'chain_provider' => array(), ++ ), ++ )); ++ $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); ++ $loader->load('ldap.yml'); ++ } elseif ($container->hasExtension('fr3d_ldap')) { ++ $container->prependExtensionConfig('fr3_d_ldap', array( ++ 'driver' => array( ++ 'host' => 'localhost', ++ ), ++ 'user' => array( ++ 'baseDn' => 'dc=example,dc=com', ++ ), ++ )); ++ } ++ } ++ + public function load(array $configs, ContainerBuilder $container) + { + $configuration = new Configuration(); +@@ -16,6 +41,9 @@ class WallabagUserExtension extends Extension + + $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); + $loader->load('services.yml'); ++ if ($container->getParameter('ldap_enabled')) { ++ $loader->load('ldap_services.yml'); ++ } + $container->setParameter('wallabag_user.registration_enabled', $config['registration_enabled']); + } + +diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php +index 48446e3c..f93c59c7 100644 +--- a/src/Wallabag/UserBundle/Entity/User.php ++++ b/src/Wallabag/UserBundle/Entity/User.php +@@ -1,5 +1,15 @@ + clients->first(); + } + } ++ ++ /** ++ * Set dn. ++ * ++ * @param string $dn ++ * ++ * @return User ++ */ ++ public function setDn($dn) ++ { ++ $this->dn = $dn; ++ ++ return $this; ++ } ++ ++ /** ++ * Get dn. ++ * ++ * @return string ++ */ ++ public function getDn() ++ { ++ return $this->dn; ++ } ++ ++ public function isLdapUser() ++ { ++ return $this->dn !== null; ++ } + } +diff --git a/src/Wallabag/UserBundle/LdapHydrator.php b/src/Wallabag/UserBundle/LdapHydrator.php +new file mode 100644 +index 00000000..cea2450f +--- /dev/null ++++ b/src/Wallabag/UserBundle/LdapHydrator.php +@@ -0,0 +1,103 @@ ++userManager = $user_manager; ++ $this->eventDispatcher = $event_dispatcher; ++ ++ $this->attributesMap = array( ++ 'setUsername' => $attributes_map[0], ++ 'setEmail' => $attributes_map[1], ++ 'setName' => $attributes_map[2], ++ ); ++ $this->enabledAttribute = $attributes_map[3]; ++ ++ $this->ldapBaseDn = $ldap_base_dn; ++ $this->ldapAdminFilter = $ldap_admin_filter; ++ $this->ldapDriver = $ldap_driver; ++ } ++ ++ public function hydrate(array $ldapEntry) ++ { ++ $user = $this->userManager->findUserBy(array('dn' => $ldapEntry['dn'])); ++ ++ if (!$user) { ++ $user = $this->userManager->createUser(); ++ $user->setDn($ldapEntry['dn']); ++ $user->setPassword(''); ++ $user->setSalt(''); ++ $this->updateUserFields($user, $ldapEntry); ++ ++ $event = new UserEvent($user); ++ $this->eventDispatcher->dispatch(FOSUserEvents::USER_CREATED, $event); ++ ++ $this->userManager->reloadUser($user); ++ } else { ++ $this->updateUserFields($user, $ldapEntry); ++ } ++ ++ return $user; ++ } ++ ++ private function updateUserFields($user, $ldapEntry) ++ { ++ foreach ($this->attributesMap as $key => $value) { ++ if (is_array($ldapEntry[$value])) { ++ $ldap_value = $ldapEntry[$value][0]; ++ } else { ++ $ldap_value = $ldapEntry[$value]; ++ } ++ ++ call_user_func([$user, $key], $ldap_value); ++ } ++ ++ if ($this->enabledAttribute !== null) { ++ $user->setEnabled($ldapEntry[$this->enabledAttribute]); ++ } else { ++ $user->setEnabled(true); ++ } ++ ++ if ($this->isAdmin($user)) { ++ $user->addRole('ROLE_SUPER_ADMIN'); ++ } else { ++ $user->removeRole('ROLE_SUPER_ADMIN'); ++ } ++ ++ $this->userManager->updateUser($user, true); ++ } ++ ++ private function isAdmin($user) ++ { ++ if ($this->ldapAdminFilter === null) { ++ return false; ++ } ++ ++ $escaped_username = ldap_escape($user->getUsername(), '', LDAP_ESCAPE_FILTER); ++ $filter = sprintf($this->ldapAdminFilter, $escaped_username); ++ $entries = $this->ldapDriver->search($this->ldapBaseDn, $filter); ++ ++ return $entries['count'] == 1; ++ } ++} +diff --git a/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php +new file mode 100644 +index 00000000..8a851f12 +--- /dev/null ++++ b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php +@@ -0,0 +1,43 @@ ++ldapManager = $ldap_manager; ++ } ++ ++ public function checkUserCredentials(IOAuth2Client $client, $username, $password) ++ { ++ try { ++ $user = $this->userProvider->loadUserByUsername($username); ++ } catch (AuthenticationException $e) { ++ return false; ++ } ++ ++ if ($user->isLdapUser()) { ++ return $this->checkLdapUserCredentials($user, $password); ++ } else { ++ return parent::checkUserCredentials($client, $username, $password); ++ } ++ } ++ ++ private function checkLdapUserCredentials($user, $password) ++ { ++ if ($this->ldapManager->bind($user, $password)) { ++ return array( ++ 'data' => $user, ++ ); ++ } else { ++ return false; ++ } ++ } ++} +diff --git a/src/Wallabag/UserBundle/Resources/config/ldap.yml b/src/Wallabag/UserBundle/Resources/config/ldap.yml +new file mode 100644 +index 00000000..5ec16088 +--- /dev/null ++++ b/src/Wallabag/UserBundle/Resources/config/ldap.yml +@@ -0,0 +1,28 @@ ++fr3d_ldap: ++ service: ++ user_hydrator: ldap_user_hydrator ++ driver: ++ host: "%ldap_host%" ++ port: "%ldap_port%" ++ useSsl: "%ldap_ssl%" ++ useStartTls: "%ldap_tls%" ++ bindRequiresDn: "%ldap_bind_requires_dn%" ++ username: "%ldap_manager_dn%" ++ password: "%ldap_manager_pw%" ++ user: ++ baseDn: "%ldap_base%" ++ filter: "%ldap_filter%" ++ usernameAttribute: "%ldap_username_attribute%" ++security: ++ providers: ++ chain_provider: ++ chain: ++ providers: [ fr3d_ldapbundle, fos_userbundle ] ++ fr3d_ldapbundle: ++ id: fr3d_ldap.security.user.provider ++ firewalls: ++ secured_area: ++ fr3d_ldap: ~ ++ form_login: ++ provider: chain_provider ++ +diff --git a/src/Wallabag/UserBundle/Resources/config/ldap_services.yml b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml +new file mode 100644 +index 00000000..b3e3fd8a +--- /dev/null ++++ b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml +@@ -0,0 +1,22 @@ ++services: ++ fos_oauth_server.server: ++ class: OAuth2\OAuth2 ++ arguments: ++ - "@oauth_storage_ldap_wrapper" ++ - "%fos_oauth_server.server.options%" ++ oauth_storage_ldap_wrapper: ++ class: Wallabag\UserBundle\OAuthStorageLdapWrapper ++ parent: fos_oauth_server.storage ++ calls: ++ - [setLdapManager, ["@fr3d_ldap.ldap_manager"]] ++ ++ ldap_user_hydrator: ++ class: Wallabag\UserBundle\LdapHydrator ++ arguments: ++ - "@fos_user.user_manager" ++ - "@event_dispatcher" ++ - [ "%ldap_username_attribute%", "%ldap_email_attribute%", "%ldap_name_attribute%", "%ldap_enabled_attribute%" ] ++ - "%ldap_base%" ++ - "%ldap_admin_filter%" ++ - "@fr3d_ldap.ldap_driver" ++ diff --git a/flakes/mypackages/pkgs/webapps/yourls/default.nix b/flakes/mypackages/pkgs/webapps/yourls/default.nix new file mode 100644 index 0000000..8001a60 --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/yourls/default.nix @@ -0,0 +1,37 @@ +{ yourls_config ? "/etc/yourls/config.php", fetchFromGitHub, callPackage, lib, stdenv }: +let + pluginNames = [ "ldap" ]; + allPlugins = lib.attrsets.genAttrs pluginNames + (name: callPackage (./plugins + "/${name}") {}); + toPassthru = pkg: plugins: { + inherit plugins allPlugins; + withPlugins = withPlugins pkg; + }; + withPlugins = pkg: toPlugins: + let + plugins = toPlugins allPlugins; + toInstallPlugin = n: "ln -s ${n} $out/user/plugins/${n.pluginName}"; + newYourls = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); + passthru = toPassthru newYourls (pkg.plugins ++ plugins); + }); + in newYourls; + package = stdenv.mkDerivation (rec { + pname = "yourls"; + version = "1.7.3"; + src = fetchFromGitHub { + owner = "YOURLS"; + repo = "YOURLS"; + rev = "077018822d3594229daa8343310d0b40804b9ddc"; + sha256 = "1av6h619rwqn0yn0kjn2s2h3gmrhmxaaa9hd5ns4ralxgg731imd"; + fetchSubmodules = true; + }; + installPhase = '' + mkdir -p $out + cp -a */ *.php $out/ + cp sample-robots.txt $out/robots.txt + ln -sf ${yourls_config} $out/includes/config.php + ''; + passthru = toPassthru package []; + }); +in package diff --git a/flakes/mypackages/pkgs/webapps/yourls/plugins/ldap/default.nix b/flakes/mypackages/pkgs/webapps/yourls/plugins/ldap/default.nix new file mode 100644 index 0000000..5870faa --- /dev/null +++ b/flakes/mypackages/pkgs/webapps/yourls/plugins/ldap/default.nix @@ -0,0 +1,17 @@ +{ stdenv, fetchFromGitHub }: +stdenv.mkDerivation (rec { + pname = "yourls-ldap-plugin"; + version = "2a3cb03-master"; + src = fetchFromGitHub { + owner = "k3a"; + repo = "yourls-ldap-plugin"; + rev = "2a3cb0334b8a6b81b284a7196e614bbd2b2b1615"; + sha256 = "0cchbnli77d295lzf7kjmn4dcxj2bmdqa9qc3f8l8qgmp4n5n0gh"; + fetchSubmodules = true; + }; + installPhase = '' + mkdir -p $out + cp plugin.php $out + ''; + passthru.pluginName = "ldap"; +}) diff --git a/flakes/myuids/flake.nix b/flakes/myuids/flake.nix index cc6dc66..ff33651 100644 --- a/flakes/myuids/flake.nix +++ b/flakes/myuids/flake.nix @@ -6,6 +6,7 @@ # Check that there is no clash with nixos/modules/misc/ids.nix uids = { cryptpad = 386; + openldap = 99; # commented in the ids file postfixscripts = 387; acme = 388; backup = 389; @@ -21,6 +22,7 @@ }; gids = { nagios = 11; # commented in the ids file + openldap = 99; # commented in the ids file cryptpad = 386; acme = 388; backup = 389; @@ -35,10 +37,20 @@ mastodon = 399; }; }; - nixosModule = { ... }: { + nixosModule = { config, lib, ... }: { config = { ids.uids = self.lib.uids; ids.gids = self.lib.gids; + assertions = [ + { + assertion = builtins.length (builtins.attrValues config.ids.gids) == builtins.length (lib.unique (builtins.attrValues config.ids.gids)); + message = "Non-unique list of gids"; + } + { + assertion = builtins.length (builtins.attrValues config.ids.uids) == builtins.length (lib.unique (builtins.attrValues config.ids.uids)); + message = "Non-unique list of uids"; + } + ]; }; }; }; diff --git a/flakes/naemon/flake.nix b/flakes/naemon/flake.nix new file mode 100644 index 0000000..9b2ace5 --- /dev/null +++ b/flakes/naemon/flake.nix @@ -0,0 +1,191 @@ +{ + outputs = { self }: { + nixosModule = self.nixosModules.naemon; + nixosModules.naemon = { 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 + { + # Necessary for situations where flake gets included multiple times + key = builtins.hashString "sha256" (builtins.path { path = self.sourceInfo.outPath; name = "source"; }); + + 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} + ''; + keyDependencies = [ pkgs.monitoring-plugins ]; + }; + }; + + 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 ]; + 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/flakes/naemon/naemon.cfg b/flakes/naemon/naemon.cfg new file mode 100644 index 0000000..792e03b --- /dev/null +++ b/flakes/naemon/naemon.cfg @@ -0,0 +1,1059 @@ +############################################################################## +# +# 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/flakes/openarc/flake.lock b/flakes/openarc/flake.lock index e0b78a8..a9e5e81 100644 --- a/flakes/openarc/flake.lock +++ b/flakes/openarc/flake.lock @@ -17,19 +17,14 @@ }, "myuids": { "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" }, "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "path": "../myuids", + "type": "path" } }, "nixpkgs": { diff --git a/flakes/openarc/flake.nix b/flakes/openarc/flake.nix index 6fd45bf..17a3fdd 100644 --- a/flakes/openarc/flake.nix +++ b/flakes/openarc/flake.nix @@ -2,9 +2,7 @@ description = "Open source ARC implementation"; inputs.myuids = { - url = "https://git.immae.eu/perso/Immae/Config/Nix.git"; - type = "git"; - dir = "flakes/myuids"; + url = "path:../myuids"; }; inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.nixpkgs.url = "github:NixOS/nixpkgs"; @@ -66,6 +64,8 @@ defaultSock = "/run/openarc/openarc.sock"; args = [ "-f" "-p" "local:${cfg.socket}" ] ++ lib.optionals (cfg.configFile != null) [ "-c" cfg.configFile ]; in { + # Necessary for situations where flake gets included multiple times + key = builtins.hashString "sha256" (builtins.path { path = self.sourceInfo.outPath; name = "source"; }); options = { services.openarc = { enable = lib.mkOption { diff --git a/flakes/opendmarc/flake.lock b/flakes/opendmarc/flake.lock index 4503c79..e0cbe17 100644 --- a/flakes/opendmarc/flake.lock +++ b/flakes/opendmarc/flake.lock @@ -17,19 +17,14 @@ }, "myuids": { "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" }, "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "path": "../myuids", + "type": "path" } }, "nixpkgs": { diff --git a/flakes/opendmarc/flake.nix b/flakes/opendmarc/flake.nix index 277fd25..70b8cd7 100644 --- a/flakes/opendmarc/flake.nix +++ b/flakes/opendmarc/flake.nix @@ -2,9 +2,7 @@ description = "Open source ARC implementation"; inputs.myuids = { - url = "https://git.immae.eu/perso/Immae/Config/Nix.git"; - type = "git"; - dir = "flakes/myuids"; + url = "path:../myuids"; }; inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.nixpkgs.url = "github:NixOS/nixpkgs"; @@ -51,7 +49,9 @@ defaultSock = "/run/opendmarc/opendmarc.sock"; args = [ "-f" "-l" "-p" "local:${cfg.socket}" ] ++ lib.optionals (cfg.configFile != null) [ "-c" cfg.configFile ]; in { - options = { + # Necessary for situations where flake gets included multiple times + key = builtins.hashString "sha256" (builtins.path { path = self.sourceInfo.outPath; name = "source"; }); + options = { services.opendmarc = { enable = lib.mkOption { type = lib.types.bool; diff --git a/flakes/openfoodnetwork/default.nix b/flakes/openfoodnetwork/default.nix new file mode 100644 index 0000000..dd68177 --- /dev/null +++ b/flakes/openfoodnetwork/default.nix @@ -0,0 +1,39 @@ +{ bundlerEnv, defaultGemConfig, writeShellScript, v8, stdenv }: + +let + gems = bundlerEnv { + name = "openfoodnetwork"; + gemfile = ./Gemfile; + lockfile = ./Gemfile.lock; + gemset = import ./gemset.nix; + gemConfig = defaultGemConfig // { + libv8-node = attrs: { + dontBuild = false; + postPatch = let + noopScript = writeShellScript "noop" "exit 0"; + linkFiles = writeShellScript "link-files" '' + cd ../.. + + mkdir -p vendor/v8/out.gn/libv8/obj/ + ln -s "${v8}/lib/libv8.a" vendor/v8/out.gn/libv8/obj/libv8_monolith.a + + ln -s ${v8}/include vendor/v8/include + + mkdir -p ext/libv8-node + echo '--- !ruby/object:Libv8::Node::Location::Vendor {}' >ext/libv8-node/.location.yml + ''; + in '' + cp ${noopScript} libexec/build-libv8 + cp ${noopScript} libexec/build-monolith + cp ${noopScript} libexec/download-node + cp ${noopScript} libexec/extract-node + cp ${linkFiles} libexec/inject-libv8 + ''; + }; + }; + }; +in + stdenv.mkDerivation { + name = "openfoodnetwork"; + inherit + } diff --git a/flakes/openfoodnetwork/gemset.nix b/flakes/openfoodnetwork/gemset.nix new file mode 100644 index 0000000..2f212b8 --- /dev/null +++ b/flakes/openfoodnetwork/gemset.nix @@ -0,0 +1,2896 @@ +{ + actioncable = { + dependencies = ["actionpack" "activesupport" "nio4r" "websocket-driver"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ilq5mniarm0zlvnkagqj9n9p73ljrhphciz02aymrpfxxxclz2x"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + actionmailbox = { + dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16azdnjws215clb056b9mabglx4b8f61hr82hv7hm80dmn89zqq6"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00s07l2ac5igch1g2rpa0linmiq7mhgk6v6wxkckg8gbiqijb592"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xgysqnibjsy6kdz10x2xb3kwa6lssiqhh0zggrbgs31ypwhlpia"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + actionpack-action_caching = { + dependencies = ["actionpack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bxaz8sdhqkdjqwk58icy9668s0yxpgm28gdkdmxl3g41m94b8id"; + type = "gem"; + }; + version = "1.2.2"; + }; + actiontext = { + dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m4fy4qqh09vnzbhx383vjdfid6fzbs49bzzg415x05nmmjkx582"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yf4ic5kl324rs0raralpwx24s6hvvdzxfhinafylf8f3x7jj23z"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + active_model_serializers = { + dependencies = ["activemodel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k3mgia2ahh7mbk30hjq9pzqbk0kh281s91kq2z6p555nv9y6l3k"; + type = "gem"; + }; + version = "0.8.4"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q7c0i0kwarxgcbxk71wa9jnlg45grbxmhlrh7dk9bgcv7r7r7hn"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + activemerchant = { + dependencies = ["activesupport" "builder" "i18n" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ajmcgc4idxmvh8sghyb1ngxsc9x6r5yfi4r1z22d6a4j7b1yjzj"; + type = "gem"; + }; + version = "1.123.0"; + }; + activemodel = { + dependencies = ["activesupport"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16ixam4lni8b5lgx0whnax0imzh1dh10fy5r9pxs52n83yz5nbq3"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ccgvlj767ybps3pxlaa4iw77n7wbriw2sr8754id3ngjfap08ja"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + activerecord-import = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17ydad9gcsh0c9ny68fyvxmh6rbld4pyvyabnc7882678dnvfy8i"; + type = "gem"; + }; + version = "1.2.0"; + }; + activerecord-postgresql-adapter = { + dependencies = ["pg"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wdfd1mkns28ilr6nm18x69h651mjxwb8p2zk8pb6cjgx7c26axl"; + type = "gem"; + }; + version = "0.0.1"; + }; + activerecord-session_store = { + dependencies = ["actionpack" "activerecord" "multi_json" "rack" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06ddhz1b2yg72iv09n48gcd3ix5da7hxlzi7vvj13nrps2qwlffg"; + type = "gem"; + }; + version = "2.0.0"; + }; + activestorage = { + dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17knzz9fvqg4x582vy0xmlgjkxfb13xyzl2rgw19qfma86hxsvvi"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19gx1jcq46x9d1pi1w8xq0bgvvfw239y4lalr8asm291gj3q3ds4"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + acts-as-taggable-on = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kfnyix173bazjswab21bx7hmqmik71awj2kz090fsa2nv58c4mw"; + type = "gem"; + }; + version = "8.1.0"; + }; + acts_as_list = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12p22h59c45dnccb51pqk275ziyi502azf9w3qcnkcsq827ma5jm"; + type = "gem"; + }; + version = "1.0.4"; + }; + addressable = { + dependencies = ["public_suffix"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp"; + type = "gem"; + }; + version = "2.8.0"; + }; + afm = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8"; + type = "gem"; + }; + version = "0.2.2"; + }; + angular-rails-templates = { + dependencies = ["railties" "sprockets" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0aja8b2bjj8af29zagkm6pv48s0933l0d38j5b4wgxipf0c0mjxq"; + type = "gem"; + }; + version = "1.1.0"; + }; + angular_rails_csrf = { + dependencies = ["railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08g6xwz98apbfxwd0kbsxl7ll4bms11m563rjl4mavm1dnf3nsgh"; + type = "gem"; + }; + version = "4.5.0"; + }; + angularjs-file-upload-rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07s0b8bwdp8asc16rp16q78p17cl5qnw8svqarbcsv0b1fkxiqbd"; + type = "gem"; + }; + version = "2.4.1"; + }; + angularjs-rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01blhjrzg82l76s5fj7jcgnykxxdj61m5swwy9x0wxnxhid81rgx"; + type = "gem"; + }; + version = "1.8.0"; + }; + Ascii85 = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw"; + type = "gem"; + }; + version = "1.1.0"; + }; + ast = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y"; + type = "gem"; + }; + version = "2.4.2"; + }; + awesome_nested_set = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06ggf81dy8wkds0b37xgx065b325fm0c6i6g1k0ml4ai8jwphm6r"; + type = "gem"; + }; + version = "3.4.0"; + }; + awesome_print = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vkq6c8y2jvaw03ynds5vjzl1v9wg608cimkd3bidzxc0jvk56z9"; + type = "gem"; + }; + version = "1.9.2"; + }; + aws-sdk = { + dependencies = ["aws-sdk-resources"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xfan8fpiy019zp32l2a8smwfbii5m9hy49d8b8gvww2qcy5m3pr"; + type = "gem"; + }; + version = "2.2.0"; + }; + aws-sdk-core = { + dependencies = ["jmespath"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1f8diki6xvz048i0lhkxqngirgmqqj50jda8vjw0xxgv3qzklq4r"; + type = "gem"; + }; + version = "2.2.0"; + }; + aws-sdk-resources = { + dependencies = ["aws-sdk-core"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06y7sj2371pjw9vgsfipbz2g3pw3i4asdz27h1lb7pny8gwndkzk"; + type = "gem"; + }; + version = "2.2.0"; + }; + bcrypt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02r1c3isfchs5fxivbq99gc3aq4vfyn8snhcy707dal1p8qz12qb"; + type = "gem"; + }; + version = "3.1.16"; + }; + bigdecimal = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fxl2hybnfij668h7133p28f8b13jaj13wyyniqdiy8m3s6b1pcb"; + type = "gem"; + }; + version = "3.0.2"; + }; + bindex = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zmirr3m02p52bzq4xgksq4pn8j641rx5d4czk68pv9rqnfwq7kv"; + type = "gem"; + }; + version = "0.8.1"; + }; + bootsnap = { + dependencies = ["msgpack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ndjra3h86dq28njm2swmaw6n3vsywrycrf7i5iy9l8hrhfhv4x2"; + type = "gem"; + }; + version = "1.9.1"; + }; + bugsnag = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19yz4s0sw2w8jywkdf445zpdkg3s9869hmxcs7w68xvykpx0ickb"; + type = "gem"; + }; + version = "6.24.0"; + }; + builder = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr"; + type = "gem"; + }; + version = "3.2.4"; + }; + bullet = { + dependencies = ["activesupport" "uniform_notifier"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01xachwsyykmp153514vz2khanbsz1n27j09za5gcxj54srh5l4p"; + type = "gem"; + }; + version = "6.1.5"; + }; + byebug = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194"; + type = "gem"; + }; + version = "11.1.3"; + }; + cable_ready = { + dependencies = ["rails" "thread-local"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06lqnv1b3zxgn189v7df6avf3zrk1snfxkbm1ax0fz129k997hak"; + type = "gem"; + }; + version = "5.0.0.pre2"; + }; + cancancan = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05kb459laaw339n7mas37v4k83nwz228bfpaghgybza347341x85"; + type = "gem"; + }; + version = "1.15.0"; + }; + capybara = { + dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1viqcpsngy9fqjd68932m43ad6xj656d1x33nx9565q57chgi29k"; + type = "gem"; + }; + version = "3.35.3"; + }; + catalog = { + groups = ["default"]; + platforms = []; + source = { + path = engines/catalog; + type = "path"; + }; + version = "0.0.1"; + }; + childprocess = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ic028k8xgm2dds9mqnvwwx3ibaz32j8455zxr9f4bcnviyahya5"; + type = "gem"; + }; + version = "3.0.0"; + }; + chronic = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn"; + type = "gem"; + }; + version = "0.10.2"; + }; + chunky_png = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9"; + type = "gem"; + }; + version = "1.4.0"; + }; + climate_control = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q11v0iabvr6rif0d025xh078ili5frrihlj0m04zfg7lgvagxji"; + type = "gem"; + }; + version = "0.2.0"; + }; + cliver = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; + type = "gem"; + }; + version = "0.3.2"; + }; + cocaine = { + dependencies = ["climate_control"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01kk5xd7lspbkdvn6nyj0y51zhvia3z6r4nalbdcqw5fbsywwi7d"; + type = "gem"; + }; + version = "0.5.8"; + }; + codecov = { + dependencies = ["simplecov"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pi2dmqxjw5wsn65yx5qz5ks5msqflj0zxvk11r3cxwgacvj3hys"; + type = "gem"; + }; + version = "0.6.0"; + }; + coderay = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw"; + type = "gem"; + }; + version = "1.1.3"; + }; + coffee-rails = { + dependencies = ["coffee-script" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "170sp4y82bf6nsczkkkzypzv368sgjg6lfrkib4hfjgxa6xa3ajx"; + type = "gem"; + }; + version = "5.0.0"; + }; + coffee-script = { + dependencies = ["coffee-script-source" "execjs"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2"; + type = "gem"; + }; + version = "2.4.1"; + }; + coffee-script-source = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1907v9q1zcqmmyqzhzych5l7qifgls2rlbnbhy5vzyr7i7yicaz1"; + type = "gem"; + }; + version = "1.12.2"; + }; + combine_pdf = { + dependencies = ["ruby-rc4"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bxakrrip0sg5gxy50wdn7lr3h2w7rd590cjhnj4qi477cvi1qgg"; + type = "gem"; + }; + version = "1.0.21"; + }; + compass = { + dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-core = { + dependencies = ["multi_json" "sass"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-import-once = { + dependencies = ["sass"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; + type = "gem"; + }; + version = "1.0.5"; + }; + compass-rails = { + dependencies = ["compass" "sass-rails" "sprockets"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1y1gi9lcmxzn0xvx2pf4xzj8n0s6rl0vbycyjk1kpcvycyjnbjgr"; + type = "gem"; + }; + version = "4.0.0"; + }; + concurrent-ruby = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f"; + type = "gem"; + }; + version = "1.1.9"; + }; + connection_pool = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ffdxhgirgc86qb42yvmfj6v1v0x4lvi0pxn9zhghkff44wzra0k"; + type = "gem"; + }; + version = "2.2.5"; + }; + crack = { + dependencies = ["rexml"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r"; + type = "gem"; + }; + version = "0.4.5"; + }; + crass = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw"; + type = "gem"; + }; + version = "1.0.6"; + }; + css_parser = { + dependencies = ["addressable"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xs4ind9xd099rb52b73pch8ha143dl8bhivqsbba4wrvxpbx751"; + type = "gem"; + }; + version = "1.9.0"; + }; + cuprite = { + dependencies = ["capybara" "ferrum"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gz7min595pq4xkzm1nvn538i7plg7jwfc1pw6w8f4apfh94fv56"; + type = "gem"; + }; + version = "0.13"; + }; + custom_error_message = { + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "3a8ec9dddc7a5b0aab7c69a6060596de300c68f4"; + sha256 = "1r2yah8dzng7i0000xfdksv3cj2z65x1nr4vjrnsv9sm7fj7bbld"; + type = "git"; + url = "https://github.com/jeremydurham/custom-err-msg.git"; + }; + version = "1.1.1"; + }; + dalli = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0br39scmr187w3ifl5gsddl2fhq6ahijgw6358plqjdzrizlg764"; + type = "gem"; + }; + version = "2.7.11"; + }; + database_cleaner = { + dependencies = ["database_cleaner-active_record"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x4r22rnpwnm9yln88vhzqj4cl3sbd26c4j50g9k6wp7y01rln4w"; + type = "gem"; + }; + version = "2.0.1"; + }; + database_cleaner-active_record = { + dependencies = ["activerecord" "database_cleaner-core"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jg7jd7w65hdarzbi8f252la3qgsnd2sjavhlmc82kwzfx37k38m"; + type = "gem"; + }; + version = "2.0.0"; + }; + database_cleaner-core = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v44bn386ipjjh4m2kl53dal8g4d41xajn2jggnmjbhn6965fil6"; + type = "gem"; + }; + version = "2.0.1"; + }; + db2fog = { + dependencies = ["activerecord" "fog-core" "rails"]; + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "5b63343847452f52aa42f7fc169d6ab3af57cda3"; + sha256 = "02fc3v81sx6rnvc492bdg057fs67qpsf83y25bsdqz83k21xmzyl"; + type = "git"; + url = "https://github.com/openfoodfoundation/db2fog.git"; + }; + version = "0.9.2"; + }; + ddtrace = { + dependencies = ["ffi" "msgpack"]; + groups = ["production" "staging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p7d6r2zpy9mqmd26ni9cpgc2yas4jira66rxx92l87amypkvasc"; + type = "gem"; + }; + version = "0.53.0"; + }; + debugger-linecache = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iwyx190fd5vfwj1gzr8pg3m374kqqix4g4fc4qw29sp54d3fpdz"; + type = "gem"; + }; + version = "1.2.0"; + }; + devise = { + dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ag0skzk3h7bhmf1n2zwa7cg6kx5k5inxmq0kf5qpm7917ffm0mz"; + type = "gem"; + }; + version = "4.8.0"; + }; + devise-encryptable = { + dependencies = ["devise"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dh9gl7qa1a8x091xk9dc6lwc5jw6lqmiw7sii1hq0w4jknwlq4q"; + type = "gem"; + }; + version = "0.2.0"; + }; + devise-i18n = { + dependencies = ["devise"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11knkl0b40pyjz8934pmr3apzsmvvaj09w5ks8xzppd5agid2r6f"; + type = "gem"; + }; + version = "1.10.0"; + }; + devise-token_authenticatable = { + dependencies = ["devise"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ss9wcmjghl6s2kyqrgjn5z4bw1gxmlbqv0in2kirn56428w239f"; + type = "gem"; + }; + version = "1.1.0"; + }; + dfc_provider = { + dependencies = ["active_model_serializers" "jwt" "rspec"]; + groups = ["default"]; + platforms = []; + source = { + path = engines/dfc_provider; + type = "path"; + }; + version = "0.0.1"; + }; + diff-lcs = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m925b8xc6kbpnif9dldna24q1szg4mk0fvszrki837pfn46afmz"; + type = "gem"; + }; + version = "1.4.4"; + }; + docile = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lxqxgq71rqwj1lpl9q1mbhhhhhhdkkj7my341f2889pwayk85sz"; + type = "gem"; + }; + version = "1.4.0"; + }; + dotenv = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94"; + type = "gem"; + }; + version = "2.7.6"; + }; + dotenv-rails = { + dependencies = ["dotenv" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1my2jdmgmpf32rfxffkb9cyxh7ayis4q5ygpwjqj4vpp25y3a70c"; + type = "gem"; + }; + version = "2.7.6"; + }; + e2mmap = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n8gxjb63dck3vrmsdcqqll7xs7f3wk78mw8w0gdk9wp5nx6pvj5"; + type = "gem"; + }; + version = "0.1.0"; + }; + erubi = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l"; + type = "gem"; + }; + version = "1.10.0"; + }; + et-orbi = { + dependencies = ["tzinfo"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xr8i8ql4xzx17d12590i3j299hj6vc0ja2j29dy12i5nlchxrvp"; + type = "gem"; + }; + version = "1.2.4"; + }; + excon = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19g5nvkycnkzqq4mqn1zjznq9adrlv2jz0dr9w10cbn42hhqpiz7"; + type = "gem"; + }; + version = "0.81.0"; + }; + execjs = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; + type = "gem"; + }; + version = "2.7.0"; + }; + factory_bot = { + dependencies = ["activesupport"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04vxmjr200akcil9fqxc9ghbb9q0lyrh2q03xxncycd5vln910fi"; + type = "gem"; + }; + version = "6.2.0"; + }; + factory_bot_rails = { + dependencies = ["factory_bot" "railties"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18fhcihkc074gk62iwqgbdgc3ymim4fm0b4p3ipffy5hcsb9d2r7"; + type = "gem"; + }; + version = "6.2.0"; + }; + faraday = { + dependencies = ["faraday-excon" "faraday-net_http" "faraday-net_http_persistent" "multipart-post" "ruby2_keywords"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q646m07lfahakx5jdq77j004rcgfj6lkg13c0f84993gi78dhvi"; + type = "gem"; + }; + version = "1.4.1"; + }; + faraday-excon = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh"; + type = "gem"; + }; + version = "1.1.0"; + }; + faraday-net_http = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j"; + type = "gem"; + }; + version = "1.0.1"; + }; + faraday-net_http_persistent = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l2c835wl7gv34xp49fhd1bl4czkpw2g3ahqsak2251iqv5589ka"; + type = "gem"; + }; + version = "1.1.0"; + }; + ferrum = { + dependencies = ["addressable" "cliver" "concurrent-ruby" "websocket-driver"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17c2bryyzpdx3mj6rig4aym3wy24g2212zm0jz2gisbymhv9adbl"; + type = "gem"; + }; + version = "0.11"; + }; + ffaker = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gif76bq11qz73qm8hv050wf642f9zwawra78bnpnj5kpqhjg3dl"; + type = "gem"; + }; + version = "2.20.0"; + }; + ffi = { + groups = ["default" "production" "staging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ssxcywmb3flxsjdg13is6k01807zgzasdhj4j48dm7ac59cmksn"; + type = "gem"; + }; + version = "1.15.4"; + }; + flipper = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gdnd7j12a560r4pi22v1z2cy0nymwr340922rfj9qkpj7h46371"; + type = "gem"; + }; + version = "0.20.4"; + }; + flipper-active_record = { + dependencies = ["activerecord" "flipper"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "042x64rr11ia7n4db2y6vjbfjv2ip0jp2m2mlyb6d9srbxvvkiif"; + type = "gem"; + }; + version = "0.20.4"; + }; + flipper-ui = { + dependencies = ["erubi" "flipper" "rack" "rack-protection"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sf9giwiwrncvvac48rgc56xgj6s8scs7a9ahr6b2hqbyr1nja9l"; + type = "gem"; + }; + version = "0.20.4"; + }; + fog-aws = { + dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00skbbgvhqzq6gpgzmw0957n0wf1y3vjgrdyq3sib0ghpyfgmig3"; + type = "gem"; + }; + version = "2.0.1"; + }; + fog-core = { + dependencies = ["builder" "excon" "formatador"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02449kh2x3zj9xxszm02vy8zpbsrykvjrg5gj3kqcy2yizy2bhp3"; + type = "gem"; + }; + version = "1.45.0"; + }; + fog-json = { + dependencies = ["fog-core" "multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; + type = "gem"; + }; + version = "1.2.0"; + }; + fog-xml = { + dependencies = ["fog-core" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; + type = "gem"; + }; + version = "0.1.3"; + }; + foreman = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0szgxvnzwkzrfbq5dkwa98mig78aqglfy6irdsvq1gq045pbq9r7"; + type = "gem"; + }; + version = "0.87.2"; + }; + formatador = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + foundation-icons-sass-rails = { + dependencies = ["railties" "sass-rails"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1z3bp0kcz7csid9r6h8z8asywh8mn2fwcm71b4v4qjca13qf4n2w"; + type = "gem"; + }; + version = "3.0.0"; + }; + foundation-rails = { + dependencies = ["railties" "sass"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dizpi3k3bb2arnf96rxx1qx3x3rwqshbdzb3l8ycj1laddrhwnl"; + type = "gem"; + }; + version = "5.5.2.1"; + }; + fugit = { + dependencies = ["et-orbi" "raabro"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jhbmc1l94vz25byfbmgi783lrwsh74xvslqzxd0pjf8i9xsxv49"; + type = "gem"; + }; + version = "1.4.5"; + }; + fuubar = { + dependencies = ["rspec-core" "ruby-progressbar"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1028vn7j3kc5qqwswrf3has3qm4j9xva70xmzb3n29i89f0afwmj"; + type = "gem"; + }; + version = "2.5.1"; + }; + geocoder = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0is3xss043nxvckqrbk0r881950q4khigrh41qqqjff44gm24bs3"; + type = "gem"; + }; + version = "1.6.7"; + }; + globalid = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k6ww3shk3mv119xvr9m99l6ql0czq91xhd66hm8hqssb18r2lvm"; + type = "gem"; + }; + version = "0.5.2"; + }; + gmaps4rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0avwx3ygmq2krkawyplw76q4bm05v56rwp1vdwfpvsd8bh4vzhq9"; + type = "gem"; + }; + version = "2.1.2"; + }; + good_migrations = { + dependencies = ["activerecord" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f613j6gkdkipzhw6r9kngqk3g2zi6hwmscy1sdf5snfjpamhvin"; + type = "gem"; + }; + version = "0.1.0"; + }; + haml = { + dependencies = ["temple" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "035fgbfr20m08w4603ls2lwqbggr0vy71mijz0p68ib1am394xbf"; + type = "gem"; + }; + version = "5.2.2"; + }; + hashdiff = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c"; + type = "gem"; + }; + version = "1.0.1"; + }; + hashery = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj"; + type = "gem"; + }; + version = "2.1.2"; + }; + highline = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d"; + type = "gem"; + }; + version = "2.0.3"; + }; + hiredis = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04jj8k7lxqxw24sp0jiravigdkgsyrpprxpxm71ba93x1wr2w1bz"; + type = "gem"; + }; + version = "0.6.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a"; + type = "gem"; + }; + version = "1.8.10"; + }; + i18n-js = { + dependencies = ["i18n"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xiq65q0rhafp3aknj602nbj7i016yjfvw28y83hg8ddqlqvc9x0"; + type = "gem"; + }; + version = "3.9.0"; + }; + immigrant = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15jf08h8if3wyq0kdgijcknqzmgfw4rqnyln68mydg1c5bn4s5cw"; + type = "gem"; + }; + version = "0.3.6"; + }; + ipaddress = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; + type = "gem"; + }; + version = "0.8.3"; + }; + jmespath = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf"; + type = "gem"; + }; + version = "1.4.0"; + }; + jquery-rails = { + dependencies = ["rails-dom-testing" "railties" "thor"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dkhm8lan1vnyl3ll0ks2q06576pdils8a1dr354vfc1y5dqw15i"; + type = "gem"; + }; + version = "4.4.0"; + }; + jquery-ui-rails = { + dependencies = ["railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1garrnqwh35acj2pp4sp6fpm2g881h23y644lzbic2qmcrq9wd2v"; + type = "gem"; + }; + version = "4.2.1"; + }; + json = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci"; + type = "gem"; + }; + version = "2.5.1"; + }; + json-schema = { + dependencies = ["addressable"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; + type = "gem"; + }; + version = "2.8.1"; + }; + json_spec = { + dependencies = ["multi_json" "rspec"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03yiravv6q8lp37rip2i25w2qd63mwwi4jmw7ymf51y7j9xbjxvs"; + type = "gem"; + }; + version = "1.1.5"; + }; + jwt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bg8pjx0mpvl10k6d8a6gc8dzlv2z5jkqcjbjcirnk032iriq838"; + type = "gem"; + }; + version = "2.3.0"; + }; + knapsack = { + dependencies = ["rake"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1f42akjbdkrg1ihwvls9pkkvz8vikaapzgxl82dd128rfn42chm9"; + type = "gem"; + }; + version = "4.0.0"; + }; + launchy = { + dependencies = ["addressable"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xdyvr5j0gjj7b10kgvh8ylxnwk3wx19my42wqn9h82r4p246hlm"; + type = "gem"; + }; + version = "2.5.0"; + }; + letter_opener = { + dependencies = ["launchy"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09a7kgsmr10a0hrc9bwxglgqvppjxij9w8bxx91mnvh0ivaw0nq9"; + type = "gem"; + }; + version = "1.7.0"; + }; + libv8-node = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xx217hrkpcm41p41inmy05kb7g8p9w5fwabgjgmpvz0d60j2862"; + type = "gem"; + }; + version = "15.14.0.1"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nqcya57x2n58y1dify60i0dpla40n4yir928khp4nj5jrn9mgmw"; + type = "gem"; + }; + version = "2.12.0"; + }; + mail = { + dependencies = ["mini_mime"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; + type = "gem"; + }; + version = "2.7.1"; + }; + marcel = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bp001p687nsa4a8sp3q1iv8pfhs24w7s3avychjp64sdkg6jxq3"; + type = "gem"; + }; + version = "1.0.1"; + }; + method_source = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp"; + type = "gem"; + }; + version = "1.0.0"; + }; + mime-types = { + dependencies = ["mime-types-data"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh"; + type = "gem"; + }; + version = "3.3.1"; + }; + mime-types-data = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1phcq7z0zpipwd7y4fbqmlaqghv07fjjgrx99mwq3z3n0yvy7fmi"; + type = "gem"; + }; + version = "3.2021.0225"; + }; + mimemagic = { + dependencies = ["nokogiri" "rake"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17ycgsmz2229jh224ws77yg974cz326flgc401xrdkfpw90jvb08"; + type = "gem"; + }; + version = "0.4.3"; + }; + mini_mime = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kb7jq3wjgckmkzna799y5qmvn6vg52878bkgw35qay6lflcrwih"; + type = "gem"; + }; + version = "1.1.0"; + }; + mini_portile2 = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lvxm91hi0pabnkkg47wh1siv56s6slm2mdq1idfm86dyfidfprq"; + type = "gem"; + }; + version = "2.6.1"; + }; + mini_racer = { + dependencies = ["libv8-node"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0334q46gi3il9izw7k4z32fj06nm8pznqdkr9r51033lnwwy9zy3"; + type = "gem"; + }; + version = "0.4.0"; + }; + minitest = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl"; + type = "gem"; + }; + version = "5.14.4"; + }; + monetize = { + dependencies = ["money"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cna2myxdbwfq0gn6k2hgrh368dq7wld3jklm96443ysykd0difn"; + type = "gem"; + }; + version = "1.11.0"; + }; + money = { + dependencies = ["i18n"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11fk7i1w3qjb1br7507z748g1rh3mcmnvpm4jach0i4hsc2wrb5k"; + type = "gem"; + }; + version = "6.14.1"; + }; + msgpack = { + groups = ["default" "production" "staging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06iajjyhx0rvpn4yr3h1hc4w4w3k59bdmfhxnjzzh76wsrdxxrc6"; + type = "gem"; + }; + version = "1.4.2"; + }; + multi_json = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z"; + type = "gem"; + }; + version = "1.15.0"; + }; + multi_xml = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; + type = "gem"; + }; + version = "0.6.0"; + }; + multipart-post = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj"; + type = "gem"; + }; + version = "2.1.1"; + }; + nio4r = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v"; + type = "gem"; + }; + version = "2.5.8"; + }; + nokogiri = { + dependencies = ["mini_portile2" "racc"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1v02g7k7cxiwdcahvlxrmizn3avj2q6nsjccgilq1idc89cr081b"; + type = "gem"; + }; + version = "1.12.5"; + }; + oauth2 = { + dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q6q2kgpxmygk8kmxqn54zkw8cs57a34zzz5cxpsh1bj3ag06rk3"; + type = "gem"; + }; + version = "1.4.7"; + }; + ofn-qz = { + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "467f6ea1c44529c7c91cac4c8211bbd863588c0b"; + sha256 = "1rm2r2gfbc8cbv9gd4619ivv3qvklwpdayvklyd7w5k9c110fm7j"; + type = "git"; + url = "https://github.com/openfoodfoundation/ofn-qz.git"; + }; + version = "0.1.0"; + }; + order_management = { + groups = ["default"]; + platforms = []; + source = { + path = engines/order_management; + type = "path"; + }; + version = "0.0.1"; + }; + orm_adapter = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; + type = "gem"; + }; + version = "0.5.0"; + }; + pagy = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "010z4lmpj7ld8k6hcpsyd2m0iicycaaabyzscgvnir8cklx1w9cw"; + type = "gem"; + }; + version = "4.11.0"; + }; + paper_trail = { + dependencies = ["activerecord" "request_store"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hvz0fdzginyyx2x8c755aibdhfvmpjfb9666pdk6ccr9nkb7w1k"; + type = "gem"; + }; + version = "12.1.0"; + }; + paperclip = { + dependencies = ["activemodel" "activerecord" "activesupport" "cocaine" "mime-types"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12acd9ambpsq25x4mi4anmsz9p442zhqkba2f4hgml01njxpn8y9"; + type = "gem"; + }; + version = "3.4.2"; + }; + parallel = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hkfpm78c2vs1qblnva3k1grijvxh87iixcnyd83s3lxrxsjvag4"; + type = "gem"; + }; + version = "1.21.0"; + }; + paranoia = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02plzv9qygzxa3fryz6cgap64jqrzwprjsm7r467g15mhaa4fzxi"; + type = "gem"; + }; + version = "2.4.3"; + }; + parser = { + dependencies = ["ast"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06ma6w87ph8lnc9z4hi40ynmcdnjv0p8x53x0s3fjkz4q2p6sxh5"; + type = "gem"; + }; + version = "3.0.2.0"; + }; + paypal-sdk-core = { + dependencies = ["multi_json" "xml-simple"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zjqykpxn6snv92wn8a179xyn1vbj327x91dh75lld3myfjz0b0l"; + type = "gem"; + }; + version = "0.3.4"; + }; + paypal-sdk-merchant = { + dependencies = ["paypal-sdk-core"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v8gqhn7s53xdf5583hcf3ph22n81hniwli3s1jprak7nx5453f7"; + type = "gem"; + }; + version = "1.117.2"; + }; + pdf-reader = { + dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14cxj3ra9nnn334qpm2vsx9s0zk3095s8ih6cwcp47h3hv03c73y"; + type = "gem"; + }; + version = "2.5.0"; + }; + pg = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13mfrysrdrh8cka1d96zm0lnfs59i5x2g6ps49r2kz5p3q81xrzj"; + type = "gem"; + }; + version = "1.2.3"; + }; + power_assert = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01z44m715rb6nzfrc90c5rkkdiy42dv3q94jw1q8baf9dg33nwi5"; + type = "gem"; + }; + version = "2.0.1"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iyw4q4an2wmk8v5rn2ghfy2jaz9vmw2nk8415nnpx2s866934qk"; + type = "gem"; + }; + version = "0.13.1"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "096y5vmzpyy4x9h4ky4cs4y7d19vdq9vbwwrqafbh5gagzwhifiv"; + type = "gem"; + }; + version = "3.9.0"; + }; + public_suffix = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9"; + type = "gem"; + }; + version = "4.0.6"; + }; + puma = { + dependencies = ["nio4r"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ahk9a2a05985m0037gqlpha5vdkvmwhyk8v1shkbnwkkm30k0mq"; + type = "gem"; + }; + version = "5.5.0"; + }; + raabro = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10m8bln9d00dwzjil1k42i5r7l82x25ysbi45fwyv4932zsrzynl"; + type = "gem"; + }; + version = "1.4.0"; + }; + racc = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g"; + type = "gem"; + }; + version = "1.5.2"; + }; + rack = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16"; + type = "gem"; + }; + version = "2.2.3"; + }; + rack-mini-profiler = { + dependencies = ["rack"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03hcvjw9nrv0w6yjy2zkv4ivin9xg2wr7xfcvx7rc2msv1gmjb6z"; + type = "gem"; + }; + version = "2.3.3"; + }; + rack-protection = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "159a4j4kragqh0z0z8vrpilpmaisnlz3n7kgiyf16bxkwlb3qlhz"; + type = "gem"; + }; + version = "2.1.0"; + }; + rack-proxy = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jdr2r5phr3q7d6k9cnxjwlkaps0my0n43wq9mzw3xdqhg9wa3d6"; + type = "gem"; + }; + version = "0.7.0"; + }; + rack-rewrite = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; + type = "gem"; + }; + version = "1.5.1"; + }; + rack-ssl = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; + type = "gem"; + }; + version = "1.4.1"; + }; + rack-test = { + dependencies = ["rack"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rack-timeout = { + groups = ["production" "staging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16ahj3qz3xhfrwvqb4nf6cfzvliigg0idfsp5jyr8qwk676d2f30"; + type = "gem"; + }; + version = "0.6.0"; + }; + rails = { + dependencies = ["actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1y59m2x8rdc581bjgyyr9dabi3vk3frqhhpbb5ldpbj622kxfpbz"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + rails-controller-testing = { + dependencies = ["actionpack" "actionview" "activesupport"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "151f303jcvs8s149mhx2g5mn67487x0blrf9dzl76q1nb7dlh53l"; + type = "gem"; + }; + version = "1.0.5"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "nokogiri"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; + type = "gem"; + }; + version = "2.0.3"; + }; + rails-html-sanitizer = { + dependencies = ["loofah"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09qrfi3pgllxb08r024lln9k0qzxs57v0slsj8616xf9c0cwnwbk"; + type = "gem"; + }; + version = "1.4.2"; + }; + rails-i18n = { + dependencies = ["i18n" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05mcgv748vppnm3fnml37wjy3dw61wj8vfw14ldaj1yx1bmkhb07"; + type = "gem"; + }; + version = "6.0.0"; + }; + rails_safe_tasks = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06bl9cgj8jyc04qdm4jp02ph2vlarapy119lagk6cq1hadzdw7n2"; + type = "gem"; + }; + version = "1.0.0"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kwpm068cqys34p2g0j3l1g0cd5f3kxnsay5v7lmbd0sgarac0vy"; + type = "gem"; + }; + version = "6.1.4.1"; + }; + rainbow = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk"; + type = "gem"; + }; + version = "3.0.0"; + }; + rake = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w"; + type = "gem"; + }; + version = "13.0.6"; + }; + ransack = { + dependencies = ["activerecord" "activesupport" "i18n"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z25sv93lfiyjjm9fgkmnjkc9kjdlpkd7wairk2vqj7dxklv7yvs"; + type = "gem"; + }; + version = "2.4.2"; + }; + rb-fsevent = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qsx9c4jr11vr3a9s5j83avczx9qn9rjaf32gxpc2v451hvbc0is"; + type = "gem"; + }; + version = "0.11.0"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005"; + type = "gem"; + }; + version = "0.10.1"; + }; + redcarpet = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bvk8yyns5s1ls437z719y5sdv9fr8kfs8dmr6g8s761dv5n8zvi"; + type = "gem"; + }; + version = "3.5.1"; + }; + redis = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ig832dp0xmpp6a934nifzaj7wm9lzjxzasw911fagycs8p6m720"; + type = "gem"; + }; + version = "4.4.0"; + }; + regexp_parser = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vg7imjnfcqjx7kw94ccj5r78j4g190cqzi1i59sh4a0l940b9cr"; + type = "gem"; + }; + version = "2.1.1"; + }; + request_store = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cx74kispmnw3ljwb239j65a2j14n8jlsygy372hrsa8mxc71hxi"; + type = "gem"; + }; + version = "1.5.0"; + }; + responders = { + dependencies = ["actionpack" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14kjykc6rpdh24sshg9savqdajya2dislc1jmbzg91w9967f4gv1"; + type = "gem"; + }; + version = "3.0.1"; + }; + rexml = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53"; + type = "gem"; + }; + version = "3.2.5"; + }; + roadie = { + dependencies = ["css_parser" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01kld3drqfiih5x8c13cvr6dpvdl7jml0v9bcw4fsy322lax3kn0"; + type = "gem"; + }; + version = "4.0.0"; + }; + roadie-rails = { + dependencies = ["railties" "roadie"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jjcqnp37z65dksykzwjiz149kx65nw70lyx8dkw1fm5x7yraqvh"; + type = "gem"; + }; + version = "2.2.0"; + }; + roo = { + dependencies = ["nokogiri" "rubyzip"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1z2nbf1w48ip2akf1ql86y6569aizi53d6ickjbplkga12n0isf8"; + type = "gem"; + }; + version = "2.8.3"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dwai7jnwmdmd7ajbi2q0k0lx1dh88knv5wl7c34wjmf94yv8w5q"; + type = "gem"; + }; + version = "3.10.0"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wwnfhxxvrlxlk1a3yxlb82k2f9lm0yn0598x7lk8fksaz4vv6mc"; + type = "gem"; + }; + version = "3.10.1"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sz9bj4ri28adsklnh257pnbq4r5ayziw02qf67wry0kvzazbb17"; + type = "gem"; + }; + version = "3.10.1"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d13g6kipqqc9lmwz5b244pdwc97z15vcbnbq6n9rlf32bipdz4k"; + type = "gem"; + }; + version = "3.10.2"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "152yz205p8zi5nxxhs8z581rjdvvqsfjndklkvn11f2vi50nv7n9"; + type = "gem"; + }; + version = "5.0.2"; + }; + rspec-retry = { + dependencies = ["rspec-core"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n6qc0d16h6bgh1xarmc8vc58728mgjcsjj8wcd822c8lcivl0b1"; + type = "gem"; + }; + version = "0.6.2"; + }; + rspec-support = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15j52parvb8cgvl6s0pbxi2ywxrv6x0764g222kz5flz0s4mycbl"; + type = "gem"; + }; + version = "3.10.2"; + }; + rswag = { + dependencies = ["rswag-api" "rswag-specs" "rswag-ui"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w7dc4ipxaf6dagj6zbn4j7r384gh4zhdb2i7dvpqahrszf6cc7r"; + type = "gem"; + }; + version = "2.4.0"; + }; + rswag-api = { + dependencies = ["railties"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s8wc2m4xngbdm5ms2xskpykzbmr9cvapxpjv4k6yirv71lqdxqc"; + type = "gem"; + }; + version = "2.4.0"; + }; + rswag-specs = { + dependencies = ["activesupport" "json-schema" "railties"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dma3j5vfjhyclg8y0gsp44vs4wn9chf4jgfhc9r6ws018xrbxzd"; + type = "gem"; + }; + version = "2.4.0"; + }; + rswag-ui = { + dependencies = ["actionpack" "railties"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08f7g0cmz5gyzsszaqwmy4mrj2xh6krnd03jw9yi80gqayda4rkr"; + type = "gem"; + }; + version = "2.4.0"; + }; + rubocop = { + dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19jg2mm4xj044j06asqv7v0bmq1axikl9pskf35riz54rskv8wci"; + type = "gem"; + }; + version = "1.22.1"; + }; + rubocop-ast = { + dependencies = ["parser"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0x0xfq2mpg194rcanbjrgvjbh94s9kq72jynxx61789s628kxy59"; + type = "gem"; + }; + version = "1.12.0"; + }; + rubocop-rails = { + dependencies = ["activesupport" "rack" "rubocop"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mq3x7jpmp49wwa2r880dcmn27arqc9ln8v2y0dv3ha7s5g8mzrn"; + type = "gem"; + }; + version = "2.12.3"; + }; + ruby-progressbar = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc"; + type = "gem"; + }; + version = "1.11.0"; + }; + ruby-rc4 = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00"; + type = "gem"; + }; + version = "0.1.5"; + }; + ruby2_keywords = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs"; + type = "gem"; + }; + version = "0.0.4"; + }; + rubyzip = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz"; + type = "gem"; + }; + version = "2.3.2"; + }; + rufus-scheduler = { + dependencies = ["fugit"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x1cr9hd3phshgrrh796ql37339j5i6w7i7skxjkyygigdzl5kjy"; + type = "gem"; + }; + version = "3.7.0"; + }; + sass = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; + type = "gem"; + }; + version = "3.4.25"; + }; + sass-rails = { + dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19bcs1ya3bkx36qaz21kgiz28s9h678m3rszcw7aany2lsis56y7"; + type = "gem"; + }; + version = "5.0.8"; + }; + sd_notify = { + groups = ["production" "staging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c9imnjbakx25r2n7widfp00s19ndzmmwax761mx5vbwm9nariyb"; + type = "gem"; + }; + version = "0.1.1"; + }; + select2-rails = { + dependencies = ["sass-rails" "thor"]; + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "fc240e85fbdf1878ff3c39d972c0cd9a312f5ed4"; + sha256 = "0lflvygxgmm4yqhnx66h77g742g01x7jajjjn33a4hm0n7lgdq5y"; + type = "git"; + url = "https://github.com/openfoodfoundation/select2-rails.git"; + }; + version = "3.4.9"; + }; + selenium-webdriver = { + dependencies = ["childprocess" "rubyzip"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0adcvp86dinaqq3nhf8p3m0rl2g6q0a4h52k0i7kdnsg1qz9k86y"; + type = "gem"; + }; + version = "3.142.7"; + }; + semantic_range = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dlp97vg95plrsaaqj7x8l7z9vsjbhnqk4rw1l30gy26lmxpfrih"; + type = "gem"; + }; + version = "3.0.0"; + }; + shoulda-matchers = { + dependencies = ["activesupport"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z6v2acldnvqrnvfk70f9xq39ppw5j03kbz2hpz7s17lgnn21vx8"; + type = "gem"; + }; + version = "5.0.0"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack" "redis"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "104a97cl94aclg71ngrr097zjbdf6cibnz4q3rqjb88izmd7cfk6"; + type = "gem"; + }; + version = "6.2.2"; + }; + sidekiq-scheduler = { + dependencies = ["e2mmap" "redis" "rufus-scheduler" "sidekiq" "thwait" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k686psrg8rd902yyqi38vys11zb07192skzx8zyyvyz2l9vrzds"; + type = "gem"; + }; + version = "3.1.0"; + }; + simplecov = { + dependencies = ["docile" "simplecov-html" "simplecov_json_formatter"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hrv046jll6ad1s964gsmcq4hvkr3zzr6jc7z1mns22mvfpbc3cr"; + type = "gem"; + }; + version = "0.21.2"; + }; + simplecov-html = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb"; + type = "gem"; + }; + version = "0.12.3"; + }; + simplecov_json_formatter = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19r15hyvh52jx7fmsrcflb58xh8l7l0zx4sxkh3hqzhq68y81pjl"; + type = "gem"; + }; + version = "0.1.3"; + }; + spring = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12kyz3jdnaarhf2jbykmd9mqg085gxsx00c16la5q7czxvpb2x2r"; + type = "gem"; + }; + version = "3.0.0"; + }; + spring-commands-rspec = { + dependencies = ["spring"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; + type = "gem"; + }; + version = "1.0.4"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; + type = "gem"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mwmz36265646xqfyczgr1mhkm1hfxgxxvgdgr4xfcbf2g72p1k2"; + type = "gem"; + }; + version = "3.2.2"; + }; + state_machines = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; + type = "gem"; + }; + version = "0.5.0"; + }; + state_machines-activemodel = { + dependencies = ["activemodel" "state_machines"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b4dffzlj38adin6gm0ky72r5c507qdb1jprnm7h9gnlj2qxlcp9"; + type = "gem"; + }; + version = "0.8.0"; + }; + state_machines-activerecord = { + dependencies = ["activerecord" "state_machines-activemodel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dmaf4f4cg3gamzgga3gamp0kv9lvianqzr9103dw0xbp00vfbq7"; + type = "gem"; + }; + version = "0.8.0"; + }; + stringex = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ns7j5smw04w6w7bqd5mm2qcl7w9lhwykyb974i4isgg9yc23ys"; + type = "gem"; + }; + version = "2.8.5"; + }; + stripe = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b2savy5h9shdzr6fkfqyrpmpx1a82gn4j47895zwc279dhwnlrh"; + type = "gem"; + }; + version = "5.38.0"; + }; + temple = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "060zzj7c2kicdfk6cpnn40n9yjnhfrr13d0rsbdhdij68chp2861"; + type = "gem"; + }; + version = "0.8.2"; + }; + test-prof = { + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vg0zjfgibdcgkzb4c25v0f4v6v8mvpzvgcag194rwglmkkyrwkx"; + type = "gem"; + }; + version = "1.0.7"; + }; + test-unit = { + dependencies = ["power_assert"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03pn837vgza8v550ggzhcxbvb80d6qivqnhv3n39lrfnsc8xgi7m"; + type = "gem"; + }; + version = "3.4.7"; + }; + thor = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna"; + type = "gem"; + }; + version = "1.1.0"; + }; + thread-local = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ryjgfwcsbkxph1l24x87p1yabnnbqy958s57w37iwhf3z9nid9g"; + type = "gem"; + }; + version = "1.1.0"; + }; + thwait = { + dependencies = ["e2mmap"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q0fqlh0668j66z0g3s5yhqs39368az2ycxyphsx4c5nib5r4kak"; + type = "gem"; + }; + version = "0.2.0"; + }; + tilt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rn8z8hda4h41a64l0zhkiwz2vxw9b1nb70gl37h1dg2k874yrlv"; + type = "gem"; + }; + version = "2.0.10"; + }; + timecop = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fw3nzycvd15qa7sxy9dxb4hqyizy1s8f7q3d50smbzyyvr8fvia"; + type = "gem"; + }; + version = "0.9.4"; + }; + ttfunk = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13"; + type = "gem"; + }; + version = "1.7.0"; + }; + tzinfo = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z"; + type = "gem"; + }; + version = "2.0.4"; + }; + uglifier = { + dependencies = ["execjs"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wgh7bzy68vhv9v68061519dd8samcy8sazzz0w3k8kqpy3g4s5f"; + type = "gem"; + }; + version = "4.2.0"; + }; + unicode-display_width = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0csjm9shhfik0ci9mgimb7hf3xgh7nx45rkd9rzgdz6vkwr8rzxn"; + type = "gem"; + }; + version = "2.1.0"; + }; + uniform_notifier = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1614dqnky0f9f1znj0lih8i184vfps86md93dw0kxrg3af9gnqb4"; + type = "gem"; + }; + version = "1.14.2"; + }; + valid_email2 = { + dependencies = ["activemodel" "mail"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l4xkwvx7aj5z18h6vzp0wsfjbcrl76ixp0x95wwlrhn03qab6hs"; + type = "gem"; + }; + version = "4.0.0"; + }; + view_component = { + dependencies = ["activesupport" "method_source"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qygf9dfn42q8y3i2g04zqqmw1bjklmsxgdcpfk07nbnpjh391i9"; + type = "gem"; + }; + version = "2.40.0"; + }; + view_component_storybook = { + dependencies = ["view_component"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yslfpcw58mqqaig83b2h98mf04i19ck37m270d8naxr69iv9h0n"; + type = "gem"; + }; + version = "0.10.1"; + }; + warden = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l7gl7vms023w4clg02pm4ky9j12la2vzsixi2xrv9imbn44ys26"; + type = "gem"; + }; + version = "1.2.9"; + }; + web = { + groups = ["default"]; + platforms = []; + source = { + path = engines/web; + type = "path"; + }; + version = "0.0.1"; + }; + web-console = { + dependencies = ["actionview" "activemodel" "bindex" "railties"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d9hk929cmisix2l1w9kkh05b57ih9yvnh4wv52axxw41scnv2d9"; + type = "gem"; + }; + version = "4.1.0"; + }; + webdrivers = { + dependencies = ["nokogiri" "rubyzip" "selenium-webdriver"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1naymcfmm9pkf0f67xd99d9f6dpv477ggyvc1c04gxifirynfydp"; + type = "gem"; + }; + version = "4.6.1"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l8vh8p0g92cqcvv0ra3mblsa4nczh0rz8nbwbkc3g3yzbva85xk"; + type = "gem"; + }; + version = "3.14.0"; + }; + webpacker = { + dependencies = ["activesupport" "rack-proxy" "railties" "semantic_range"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cq6m5qwm3bmi7hkjfmbg2cs4qjq4wswlrwcfk8l1svfqbi135v3"; + type = "gem"; + }; + version = "5.4.3"; + }; + websocket-driver = { + dependencies = ["websocket-extensions"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0a3bwxd9v3ghrxzjc4vxmf4xa18c6m4xqy5wb0yk5c6b9psc7052"; + type = "gem"; + }; + version = "0.7.5"; + }; + websocket-extensions = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw"; + type = "gem"; + }; + version = "0.1.5"; + }; + whenever = { + dependencies = ["chronic"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0im2x9rgr752hb9f1nnfj486k96bfiqj0xsv2bmzaq1rqhbi9dyr"; + type = "gem"; + }; + version = "1.0.0"; + }; + wicked_pdf = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0i7ifpb5ynvg7m6i1bivmvnaz29vjfwf6f4qj9gs7nq4yyxflqr6"; + type = "gem"; + }; + version = "2.1.0"; + }; + wkhtmltopdf-binary = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ksmryizimmw60k5siciv3xfxx9q797bh5a1rga7hqban98rv0c2"; + type = "gem"; + }; + version = "0.12.6.5"; + }; + xml-simple = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1flpmghcbil6qbl3f6w67kpjrnjbw86x7h6g5n4m5ff0cg4sylrv"; + type = "gem"; + }; + version = "1.1.8"; + }; + xpath = { + dependencies = ["nokogiri"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; + zeitwerk = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl"; + type = "gem"; + }; + version = "2.4.2"; + }; +} \ No newline at end of file diff --git a/flakes/paste/flake.nix b/flakes/paste/flake.nix index 08d0681..97e31c8 100644 --- a/flakes/paste/flake.nix +++ b/flakes/paste/flake.nix @@ -45,6 +45,8 @@ let cfg = config.services.paste; in { + # Necessary for situations where flake gets included multiple times + key = builtins.hashString "sha256" (builtins.path { path = self.sourceInfo.outPath; name = "source"; }); options = { services.paste = { enable = lib.mkOption { diff --git a/flakes/paste/paste/paste.py b/flakes/paste/paste/paste.py index 86666b8..3172de5 100644 --- a/flakes/paste/paste/paste.py +++ b/flakes/paste/paste/paste.py @@ -10,9 +10,32 @@ import mimetypes magic = magic.Magic(mime=True) +mit_license = """ +Copyright (c) 2022 Immae + +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. +""" + config = { "directory": os.environ["PASTE_DIRECTORY"], "self_paste_id": "abcd123", + "license_paste_id": "license", "max_content_length": 16 * 1000 * 1000 } @@ -33,6 +56,8 @@ def read_paste(paste_id): if mime.startswith("text/x-script."): mime="text/plain" return (content, mime) + elif paste_id == config["license_paste_id"]: + return (mit_license, "text/plain") else: abort(404) @@ -69,9 +94,11 @@ $ curl -X POST --data-binary @{self} {host} -> GET {paste}/download force download of file -Get the source +Get the source
    +Software licensed under the terms of the MIT license '''.format(host=url_for('post_paste', _external=True, _scheme="https"), paste=url_for('get_paste', _external=True, _scheme="https", paste_id=config["self_paste_id"]), + license=url_for('get_paste', _external=True, _scheme="https", paste_id=config["license_paste_id"]), self=os.path.basename(__file__) ), mimetype="text/html") diff --git a/flakes/peertube/flake.lock b/flakes/peertube/flake.lock index 6187115..eeb516a 100644 --- a/flakes/peertube/flake.lock +++ b/flakes/peertube/flake.lock @@ -17,19 +17,14 @@ }, "myuids": { "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" }, "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "path": "../myuids", + "type": "path" } }, "nixpkgs": { diff --git a/flakes/peertube/flake.nix b/flakes/peertube/flake.nix index 2f9c8c1..e8153eb 100644 --- a/flakes/peertube/flake.nix +++ b/flakes/peertube/flake.nix @@ -1,9 +1,7 @@ { description = "A free software to take back control of your videos"; inputs.myuids = { - url = "https://git.immae.eu/perso/Immae/Config/Nix.git"; - type = "git"; - dir = "flakes/myuids"; + url = "path:../myuids"; }; inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.nixpkgs.url = "github:NixOS/nixpkgs"; @@ -166,10 +164,10 @@ nixosModule = { lib, pkgs, config, ... }: let name = "peertube"; - cfg = config.services.peertube; + cfg = config.immaeServices.peertube; in { - options.services.peertube = { + options.immaeServices.peertube = { enable = lib.mkEnableOption "Enable Peertube’s service"; user = lib.mkOption { type = lib.types.str; @@ -239,6 +237,8 @@ environment.NODE_CONFIG_DIR = "${cfg.dataDir}/config"; environment.NODE_ENV = "production"; + environment.NPM_CONFIG_LOGS_DIR = "${cfg.dataDir}/npm_logs"; + environment.NPM_CONFIG_CACHE = "${cfg.dataDir}/npm_cache"; environment.HOME = cfg.package; path = [ pkgs.nodejs pkgs.yarn pkgs.bashInteractive pkgs.ffmpeg pkgs.openssl ]; diff --git a/flakes/private/buildbot/buildslist/bower.nix b/flakes/private/buildbot/buildslist/bower.nix new file mode 100644 index 0000000..8b26e0a --- /dev/null +++ b/flakes/private/buildbot/buildslist/bower.nix @@ -0,0 +1,9 @@ +# Generated by bower2nix v3.2.0 (https://github.com/rvl/bower2nix) +{ fetchbower, buildEnv }: +buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [ + (fetchbower "jquery" "2.1.1" "2.1.1" "1qir36vi0bppjr9ckm6303vk1f1dkvq5wandpihb7dxl76s832bd") + (fetchbower "angular" "1.5.11" "~1.5.3" "1sw31v3dhmxwgrmncw2f9yl07i9px62ssbj0739zsgi59cq2khl7") + (fetchbower "lodash" "2.4.2" "~2.4.1" "0bhqarlvhlrxfvcgnxgsrsjgi6az4c117ffxyfi7gjwr9cvrzz4q") + (fetchbower "angular-mocks" "1.5.11" "~1.5.3" "0yv0396fw51i6d9lwiwf241rmc28rnxgg2aa9vsc7dnm4qjkn6gx") + (fetchbower "buildbot-data" "2.1.0" "~2.1.0" "0hkmm1byy7d712898lhkxf7i0wshmd1f8cr98iz67679nm6abimk") +]; } diff --git a/flakes/private/buildbot/buildslist/default.nix b/flakes/private/buildbot/buildslist/default.nix new file mode 100644 index 0000000..7f72503 --- /dev/null +++ b/flakes/private/buildbot/buildslist/default.nix @@ -0,0 +1,64 @@ +{ stdenv, runCommand, writeScriptBin, buildBowerComponents, pythonPackages, fetchurl, jq, yarn, nodejs-10_x, yarn2nix-moretea, buildslist_src }: +let + yarn2nix-moretea' = yarn2nix-moretea.override({ + yarn = yarn.override({ nodejs = nodejs-10_x; }); + nodejs = nodejs-10_x; + }); + packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' + cat ${buildslist_src}/package.json | jq -r '.version = "${pythonPackages.buildbot-pkg.version}"|.license= "MIT"' > $out + ''; + nodeHeaders = fetchurl { + url = "https://nodejs.org/download/release/v${nodejs-10_x.version}/node-v${nodejs-10_x.version}-headers.tar.gz"; + sha256 = "sha256-LEk6BOW/vwdUXGAialDOoyFIkZ81k6ADy6MhMfRiE5Y="; + }; + buildslist_yarn = yarn2nix-moretea'.mkYarnModules rec { + name = "buildslist-yarn-modules"; + pname = name; + inherit (pythonPackages.buildbot-pkg) version; + packageJSON = packagejson; + yarnLock = "${buildslist_src}/yarn.lock"; + yarnNix = ./yarn-packages.nix; + pkgConfig = { + node-sass = { + buildInputs = with yarn2nix-moretea'.pkgs; [ libsass python2 ]; + postInstall = + '' + node scripts/build.js --tarball=${nodeHeaders} + ''; + }; + }; + }; + buildslist_bower = buildBowerComponents { + name = "buildslist"; + generated = ./bower.nix; + src = "${buildslist_src}/guanlecoja/"; + }; + # the buildbot-pkg calls yarn and screws up everything... + fakeYarn = writeScriptBin "yarn" '' + #!${stdenv.shell} + if [ "$1" = "--version" ]; then + echo "1.17" + fi + ''; +in +pythonPackages.buildPythonPackage rec { + pname = "buildbot-buildslist"; + inherit (pythonPackages.buildbot-pkg) version; + + preConfigure = '' + export HOME=$PWD + ln -s ${buildslist_yarn}/node_modules . + cp -a ${buildslist_bower}/bower_components ./libs + PATH=${buildslist_yarn}/node_modules/.bin:$PATH + chmod -R u+w libs + ''; + propagatedBuildInputs = with pythonPackages; [ + (klein.overridePythonAttrs(old: { checkPhase = ""; })) + buildbot-pkg + ]; + nativeBuildInputs = [ fakeYarn nodejs-10_x ]; + buildInputs = [ buildslist_yarn buildslist_bower ]; + + doCheck = false; + src = buildslist_src; +} diff --git a/flakes/private/buildbot/buildslist/yarn-packages.nix b/flakes/private/buildbot/buildslist/yarn-packages.nix new file mode 100644 index 0000000..2ade970 --- /dev/null +++ b/flakes/private/buildbot/buildslist/yarn-packages.nix @@ -0,0 +1,9293 @@ +{fetchurl, linkFarm}: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + + { + name = "_types_babel_types___babel_types_7.0.7.tgz"; + path = fetchurl { + name = "_types_babel_types___babel_types_7.0.7.tgz"; + url = "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz"; + sha1 = "667eb1640e8039436028055737d2b9986ee336e3"; + }; + } + + { + name = "_types_babylon___babylon_6.16.5.tgz"; + path = fetchurl { + name = "_types_babylon___babylon_6.16.5.tgz"; + url = "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz"; + sha1 = "1c5641db69eb8cdf378edd25b4be7754beeb48b4"; + }; + } + + { + name = "_types_color_name___color_name_1.1.1.tgz"; + path = fetchurl { + name = "_types_color_name___color_name_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz"; + sha1 = "1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"; + }; + } + + { + name = "Base64___Base64_0.2.1.tgz"; + path = fetchurl { + name = "Base64___Base64_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz"; + sha1 = "ba3a4230708e186705065e66babdd4c35cf60028"; + }; + } + + { + name = "JSONStream___JSONStream_0.6.4.tgz"; + path = fetchurl { + name = "JSONStream___JSONStream_0.6.4.tgz"; + url = "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.6.4.tgz"; + sha1 = "4b2c8063f8f512787b2375f7ee9db69208fa2dcb"; + }; + } + + { + name = "JSONStream___JSONStream_0.7.4.tgz"; + path = fetchurl { + name = "JSONStream___JSONStream_0.7.4.tgz"; + url = "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.7.4.tgz"; + sha1 = "734290e41511eea7c2cfe151fbf9a563a97b9786"; + }; + } + + { + 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 = "abbrev___abbrev_1.0.9.tgz"; + path = fetchurl { + name = "abbrev___abbrev_1.0.9.tgz"; + url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz"; + sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135"; + }; + } + + { + name = "accepts___accepts_1.3.3.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz"; + sha1 = "c3ca7434938648c3e0d9c1e328dd68b622c284ca"; + }; + } + + { + name = "acorn_globals___acorn_globals_3.1.0.tgz"; + path = fetchurl { + name = "acorn_globals___acorn_globals_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz"; + sha1 = "fd8270f71fbb4996b004fa880ee5d46573a731bf"; + }; + } + + { + name = "acorn___acorn_2.7.0.tgz"; + path = fetchurl { + name = "acorn___acorn_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz"; + sha1 = "ab6e7d9d886aaca8b085bc3312b79a198433f0e7"; + }; + } + + { + name = "acorn___acorn_3.3.0.tgz"; + path = fetchurl { + name = "acorn___acorn_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz"; + sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; + }; + } + + { + 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_2.6.4.tgz"; + path = fetchurl { + name = "acorn___acorn_2.6.4.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-2.6.4.tgz"; + sha1 = "eb1f45b4a43fa31d03701a5ec46f3b52673e90ee"; + }; + } + + { + name = "after___after_0.8.2.tgz"; + path = fetchurl { + name = "after___after_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz"; + sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f"; + }; + } + + { + name = "ajv___ajv_6.12.0.tgz"; + path = fetchurl { + name = "ajv___ajv_6.12.0.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz"; + sha1 = "06d60b96d87b8454a5adaba86e7854da629db4b7"; + }; + } + + { + 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 = "alter___alter_0.2.0.tgz"; + path = fetchurl { + name = "alter___alter_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz"; + sha1 = "c7588808617572034aae62480af26b1d4d1cb3cd"; + }; + } + + { + 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_gray___ansi_gray_0.1.1.tgz"; + path = fetchurl { + name = "ansi_gray___ansi_gray_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz"; + sha1 = "2962cf54ec9792c48510a3deb524436861ef7251"; + }; + } + + { + name = "ansi_regex___ansi_regex_0.2.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz"; + sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9"; + }; + } + + { + name = "ansi_regex___ansi_regex_1.1.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz"; + sha1 = "41c847194646375e6a1a5d10c3ca054ef9fc980d"; + }; + } + + { + 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_1.1.0.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz"; + sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de"; + }; + } + + { + 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_4.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz"; + sha1 = "90ae75c424d008d2624c5bf29ead3177ebfcf359"; + }; + } + + { + name = "ansi_styles___ansi_styles_1.0.0.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz"; + sha1 = "cb102df1c56f5123eab8b67cd7b98027a0279178"; + }; + } + + { + name = "ansi_wrap___ansi_wrap_0.1.0.tgz"; + path = fetchurl { + name = "ansi_wrap___ansi_wrap_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz"; + sha1 = "a82250ddb0015e9a27ca82e82ea603bbfa45efaf"; + }; + } + + { + name = "ansicolors___ansicolors_0.2.1.tgz"; + path = fetchurl { + name = "ansicolors___ansicolors_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz"; + sha1 = "be089599097b74a5c9c4a84a0cdbcdb62bd87aef"; + }; + } + + { + name = "anymatch___anymatch_1.3.2.tgz"; + path = fetchurl { + name = "anymatch___anymatch_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz"; + sha1 = "553dcb8f91e3c889845dfdba34c77721b90b9d7a"; + }; + } + + { + 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 = "archy___archy_1.0.0.tgz"; + path = fetchurl { + name = "archy___archy_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz"; + sha1 = "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"; + }; + } + + { + name = "archy___archy_0.0.2.tgz"; + path = fetchurl { + name = "archy___archy_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/archy/-/archy-0.0.2.tgz"; + sha1 = "910f43bf66141fc335564597abc189df44b3d35e"; + }; + } + + { + 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 = "argparse___argparse_0.1.16.tgz"; + path = fetchurl { + name = "argparse___argparse_0.1.16.tgz"; + url = "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz"; + sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c"; + }; + } + + { + 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_differ___array_differ_1.0.0.tgz"; + path = fetchurl { + name = "array_differ___array_differ_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz"; + sha1 = "eff52e3758249d33be402b8bb8e564bb2b5d4031"; + }; + } + + { + name = "array_each___array_each_1.0.1.tgz"; + path = fetchurl { + name = "array_each___array_each_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz"; + sha1 = "a794af0c05ab1752846ee753a1f211a05ba0c44f"; + }; + } + + { + name = "array_filter___array_filter_0.0.1.tgz"; + path = fetchurl { + name = "array_filter___array_filter_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz"; + sha1 = "7da8cf2e26628ed732803581fd21f67cacd2eeec"; + }; + } + + { + 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_map___array_map_0.0.0.tgz"; + path = fetchurl { + name = "array_map___array_map_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz"; + sha1 = "88a2bab73d1cf7bcd5c1b118a003f66f665fa662"; + }; + } + + { + name = "array_reduce___array_reduce_0.0.0.tgz"; + path = fetchurl { + name = "array_reduce___array_reduce_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz"; + sha1 = "173899d3ffd1c7d9383e4479525dbe278cab5f2b"; + }; + } + + { + name = "array_slice___array_slice_0.2.3.tgz"; + path = fetchurl { + name = "array_slice___array_slice_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz"; + sha1 = "dd3cfb80ed7973a75117cdac69b0b99ec86186f5"; + }; + } + + { + name = "array_slice___array_slice_1.1.0.tgz"; + path = fetchurl { + name = "array_slice___array_slice_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz"; + sha1 = "e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"; + }; + } + + { + 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 = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; + path = fetchurl { + name = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz"; + sha1 = "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"; + }; + } + + { + name = "asap___asap_2.0.6.tgz"; + path = fetchurl { + name = "asap___asap_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"; + sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46"; + }; + } + + { + name = "asn1___asn1_0.1.11.tgz"; + path = fetchurl { + name = "asn1___asn1_0.1.11.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz"; + sha1 = "559be18376d08a4ec4dbe80877d27818639b2df7"; + }; + } + + { + name = "asn1___asn1_0.2.4.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; + sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; + }; + } + + { + 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.1.5.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz"; + sha1 = "ee74009413002d84cec7219c6ac811812e723160"; + }; + } + + { + name = "assert___assert_1.1.2.tgz"; + path = fetchurl { + name = "assert___assert_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/assert/-/assert-1.1.2.tgz"; + sha1 = "adaa04c46bb58c6dd1f294da3eb26e6228eb6e44"; + }; + } + + { + 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 = "astw___astw_2.2.0.tgz"; + path = fetchurl { + name = "astw___astw_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz"; + sha1 = "7bd41784d32493987aeb239b6b4e1c57a873b917"; + }; + } + + { + name = "async_each___async_each_1.0.3.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"; + sha1 = "b727dbf87d7651602f06f4d4ac387f47d91b0cbf"; + }; + } + + { + 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_0.2.10.tgz"; + path = fetchurl { + name = "async___async_0.2.10.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz"; + sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1"; + }; + } + + { + name = "async___async_0.8.0.tgz"; + path = fetchurl { + name = "async___async_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-0.8.0.tgz"; + sha1 = "ee65ec77298c2ff1456bc4418a052d0f06435112"; + }; + } + + { + name = "async___async_0.9.2.tgz"; + path = fetchurl { + name = "async___async_0.9.2.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz"; + sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d"; + }; + } + + { + 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.2.tgz"; + path = fetchurl { + name = "atob___atob_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; + sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; + }; + } + + { + name = "aws_sign2___aws_sign2_0.5.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz"; + sha1 = "c57103f7a17fc037f02d7c2e64b602ea223f7d63"; + }; + } + + { + 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 = "aws_sign___aws_sign_0.3.0.tgz"; + path = fetchurl { + name = "aws_sign___aws_sign_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign/-/aws-sign-0.3.0.tgz"; + sha1 = "3d81ca69b474b1e16518728b51c24ff0bbedc6e9"; + }; + } + + { + name = "aws4___aws4_1.9.1.tgz"; + path = fetchurl { + name = "aws4___aws4_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz"; + sha1 = "7e33d8f7d449b3f673cd72deb9abdc552dbe528e"; + }; + } + + { + 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_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 = "backo2___backo2_1.0.2.tgz"; + path = fetchurl { + name = "backo2___backo2_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz"; + sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947"; + }; + } + + { + 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_arraybuffer___base64_arraybuffer_0.1.5.tgz"; + path = fetchurl { + name = "base64_arraybuffer___base64_arraybuffer_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz"; + sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8"; + }; + } + + { + name = "base64_js___base64_js_0.0.8.tgz"; + path = fetchurl { + name = "base64_js___base64_js_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz"; + sha1 = "1101e9544f4a76b1bc3b26d452ca96d7a35e7978"; + }; + } + + { + name = "base64id___base64id_1.0.0.tgz"; + path = fetchurl { + name = "base64id___base64id_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz"; + sha1 = "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"; + }; + } + + { + 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.5.3.tgz"; + path = fetchurl { + name = "batch___batch_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz"; + sha1 = "3f3414f380321743bfc1042f9a83ff1d5824d464"; + }; + } + + { + 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 = "beeper___beeper_1.1.1.tgz"; + path = fetchurl { + name = "beeper___beeper_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz"; + sha1 = "e6d5ea8c5dad001304a70b22638447f69cb2f809"; + }; + } + + { + name = "better_assert___better_assert_1.0.2.tgz"; + path = fetchurl { + name = "better_assert___better_assert_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz"; + sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522"; + }; + } + + { + name = "binary_extensions___binary_extensions_1.13.1.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.13.1.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"; + sha1 = "598afe54755b2868a5330d2aff9d4ebb53209b65"; + }; + } + + { + name = "binary___binary_0.3.0.tgz"; + path = fetchurl { + name = "binary___binary_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz"; + sha1 = "9f60553bc5ce8c3386f3b553cff47462adecaa79"; + }; + } + + { + name = "binaryextensions___binaryextensions_1.0.1.tgz"; + path = fetchurl { + name = "binaryextensions___binaryextensions_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz"; + sha1 = "1e637488b35b58bda5f4774bf96a5212a8c90755"; + }; + } + + { + name = "bindings___bindings_1.5.0.tgz"; + path = fetchurl { + name = "bindings___bindings_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"; + sha1 = "10353c9e945334bc0511a6d90b38fbc7c9c504df"; + }; + } + + { + name = "bl___bl_0.9.5.tgz"; + path = fetchurl { + name = "bl___bl_0.9.5.tgz"; + url = "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz"; + sha1 = "c06b797af085ea00bc527afc8efcf11de2232054"; + }; + } + + { + name = "blob___blob_0.0.4.tgz"; + path = fetchurl { + name = "blob___blob_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz"; + sha1 = "bcf13052ca54463f30f9fc7e95b9a47630a94921"; + }; + } + + { + 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 = "bluebird___bluebird_2.11.0.tgz"; + path = fetchurl { + name = "bluebird___bluebird_2.11.0.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz"; + sha1 = "534b9033c022c9579c56ba3b3e5a5caafbb650e1"; + }; + } + + { + name = "body_parser___body_parser_1.19.0.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.19.0.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"; + sha1 = "96b2709e57c9c4e09a6fd66a8fd979844f69f08a"; + }; + } + + { + name = "body_parser___body_parser_1.14.2.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.14.2.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz"; + sha1 = "1015cb1fe2c443858259581db53332f8d0cf50f9"; + }; + } + + { + name = "boom___boom_0.4.2.tgz"; + path = fetchurl { + name = "boom___boom_0.4.2.tgz"; + url = "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz"; + sha1 = "7a636e9ded4efcefb19cef4947a3c67dfaee911b"; + }; + } + + { + name = "bower_config___bower_config_0.5.3.tgz"; + path = fetchurl { + name = "bower_config___bower_config_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/bower-config/-/bower-config-0.5.3.tgz"; + sha1 = "98fc5b41a87870ef9cbb9297635cf81f5505fdb1"; + }; + } + + { + name = "bower_endpoint_parser___bower_endpoint_parser_0.2.2.tgz"; + path = fetchurl { + name = "bower_endpoint_parser___bower_endpoint_parser_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz"; + sha1 = "00b565adbfab6f2d35addde977e97962acbcb3f6"; + }; + } + + { + name = "bower_json___bower_json_0.4.0.tgz"; + path = fetchurl { + name = "bower_json___bower_json_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/bower-json/-/bower-json-0.4.0.tgz"; + sha1 = "a99c3ccf416ef0590ed0ded252c760f1c6d93766"; + }; + } + + { + name = "bower_logger___bower_logger_0.2.2.tgz"; + path = fetchurl { + name = "bower_logger___bower_logger_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/bower-logger/-/bower-logger-0.2.2.tgz"; + sha1 = "39be07e979b2fc8e03a94634205ed9422373d381"; + }; + } + + { + name = "bower_registry_client___bower_registry_client_0.2.4.tgz"; + path = fetchurl { + name = "bower_registry_client___bower_registry_client_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/bower-registry-client/-/bower-registry-client-0.2.4.tgz"; + sha1 = "269fc7e898b627fb939d1144a593254d7fbbeebc"; + }; + } + + { + name = "bower___bower_1.3.8.tgz"; + path = fetchurl { + name = "bower___bower_1.3.8.tgz"; + url = "https://registry.yarnpkg.com/bower/-/bower-1.3.8.tgz"; + sha1 = "afa3338a8a88a6e084c38112ea4a15998cbee3e6"; + }; + } + + { + 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_0.1.5.tgz"; + path = fetchurl { + name = "braces___braces_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz"; + sha1 = "c085711085291d8b75fdd74eab0f8597280711e6"; + }; + } + + { + 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 = "browser_pack___browser_pack_2.0.1.tgz"; + path = fetchurl { + name = "browser_pack___browser_pack_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/browser-pack/-/browser-pack-2.0.1.tgz"; + sha1 = "5d1c527f56c582677411c4db2a128648ff6bf150"; + }; + } + + { + name = "browser_resolve___browser_resolve_1.2.4.tgz"; + path = fetchurl { + name = "browser_resolve___browser_resolve_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.2.4.tgz"; + sha1 = "59ae7820a82955ecd32f5fb7c468ac21c4723806"; + }; + } + + { + name = "browserify_shim___browserify_shim_2.0.10.tgz"; + path = fetchurl { + name = "browserify_shim___browserify_shim_2.0.10.tgz"; + url = "https://registry.yarnpkg.com/browserify-shim/-/browserify-shim-2.0.10.tgz"; + sha1 = "74a0ed5b9b784a5a287906513a896d31f54a84b8"; + }; + } + + { + name = "browserify_zlib___browserify_zlib_0.1.4.tgz"; + path = fetchurl { + name = "browserify_zlib___browserify_zlib_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz"; + sha1 = "bb35f8a519f600e0fa6b8485241c979d0141fb2d"; + }; + } + + { + name = "browserify___browserify_3.46.1.tgz"; + path = fetchurl { + name = "browserify___browserify_3.46.1.tgz"; + url = "https://registry.yarnpkg.com/browserify/-/browserify-3.46.1.tgz"; + sha1 = "2c2e4a7f2f408178e78c223b5b57b37c2185ad8e"; + }; + } + + { + name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; + path = fetchurl { + name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz"; + sha1 = "bd7dc26ae2972d0eda253be061dba992349c19f0"; + }; + } + + { + name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; + path = fetchurl { + name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz"; + sha1 = "890dd90d923a873e08e10e5fd51a57e5b7cce0ec"; + }; + } + + { + name = "buffer_fill___buffer_fill_1.0.0.tgz"; + path = fetchurl { + name = "buffer_fill___buffer_fill_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz"; + sha1 = "f8f78b76789888ef39f205cd637f68e702122b2c"; + }; + } + + { + name = "buffer___buffer_2.1.13.tgz"; + path = fetchurl { + name = "buffer___buffer_2.1.13.tgz"; + url = "https://registry.yarnpkg.com/buffer/-/buffer-2.1.13.tgz"; + sha1 = "c88838ebf79f30b8b4a707788470bea8a62c2355"; + }; + } + + { + name = "buffers___buffers_0.1.1.tgz"; + path = fetchurl { + name = "buffers___buffers_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz"; + sha1 = "b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"; + }; + } + + { + name = "bufferstreams___bufferstreams_0.0.2.tgz"; + path = fetchurl { + name = "bufferstreams___bufferstreams_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-0.0.2.tgz"; + sha1 = "7ce8dff968bbac00b9e90158a2c41456f740abdd"; + }; + } + + { + name = "builtins___builtins_0.0.7.tgz"; + path = fetchurl { + name = "builtins___builtins_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz"; + sha1 = "355219cd6cf18dbe7c01cc7fd2dce765cfdc549a"; + }; + } + + { + name = "bytes___bytes_2.2.0.tgz"; + path = fetchurl { + name = "bytes___bytes_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz"; + sha1 = "fd35464a403f6f9117c2de3609ecff9cae000588"; + }; + } + + { + name = "bytes___bytes_2.4.0.tgz"; + path = fetchurl { + name = "bytes___bytes_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz"; + sha1 = "7d97196f9d5baf7f6935e25985549edd2a6c2339"; + }; + } + + { + name = "bytes___bytes_3.1.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"; + sha1 = "f6cf7933a360e0588fa9fde85651cdc7f805d1f6"; + }; + } + + { + 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 = "callsite___callsite_1.0.0.tgz"; + path = fetchurl { + name = "callsite___callsite_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz"; + sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20"; + }; + } + + { + 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 = "cardinal___cardinal_0.4.4.tgz"; + path = fetchurl { + name = "cardinal___cardinal_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz"; + sha1 = "ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2"; + }; + } + + { + 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 = "caseless___caseless_0.8.0.tgz"; + path = fetchurl { + name = "caseless___caseless_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/caseless/-/caseless-0.8.0.tgz"; + sha1 = "5bca2881d41437f54b2407ebe34888c7b9ad4f7d"; + }; + } + + { + 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 = "chainsaw___chainsaw_0.1.0.tgz"; + path = fetchurl { + name = "chainsaw___chainsaw_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz"; + sha1 = "5eab50b28afe58074d0d58291388828b5e5fbc98"; + }; + } + + { + name = "chalk___chalk_3.0.0.tgz"; + path = fetchurl { + name = "chalk___chalk_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz"; + sha1 = "3f73c2bf526591f574cc492c51e2456349f844e4"; + }; + } + + { + name = "chalk___chalk_0.5.1.tgz"; + path = fetchurl { + name = "chalk___chalk_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz"; + sha1 = "663b3a648b68b55d04690d49167aa837858f2174"; + }; + } + + { + 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_0.4.0.tgz"; + path = fetchurl { + name = "chalk___chalk_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz"; + sha1 = "5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"; + }; + } + + { + name = "character_parser___character_parser_2.2.0.tgz"; + path = fetchurl { + name = "character_parser___character_parser_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz"; + sha1 = "c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"; + }; + } + + { + name = "chmodr___chmodr_0.1.2.tgz"; + path = fetchurl { + name = "chmodr___chmodr_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/chmodr/-/chmodr-0.1.2.tgz"; + sha1 = "0dd8041c915087575bec383b47827bb7576a4fd6"; + }; + } + + { + name = "chokidar___chokidar_1.7.0.tgz"; + path = fetchurl { + name = "chokidar___chokidar_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz"; + sha1 = "798e689778151c8076b4b360e5edd28cda2bb468"; + }; + } + + { + name = "chownr___chownr_1.1.4.tgz"; + path = fetchurl { + name = "chownr___chownr_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"; + sha1 = "6fc9d7b42d32a583596337666e7d08084da2cc6b"; + }; + } + + { + 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_css___clean_css_2.2.23.tgz"; + path = fetchurl { + name = "clean_css___clean_css_2.2.23.tgz"; + url = "https://registry.yarnpkg.com/clean-css/-/clean-css-2.2.23.tgz"; + sha1 = "0590b5478b516c4903edc2d89bd3fdbdd286328c"; + }; + } + + { + name = "clean_css___clean_css_4.2.3.tgz"; + path = fetchurl { + name = "clean_css___clean_css_4.2.3.tgz"; + url = "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz"; + sha1 = "507b5de7d97b48ee53d84adb0160ff6216380f78"; + }; + } + + { + name = "cli_color___cli_color_0.2.3.tgz"; + path = fetchurl { + name = "cli_color___cli_color_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/cli-color/-/cli-color-0.2.3.tgz"; + sha1 = "0a25ceae5a6a1602be7f77d28563c36700274e88"; + }; + } + + { + name = "cli_color___cli_color_0.3.3.tgz"; + path = fetchurl { + name = "cli_color___cli_color_0.3.3.tgz"; + url = "https://registry.yarnpkg.com/cli-color/-/cli-color-0.3.3.tgz"; + sha1 = "12d5bdd158ff8a0b0db401198913c03df069f6f5"; + }; + } + + { + 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_buffer___clone_buffer_1.0.0.tgz"; + path = fetchurl { + name = "clone_buffer___clone_buffer_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz"; + sha1 = "e3e25b207ac4e701af721e2cb5a16792cac3dc58"; + }; + } + + { + name = "clone_stats___clone_stats_0.0.1.tgz"; + path = fetchurl { + name = "clone_stats___clone_stats_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz"; + sha1 = "b88f94a82cf38b8791d58046ea4029ad88ca99d1"; + }; + } + + { + name = "clone_stats___clone_stats_1.0.0.tgz"; + path = fetchurl { + name = "clone_stats___clone_stats_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz"; + sha1 = "b3782dff8bb5474e18b9b6bf0fdfe782f8777680"; + }; + } + + { + name = "clone___clone_0.2.0.tgz"; + path = fetchurl { + name = "clone___clone_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz"; + sha1 = "c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"; + }; + } + + { + 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 = "clone___clone_2.1.2.tgz"; + path = fetchurl { + name = "clone___clone_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz"; + sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f"; + }; + } + + { + name = "cloneable_readable___cloneable_readable_1.1.3.tgz"; + path = fetchurl { + name = "cloneable_readable___cloneable_readable_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz"; + sha1 = "120a00cb053bfb63a222e709f9683ea2e11d8cec"; + }; + } + + { + 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 = "coffee_script___coffee_script_1.12.7.tgz"; + path = fetchurl { + name = "coffee_script___coffee_script_1.12.7.tgz"; + url = "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz"; + sha1 = "c05dae0cb79591d05b3070a8433a98c9a89ccc53"; + }; + } + + { + name = "coffee_script___coffee_script_1.10.0.tgz"; + path = fetchurl { + name = "coffee_script___coffee_script_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.10.0.tgz"; + sha1 = "12938bcf9be1948fa006f92e0c4c9e81705108c0"; + }; + } + + { + name = "coffeescript___coffeescript_1.12.7.tgz"; + path = fetchurl { + name = "coffeescript___coffeescript_1.12.7.tgz"; + url = "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.12.7.tgz"; + sha1 = "e57ee4c4867cf7f606bfc4a0f2d550c0981ddd27"; + }; + } + + { + 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_2.0.1.tgz"; + path = fetchurl { + name = "color_convert___color_convert_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"; + sha1 = "72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"; + }; + } + + { + name = "color_name___color_name_1.1.4.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"; + sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2"; + }; + } + + { + name = "color_support___color_support_1.1.3.tgz"; + path = fetchurl { + name = "color_support___color_support_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz"; + sha1 = "93834379a1cc9a0c61f82f52f0d04322251bd5a2"; + }; + } + + { + name = "colors___colors_1.4.0.tgz"; + path = fetchurl { + name = "colors___colors_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz"; + sha1 = "c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"; + }; + } + + { + name = "combine_source_map___combine_source_map_0.3.0.tgz"; + path = fetchurl { + name = "combine_source_map___combine_source_map_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.3.0.tgz"; + sha1 = "d9e74f593d9cd43807312cb5d846d451efaa9eb7"; + }; + } + + { + name = "combined_stream___combined_stream_1.0.8.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.8.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"; + sha1 = "c3d45a8b34fd730631a110a8a2520682b31d5a7f"; + }; + } + + { + name = "combined_stream___combined_stream_0.0.7.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz"; + sha1 = "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f"; + }; + } + + { + name = "commander___commander_2.2.0.tgz"; + path = fetchurl { + name = "commander___commander_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.2.0.tgz"; + sha1 = "175ad4b9317f3ff615f201c1e57224f55a3e91df"; + }; + } + + { + name = "commander___commander_2.20.3.tgz"; + path = fetchurl { + name = "commander___commander_2.20.3.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"; + sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33"; + }; + } + + { + name = "commondir___commondir_0.0.1.tgz"; + path = fetchurl { + name = "commondir___commondir_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/commondir/-/commondir-0.0.1.tgz"; + sha1 = "89f00fdcd51b519c578733fec563e6a6da7f5be2"; + }; + } + + { + name = "component_bind___component_bind_1.0.0.tgz"; + path = fetchurl { + name = "component_bind___component_bind_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz"; + sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"; + }; + } + + { + name = "component_emitter___component_emitter_1.1.2.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz"; + sha1 = "296594f2753daa63996d2af08d15a95116c9aec3"; + }; + } + + { + 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 = "component_emitter___component_emitter_1.3.0.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"; + sha1 = "16e4070fba8ae29b679f2215853ee181ab2eabc0"; + }; + } + + { + name = "component_inherit___component_inherit_0.0.3.tgz"; + path = fetchurl { + name = "component_inherit___component_inherit_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz"; + sha1 = "645fc4adf58b72b649d5cae65135619db26ff143"; + }; + } + + { + 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 = "concat_stream___concat_stream_1.4.11.tgz"; + path = fetchurl { + name = "concat_stream___concat_stream_1.4.11.tgz"; + url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.11.tgz"; + sha1 = "1dc9f666f2621da9c618b1e7f8f3b2ff70b5f76f"; + }; + } + + { + name = "concat_with_sourcemaps___concat_with_sourcemaps_1.1.0.tgz"; + path = fetchurl { + name = "concat_with_sourcemaps___concat_with_sourcemaps_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz"; + sha1 = "d4ea93f05ae25790951b99e7b3b09e3908a4082e"; + }; + } + + { + name = "configstore___configstore_0.3.2.tgz"; + path = fetchurl { + name = "configstore___configstore_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/configstore/-/configstore-0.3.2.tgz"; + sha1 = "25e4c16c3768abf75c5a65bc61761f495055b459"; + }; + } + + { + name = "configstore___configstore_0.2.3.tgz"; + path = fetchurl { + name = "configstore___configstore_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/configstore/-/configstore-0.2.3.tgz"; + sha1 = "b1bdc4ad823a25423dc15d220fcc1ae1d7efab02"; + }; + } + + { + name = "connect___connect_3.7.0.tgz"; + path = fetchurl { + name = "connect___connect_3.7.0.tgz"; + url = "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz"; + sha1 = "5d49348910caa5e07a01800b030d0c35f20484f8"; + }; + } + + { + name = "console_browserify___console_browserify_1.0.3.tgz"; + path = fetchurl { + name = "console_browserify___console_browserify_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.0.3.tgz"; + sha1 = "d3898d2c3a93102f364197f8874b4f92b5286a8e"; + }; + } + + { + 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 = "constantinople___constantinople_3.1.2.tgz"; + path = fetchurl { + name = "constantinople___constantinople_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz"; + sha1 = "d45ed724f57d3d10500017a7d3a889c1381ae647"; + }; + } + + { + name = "constants_browserify___constants_browserify_0.0.1.tgz"; + path = fetchurl { + name = "constants_browserify___constants_browserify_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz"; + sha1 = "92577db527ba6c4cf0a4568d84bc031f441e21f2"; + }; + } + + { + 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.4.1.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.4.1.tgz"; + sha1 = "f919a0099fe31f80fc5a1d0eb303161b394070c7"; + }; + } + + { + name = "convert_source_map___convert_source_map_1.7.0.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"; + sha1 = "17a2cb882d7f77d3490585e2ce6c524424a3a442"; + }; + } + + { + 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.1.3.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz"; + sha1 = "4829c877e9fe49b3161f3bf3673888e204699860"; + }; + } + + { + name = "cookie_jar___cookie_jar_0.3.0.tgz"; + path = fetchurl { + name = "cookie_jar___cookie_jar_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/cookie-jar/-/cookie-jar-0.3.0.tgz"; + sha1 = "bc9a27d4e2b97e186cd57c9e2063cb99fa68cccc"; + }; + } + + { + 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.6.11.tgz"; + path = fetchurl { + name = "core_js___core_js_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz"; + sha1 = "38831469f9922bded8ee21c9dc46985e0399308c"; + }; + } + + { + 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 = "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 = "cryptiles___cryptiles_0.2.2.tgz"; + path = fetchurl { + name = "cryptiles___cryptiles_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz"; + sha1 = "ed91ff1f17ad13d3748288594f8a48a0d26f325c"; + }; + } + + { + name = "crypto_browserify___crypto_browserify_1.0.9.tgz"; + path = fetchurl { + name = "crypto_browserify___crypto_browserify_1.0.9.tgz"; + url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz"; + sha1 = "cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0"; + }; + } + + { + name = "ctype___ctype_0.5.3.tgz"; + path = fetchurl { + name = "ctype___ctype_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz"; + sha1 = "82c18c2461f74114ef16c135224ad0b9144ca12f"; + }; + } + + { + 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 = "custom_event___custom_event_1.0.1.tgz"; + path = fetchurl { + name = "custom_event___custom_event_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz"; + sha1 = "5d02a46850adf1b4a317946a3928fccb5bfd0425"; + }; + } + + { + name = "d___d_1.0.1.tgz"; + path = fetchurl { + name = "d___d_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz"; + sha1 = "8698095372d58dbee346ffd0c7093f99f8f9eb5a"; + }; + } + + { + name = "d___d_0.1.1.tgz"; + path = fetchurl { + name = "d___d_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz"; + sha1 = "da184c535d18d8ee7ba2aa229b914009fae11309"; + }; + } + + { + 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 = "dateformat___dateformat_1.0.12.tgz"; + path = fetchurl { + name = "dateformat___dateformat_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz"; + sha1 = "9f124b67594c937ff706932e4a642cca8dbbfee9"; + }; + } + + { + name = "dateformat___dateformat_2.2.0.tgz"; + path = fetchurl { + name = "dateformat___dateformat_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz"; + sha1 = "4065e2013cf9fb916ddfd82efb506ad4c6769062"; + }; + } + + { + name = "deap___deap_1.0.1.tgz"; + path = fetchurl { + name = "deap___deap_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/deap/-/deap-1.0.1.tgz"; + sha1 = "0646e9e1a095ffe8a9e404d68d1f76dcf57e66fb"; + }; + } + + { + name = "debug___debug_2.2.0.tgz"; + path = fetchurl { + name = "debug___debug_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz"; + sha1 = "f87057e995b1a1f6ae6a4960664137bc56f039da"; + }; + } + + { + name = "debug___debug_2.3.3.tgz"; + path = fetchurl { + name = "debug___debug_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz"; + sha1 = "40c453e67e6e13c901ddec317af8986cda9eff8c"; + }; + } + + { + 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.2.6.tgz"; + path = fetchurl { + name = "debug___debug_3.2.6.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; + sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; + }; + } + + { + 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 = "decompress_zip___decompress_zip_0.0.8.tgz"; + path = fetchurl { + name = "decompress_zip___decompress_zip_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/decompress-zip/-/decompress-zip-0.0.8.tgz"; + sha1 = "4a265b22c7b209d7b24fa66f2b2dfbced59044f3"; + }; + } + + { + name = "deep_equal___deep_equal_0.1.2.tgz"; + path = fetchurl { + name = "deep_equal___deep_equal_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.1.2.tgz"; + sha1 = "b246c2b80a570a47c11be1d9bd1070ec878b87ce"; + }; + } + + { + 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 = "deep_extend___deep_extend_0.2.11.tgz"; + path = fetchurl { + name = "deep_extend___deep_extend_0.2.11.tgz"; + url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.2.11.tgz"; + sha1 = "7a16ba69729132340506170494bc83f7076fe08f"; + }; + } + + { + name = "deep_is___deep_is_0.1.3.tgz"; + path = fetchurl { + name = "deep_is___deep_is_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + } + + { + name = "defaults___defaults_1.0.3.tgz"; + path = fetchurl { + name = "defaults___defaults_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + } + + { + 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_0.0.0.tgz"; + path = fetchurl { + name = "defined___defined_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/defined/-/defined-0.0.0.tgz"; + sha1 = "f35eea7d705e933baf13b2f03b3f83d921403b3e"; + }; + } + + { + name = "delayed_stream___delayed_stream_0.0.5.tgz"; + path = fetchurl { + name = "delayed_stream___delayed_stream_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz"; + sha1 = "d4b1f43a93e8296dfe02694f4680bc37a313c73f"; + }; + } + + { + 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.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 = "deprecated___deprecated_0.0.1.tgz"; + path = fetchurl { + name = "deprecated___deprecated_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz"; + sha1 = "f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"; + }; + } + + { + name = "deps_sort___deps_sort_0.1.2.tgz"; + path = fetchurl { + name = "deps_sort___deps_sort_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/deps-sort/-/deps-sort-0.1.2.tgz"; + sha1 = "daa2fb614a17c9637d801e2f55339ae370f3611a"; + }; + } + + { + name = "derequire___derequire_0.8.0.tgz"; + path = fetchurl { + name = "derequire___derequire_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/derequire/-/derequire-0.8.0.tgz"; + sha1 = "c1f7f1da2cede44adede047378f03f444e9c4c0d"; + }; + } + + { + 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_file___detect_file_1.0.0.tgz"; + path = fetchurl { + name = "detect_file___detect_file_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz"; + sha1 = "f0d66d03672a825cb1b73bdb3fe62310c8e552b7"; + }; + } + + { + 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 = "detective___detective_3.1.0.tgz"; + path = fetchurl { + name = "detective___detective_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/detective/-/detective-3.1.0.tgz"; + sha1 = "77782444ab752b88ca1be2e9d0a0395f1da25eed"; + }; + } + + { + name = "di___di_0.0.1.tgz"; + path = fetchurl { + name = "di___di_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz"; + sha1 = "806649326ceaa7caa3306d75d985ea2748ba913c"; + }; + } + + { + name = "doctypes___doctypes_1.1.0.tgz"; + path = fetchurl { + name = "doctypes___doctypes_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz"; + sha1 = "ea80b106a87538774e8a3a4a5afe293de489e0a9"; + }; + } + + { + name = "dom_serialize___dom_serialize_2.2.1.tgz"; + path = fetchurl { + name = "dom_serialize___dom_serialize_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz"; + sha1 = "562ae8999f44be5ea3076f5419dcd59eb43ac95b"; + }; + } + + { + name = "domain_browser___domain_browser_1.1.7.tgz"; + path = fetchurl { + name = "domain_browser___domain_browser_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz"; + sha1 = "867aa4b093faa05f1de08c06f4d7b21fdf8698bc"; + }; + } + + { + name = "duplexer2___duplexer2_0.0.2.tgz"; + path = fetchurl { + name = "duplexer2___duplexer2_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz"; + sha1 = "c614dcf67e2fb14995a91711e5a617e8a60a31db"; + }; + } + + { + name = "duplexer___duplexer_0.1.1.tgz"; + path = fetchurl { + name = "duplexer___duplexer_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz"; + sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1"; + }; + } + + { + name = "duplexify___duplexify_3.7.1.tgz"; + path = fetchurl { + name = "duplexify___duplexify_3.7.1.tgz"; + url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"; + sha1 = "2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"; + }; + } + + { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + } + + { + 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 = "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 = "end_of_stream___end_of_stream_1.4.4.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_1.4.4.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"; + sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"; + }; + } + + { + name = "end_of_stream___end_of_stream_0.1.5.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz"; + sha1 = "8e177206c3c80837d85632e8b9359dfe8b2f6eaf"; + }; + } + + { + name = "engine.io_client___engine.io_client_1.8.5.tgz"; + path = fetchurl { + name = "engine.io_client___engine.io_client_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.5.tgz"; + sha1 = "fe7fb60cb0dcf2fa2859489329cb5968dedeb11f"; + }; + } + + { + name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; + path = fetchurl { + name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz"; + sha1 = "937b079f0007d0893ec56d46cb220b8cb435220a"; + }; + } + + { + name = "engine.io___engine.io_1.8.5.tgz"; + path = fetchurl { + name = "engine.io___engine.io_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.5.tgz"; + sha1 = "4ebe5e75c6dc123dee4afdce6e5fdced21eb93f6"; + }; + } + + { + name = "ent___ent_2.2.0.tgz"; + path = fetchurl { + name = "ent___ent_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz"; + sha1 = "e964219325a21d05f44466a2f686ed6ce5f5dd1d"; + }; + } + + { + 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 = "es5_ext___es5_ext_0.10.53.tgz"; + path = fetchurl { + name = "es5_ext___es5_ext_0.10.53.tgz"; + url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz"; + sha1 = "93c5a3acfdbef275220ad72644ad02ee18368de1"; + }; + } + + { + name = "es5_ext___es5_ext_0.9.2.tgz"; + path = fetchurl { + name = "es5_ext___es5_ext_0.9.2.tgz"; + url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.9.2.tgz"; + sha1 = "d2e309d1f223b0718648835acf5b8823a8061f8a"; + }; + } + + { + name = "es6_iterator___es6_iterator_0.1.3.tgz"; + path = fetchurl { + name = "es6_iterator___es6_iterator_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-0.1.3.tgz"; + sha1 = "d6f58b8c4fc413c249b4baa19768f8e4d7c8944e"; + }; + } + + { + 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_symbol___es6_symbol_3.1.3.tgz"; + path = fetchurl { + name = "es6_symbol___es6_symbol_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz"; + sha1 = "bad5d3c1bcdac28269f4cb331e431c78ac705d18"; + }; + } + + { + name = "es6_symbol___es6_symbol_2.0.1.tgz"; + path = fetchurl { + name = "es6_symbol___es6_symbol_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-2.0.1.tgz"; + sha1 = "761b5c67cfd4f1d18afb234f691d678682cb3bf3"; + }; + } + + { + name = "es6_weak_map___es6_weak_map_0.1.4.tgz"; + path = fetchurl { + name = "es6_weak_map___es6_weak_map_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-0.1.4.tgz"; + sha1 = "706cef9e99aa236ba7766c239c8b9e286ea7d228"; + }; + } + + { + 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 = "escodegen___escodegen_1.8.1.tgz"; + path = fetchurl { + name = "escodegen___escodegen_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz"; + sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018"; + }; + } + + { + name = "escodegen___escodegen_1.1.0.tgz"; + path = fetchurl { + name = "escodegen___escodegen_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/escodegen/-/escodegen-1.1.0.tgz"; + sha1 = "c663923f6e20aad48d0c0fa49f31c6d4f49360cf"; + }; + } + + { + name = "escope___escope_0.0.16.tgz"; + path = fetchurl { + name = "escope___escope_0.0.16.tgz"; + url = "https://registry.yarnpkg.com/escope/-/escope-0.0.16.tgz"; + sha1 = "418c7a0afca721dafe659193fd986283e746538f"; + }; + } + + { + name = "esprima_fb___esprima_fb_3001.0001.0000_dev_harmony_fb.tgz"; + path = fetchurl { + name = "esprima_fb___esprima_fb_3001.0001.0000_dev_harmony_fb.tgz"; + url = "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"; + sha1 = "b77d37abcd38ea0b77426bb8bc2922ce6b426411"; + }; + } + + { + 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 = "esprima___esprima_4.0.1.tgz"; + path = fetchurl { + name = "esprima___esprima_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; + sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; + }; + } + + { + name = "esprima___esprima_1.0.4.tgz"; + path = fetchurl { + name = "esprima___esprima_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz"; + sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad"; + }; + } + + { + name = "esrefactor___esrefactor_0.1.0.tgz"; + path = fetchurl { + name = "esrefactor___esrefactor_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/esrefactor/-/esrefactor-0.1.0.tgz"; + sha1 = "d142795a282339ab81e936b5b7a21b11bf197b13"; + }; + } + + { + name = "estraverse___estraverse_5.0.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz"; + sha1 = "ac81750b482c11cca26e4b07e83ed8f75fbcdc22"; + }; + } + + { + name = "estraverse___estraverse_1.9.3.tgz"; + path = fetchurl { + name = "estraverse___estraverse_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz"; + sha1 = "af67f2dc922582415950926091a4005d29c9bb44"; + }; + } + + { + name = "estraverse___estraverse_0.0.4.tgz"; + path = fetchurl { + name = "estraverse___estraverse_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-0.0.4.tgz"; + sha1 = "01a0932dfee574684a598af5a67c3bf9b6428db2"; + }; + } + + { + name = "estraverse___estraverse_1.5.1.tgz"; + path = fetchurl { + name = "estraverse___estraverse_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz"; + sha1 = "867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71"; + }; + } + + { + name = "esutils___esutils_2.0.3.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"; + sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64"; + }; + } + + { + name = "esutils___esutils_1.0.0.tgz"; + path = fetchurl { + name = "esutils___esutils_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz"; + sha1 = "8151d358e20c8acc7fb745e7472c0025fe496570"; + }; + } + + { + name = "etag___etag_1.7.0.tgz"; + path = fetchurl { + name = "etag___etag_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz"; + sha1 = "03d30b5f67dd6e632d2945d30d6652731a34d5d8"; + }; + } + + { + name = "event_emitter___event_emitter_0.2.2.tgz"; + path = fetchurl { + name = "event_emitter___event_emitter_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.2.2.tgz"; + sha1 = "c81e3724eb55407c5a0d5ee3299411f700f54291"; + }; + } + + { + 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 = "event_stream___event_stream_4.0.1.tgz"; + path = fetchurl { + name = "event_stream___event_stream_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/event-stream/-/event-stream-4.0.1.tgz"; + sha1 = "4092808ec995d0dd75ea4580c1df6a74db2cde65"; + }; + } + + { + name = "event_stream___event_stream_3.3.2.tgz"; + path = fetchurl { + name = "event_stream___event_stream_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.2.tgz"; + sha1 = "3cc310feb1f28d2f62b2a085d736a9ef566378b8"; + }; + } + + { + name = "event_stream___event_stream_3.3.5.tgz"; + path = fetchurl { + name = "event_stream___event_stream_3.3.5.tgz"; + url = "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.5.tgz"; + sha1 = "e5dd8989543630d94c6cf4d657120341fa31636b"; + }; + } + + { + name = "eventemitter3___eventemitter3_4.0.0.tgz"; + path = fetchurl { + name = "eventemitter3___eventemitter3_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz"; + sha1 = "d65176163887ee59f386d64c82610b696a4a74eb"; + }; + } + + { + name = "events___events_1.0.2.tgz"; + path = fetchurl { + name = "events___events_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/events/-/events-1.0.2.tgz"; + sha1 = "75849dcfe93d10fb057c30055afdbd51d06a8e24"; + }; + } + + { + name = "expand_braces___expand_braces_0.1.2.tgz"; + path = fetchurl { + name = "expand_braces___expand_braces_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz"; + sha1 = "488b1d1d2451cb3d3a6b192cfc030f44c5855fea"; + }; + } + + { + 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_0.1.1.tgz"; + path = fetchurl { + name = "expand_range___expand_range_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz"; + sha1 = "4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"; + }; + } + + { + 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 = "expand_tilde___expand_tilde_2.0.2.tgz"; + path = fetchurl { + name = "expand_tilde___expand_tilde_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz"; + sha1 = "97e801aa052df02454de46b02bf621642cdc8502"; + }; + } + + { + name = "ext___ext_1.4.0.tgz"; + path = fetchurl { + name = "ext___ext_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz"; + sha1 = "89ae7a07158f79d35517882904324077e4379244"; + }; + } + + { + 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 = "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 = "fancy_log___fancy_log_1.3.3.tgz"; + path = fetchurl { + name = "fancy_log___fancy_log_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz"; + sha1 = "dbc19154f558690150a23953a0adbd035be45fc7"; + }; + } + + { + name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; + sha1 = "545145077c501491e33b15ec408c294376e94ae4"; + }; + } + + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; + sha1 = "874bf69c6f404c2b5d99c481341399fd55892633"; + }; + } + + { + 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 = "faye_websocket___faye_websocket_0.7.3.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.7.3.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz"; + sha1 = "cc4074c7f4a4dfd03af54dd65c354b135132ce11"; + }; + } + + { + name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; + path = fetchurl { + name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; + sha1 = "553a7b8446ff6f684359c445f1e37a05dacc33dd"; + }; + } + + { + 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.2.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz"; + sha1 = "b7e7d000ffd11938d0fdb053506f6ebabe9f587d"; + }; + } + + { + name = "find_index___find_index_0.1.1.tgz"; + path = fetchurl { + name = "find_index___find_index_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz"; + sha1 = "675d358b2ca3892d795a1ab47232f8b6e2e0dde4"; + }; + } + + { + 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 = "findup_sync___findup_sync_2.0.0.tgz"; + path = fetchurl { + name = "findup_sync___findup_sync_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz"; + sha1 = "9326b1488c22d1a6088650a86901b2d9a90a2cbc"; + }; + } + + { + name = "fined___fined_1.2.0.tgz"; + path = fetchurl { + name = "fined___fined_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz"; + sha1 = "d00beccf1aa2b475d16d423b0238b713a2c4a37b"; + }; + } + + { + name = "first_chunk_stream___first_chunk_stream_1.0.0.tgz"; + path = fetchurl { + name = "first_chunk_stream___first_chunk_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz"; + sha1 = "59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"; + }; + } + + { + name = "fixtures2js___fixtures2js_0.0.0.tgz"; + path = fetchurl { + name = "fixtures2js___fixtures2js_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/fixtures2js/-/fixtures2js-0.0.0.tgz"; + sha1 = "602f7964c5b2963fe73224c8e4a3607d75c1b34f"; + }; + } + + { + name = "flagged_respawn___flagged_respawn_1.0.1.tgz"; + path = fetchurl { + name = "flagged_respawn___flagged_respawn_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz"; + sha1 = "e7de6f1279ddd9ca9aac8a5971d618606b3aab41"; + }; + } + + { + name = "follow_redirects___follow_redirects_1.11.0.tgz"; + path = fetchurl { + name = "follow_redirects___follow_redirects_1.11.0.tgz"; + url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz"; + sha1 = "afa14f08ba12a52963140fe43212658897bc0ecb"; + }; + } + + { + 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 = "forever_agent___forever_agent_0.5.2.tgz"; + path = fetchurl { + name = "forever_agent___forever_agent_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz"; + sha1 = "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130"; + }; + } + + { + 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 = "fork_stream___fork_stream_0.0.4.tgz"; + path = fetchurl { + name = "fork_stream___fork_stream_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz"; + sha1 = "db849fce77f6708a5f8f386ae533a0907b54ae70"; + }; + } + + { + name = "form_data___form_data_0.1.4.tgz"; + path = fetchurl { + name = "form_data___form_data_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz"; + sha1 = "91abd788aba9702b1aabfa8bc01031a2ac9e3b12"; + }; + } + + { + name = "form_data___form_data_0.2.0.tgz"; + path = fetchurl { + name = "form_data___form_data_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz"; + sha1 = "26f8bc26da6440e299cbdcfb69035c4f77a6e466"; + }; + } + + { + name = "form_data___form_data_2.3.3.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; + sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; + }; + } + + { + 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.3.0.tgz"; + path = fetchurl { + name = "fresh___fresh_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz"; + sha1 = "651f838e22424e7566de161d8358caa199f83d4f"; + }; + } + + { + name = "from___from_0.1.7.tgz"; + path = fetchurl { + name = "from___from_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz"; + sha1 = "83c60afc58b9c56997007ed1a768b3ab303a44fe"; + }; + } + + { + name = "fs_access___fs_access_1.0.1.tgz"; + path = fetchurl { + name = "fs_access___fs_access_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz"; + sha1 = "d6a87f262271cefebec30c553407fb995da8777a"; + }; + } + + { + name = "fs_minipass___fs_minipass_1.2.7.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz"; + sha1 = "ccff8570841e7fe4265693da88936c55aed7f7c7"; + }; + } + + { + 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.12.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.12.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz"; + sha1 = "db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c"; + }; + } + + { + name = "fstream_ignore___fstream_ignore_0.0.10.tgz"; + path = fetchurl { + name = "fstream_ignore___fstream_ignore_0.0.10.tgz"; + url = "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-0.0.10.tgz"; + sha1 = "b10f8f522cc55415f80b41f7d3a32e6cba254e8c"; + }; + } + + { + name = "fstream___fstream_1.0.12.tgz"; + path = fetchurl { + name = "fstream___fstream_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz"; + sha1 = "4e8ba8ee2d48be4f7d0de505455548eae5932045"; + }; + } + + { + name = "fstream___fstream_0.1.31.tgz"; + path = fetchurl { + name = "fstream___fstream_0.1.31.tgz"; + url = "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz"; + sha1 = "7337f058fbbbbefa8c9f561a28cab0849202c988"; + }; + } + + { + 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_0.5.2.tgz"; + path = fetchurl { + name = "gaze___gaze_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz"; + sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f"; + }; + } + + { + 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_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_stream___glob_stream_3.1.18.tgz"; + path = fetchurl { + name = "glob_stream___glob_stream_3.1.18.tgz"; + url = "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz"; + sha1 = "9170a5f12b790306fdfe598f313f8f7954fd143b"; + }; + } + + { + name = "glob_watcher___glob_watcher_0.0.6.tgz"; + path = fetchurl { + name = "glob_watcher___glob_watcher_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz"; + sha1 = "b95b4a8df74b39c83298b0c05c978b4d9a3b710b"; + }; + } + + { + name = "glob2base___glob2base_0.0.12.tgz"; + path = fetchurl { + name = "glob2base___glob2base_0.0.12.tgz"; + url = "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz"; + sha1 = "9d419b3e28f12e83a362164a277055922c9c0d56"; + }; + } + + { + name = "glob___glob_4.5.3.tgz"; + path = fetchurl { + name = "glob___glob_4.5.3.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz"; + sha1 = "c6cb73d3226c1efef04de3c56d012f03377ee15f"; + }; + } + + { + name = "glob___glob_5.0.15.tgz"; + path = fetchurl { + name = "glob___glob_5.0.15.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz"; + sha1 = "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"; + }; + } + + { + 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.6.tgz"; + path = fetchurl { + name = "glob___glob_7.1.6.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz"; + sha1 = "141f33b81a7c2492e125594307480c46679278a6"; + }; + } + + { + name = "glob___glob_3.1.21.tgz"; + path = fetchurl { + name = "glob___glob_3.1.21.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz"; + sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd"; + }; + } + + { + name = "glob___glob_3.2.11.tgz"; + path = fetchurl { + name = "glob___glob_3.2.11.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz"; + sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d"; + }; + } + + { + name = "glob___glob_4.0.6.tgz"; + path = fetchurl { + name = "glob___glob_4.0.6.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz"; + sha1 = "695c50bdd4e2fb5c5d370b091f388d3707e291a7"; + }; + } + + { + name = "global_modules___global_modules_1.0.0.tgz"; + path = fetchurl { + name = "global_modules___global_modules_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz"; + sha1 = "6d770f0eb523ac78164d72b5e71a8877265cc3ea"; + }; + } + + { + name = "global_prefix___global_prefix_1.0.2.tgz"; + path = fetchurl { + name = "global_prefix___global_prefix_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz"; + sha1 = "dbf743c6c14992593c655568cb66ed32c0122ebe"; + }; + } + + { + name = "globule___globule_1.3.1.tgz"; + path = fetchurl { + name = "globule___globule_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz"; + sha1 = "90a25338f22b7fbeb527cee63c629aea754d33b9"; + }; + } + + { + name = "globule___globule_0.1.0.tgz"; + path = fetchurl { + name = "globule___globule_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz"; + sha1 = "d9c8edde1da79d125a151b79533b978676346ae5"; + }; + } + + { + name = "glogg___glogg_1.0.2.tgz"; + path = fetchurl { + name = "glogg___glogg_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz"; + sha1 = "2d7dd702beda22eb3bffadf880696da6d846313f"; + }; + } + + { + name = "got___got_3.3.1.tgz"; + path = fetchurl { + name = "got___got_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz"; + sha1 = "e5d0ed4af55fc3eef4d56007769d98192bcb2eca"; + }; + } + + { + name = "graceful_fs___graceful_fs_3.0.12.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_3.0.12.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.12.tgz"; + sha1 = "0034947ce9ed695ec8ab0b854bc919e82b1ffaef"; + }; + } + + { + name = "graceful_fs___graceful_fs_4.2.3.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.2.3.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz"; + sha1 = "4a12ff1b60376ef09862c2093edd908328be8423"; + }; + } + + { + name = "graceful_fs___graceful_fs_1.2.3.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz"; + sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364"; + }; + } + + { + name = "graceful_fs___graceful_fs_2.0.3.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz"; + sha1 = "7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0"; + }; + } + + { + name = "guanlecoja___guanlecoja_0.9.2.tgz"; + path = fetchurl { + name = "guanlecoja___guanlecoja_0.9.2.tgz"; + url = "https://registry.yarnpkg.com/guanlecoja/-/guanlecoja-0.9.2.tgz"; + sha1 = "03febe92d9e7575a633b4d5ad8d19f5ee1cdf326"; + }; + } + + { + name = "gulp_angular_templatecache___gulp_angular_templatecache_1.9.1.tgz"; + path = fetchurl { + name = "gulp_angular_templatecache___gulp_angular_templatecache_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-angular-templatecache/-/gulp-angular-templatecache-1.9.1.tgz"; + sha1 = "60f631e97aaaa765d942e37042e4bfbb1a5df244"; + }; + } + + { + name = "gulp_bower_deps___gulp_bower_deps_0.3.3.tgz"; + path = fetchurl { + name = "gulp_bower_deps___gulp_bower_deps_0.3.3.tgz"; + url = "https://registry.yarnpkg.com/gulp-bower-deps/-/gulp-bower-deps-0.3.3.tgz"; + sha1 = "2109fe3fbee35069f67312bb977e591d890296cd"; + }; + } + + { + name = "gulp_browserify___gulp_browserify_0.5.1.tgz"; + path = fetchurl { + name = "gulp_browserify___gulp_browserify_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-browserify/-/gulp-browserify-0.5.1.tgz"; + sha1 = "820108ac2554a954adb8be17d23958b0c04be083"; + }; + } + + { + name = "gulp_cached___gulp_cached_1.1.1.tgz"; + path = fetchurl { + name = "gulp_cached___gulp_cached_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-cached/-/gulp-cached-1.1.1.tgz"; + sha1 = "fe7cd4f87f37601e6073cfedee5c2bdaf8b6acce"; + }; + } + + { + name = "gulp_clean_css___gulp_clean_css_2.4.0.tgz"; + path = fetchurl { + name = "gulp_clean_css___gulp_clean_css_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-2.4.0.tgz"; + sha1 = "2ae48109fe83ccc967ff5ad53c044949a4863b36"; + }; + } + + { + name = "gulp_coffee___gulp_coffee_2.3.5.tgz"; + path = fetchurl { + name = "gulp_coffee___gulp_coffee_2.3.5.tgz"; + url = "https://registry.yarnpkg.com/gulp-coffee/-/gulp-coffee-2.3.5.tgz"; + sha1 = "8c64e9ac884e1bab4e20b66ac7c386a816859041"; + }; + } + + { + name = "gulp_concat___gulp_concat_2.6.0.tgz"; + path = fetchurl { + name = "gulp_concat___gulp_concat_2.6.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.0.tgz"; + sha1 = "585cfb115411f348773131140566b6a81c69cb91"; + }; + } + + { + name = "gulp_concat___gulp_concat_2.6.1.tgz"; + path = fetchurl { + name = "gulp_concat___gulp_concat_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz"; + sha1 = "633d16c95d88504628ad02665663cee5a4793353"; + }; + } + + { + name = "gulp_fixtures2js___gulp_fixtures2js_0.0.1.tgz"; + path = fetchurl { + name = "gulp_fixtures2js___gulp_fixtures2js_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-fixtures2js/-/gulp-fixtures2js-0.0.1.tgz"; + sha1 = "4a3cbb4404bdfab92f7d2b6e09de2bfd0ae78506"; + }; + } + + { + name = "gulp_footer___gulp_footer_1.0.5.tgz"; + path = fetchurl { + name = "gulp_footer___gulp_footer_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/gulp-footer/-/gulp-footer-1.0.5.tgz"; + sha1 = "e84ca777e266be7bbc2d45d2df0e7eba8dfa3e54"; + }; + } + + { + name = "gulp_footer___gulp_footer_1.1.2.tgz"; + path = fetchurl { + name = "gulp_footer___gulp_footer_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/gulp-footer/-/gulp-footer-1.1.2.tgz"; + sha1 = "7fe28324ec67e3d618d31e0f5ea2ee5b454f6877"; + }; + } + + { + name = "gulp_header___gulp_header_1.8.2.tgz"; + path = fetchurl { + name = "gulp_header___gulp_header_1.8.2.tgz"; + url = "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.2.tgz"; + sha1 = "3ab222f53719d2d03d81d9134252fe7d52425aa4"; + }; + } + + { + name = "gulp_header___gulp_header_1.8.12.tgz"; + path = fetchurl { + name = "gulp_header___gulp_header_1.8.12.tgz"; + url = "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.12.tgz"; + sha1 = "ad306be0066599127281c4f8786660e705080a84"; + }; + } + + { + name = "gulp_help___gulp_help_1.6.1.tgz"; + path = fetchurl { + name = "gulp_help___gulp_help_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-help/-/gulp-help-1.6.1.tgz"; + sha1 = "261db186e18397fef3f6a2c22e9c315bfa88ae0c"; + }; + } + + { + name = "gulp_if___gulp_if_2.0.2.tgz"; + path = fetchurl { + name = "gulp_if___gulp_if_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/gulp-if/-/gulp-if-2.0.2.tgz"; + sha1 = "a497b7e7573005041caa2bc8b7dda3c80444d629"; + }; + } + + { + name = "gulp_less___gulp_less_1.3.9.tgz"; + path = fetchurl { + name = "gulp_less___gulp_less_1.3.9.tgz"; + url = "https://registry.yarnpkg.com/gulp-less/-/gulp-less-1.3.9.tgz"; + sha1 = "e129750f236693ead5b522af311cc33eeff1910e"; + }; + } + + { + name = "gulp_livereload___gulp_livereload_3.8.1.tgz"; + path = fetchurl { + name = "gulp_livereload___gulp_livereload_3.8.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-3.8.1.tgz"; + sha1 = "00f744b2d749d3e9e3746589c8a44acac779b50f"; + }; + } + + { + name = "gulp_match___gulp_match_1.1.0.tgz"; + path = fetchurl { + name = "gulp_match___gulp_match_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.1.0.tgz"; + sha1 = "552b7080fc006ee752c90563f9fec9d61aafdf4f"; + }; + } + + { + name = "gulp_ng_annotate___gulp_ng_annotate_1.1.0.tgz"; + path = fetchurl { + name = "gulp_ng_annotate___gulp_ng_annotate_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-ng-annotate/-/gulp-ng-annotate-1.1.0.tgz"; + sha1 = "5e801be073d8f6d343c4ff65b71717b90fac13ce"; + }; + } + + { + name = "gulp_ng_classify___gulp_ng_classify_4.0.1.tgz"; + path = fetchurl { + name = "gulp_ng_classify___gulp_ng_classify_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-ng-classify/-/gulp-ng-classify-4.0.1.tgz"; + sha1 = "3019161127c35c317ea08dc2a65ea35b592dbfd7"; + }; + } + + { + name = "gulp_pug___gulp_pug_3.3.0.tgz"; + path = fetchurl { + name = "gulp_pug___gulp_pug_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-pug/-/gulp-pug-3.3.0.tgz"; + sha1 = "46982c1439c094c360542ed8ba5c882d3bb711cf"; + }; + } + + { + name = "gulp_remember___gulp_remember_0.3.1.tgz"; + path = fetchurl { + name = "gulp_remember___gulp_remember_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-remember/-/gulp-remember-0.3.1.tgz"; + sha1 = "5776b6f64c5a1c5c4d4555406723ec8e2b0407e7"; + }; + } + + { + name = "gulp_rename___gulp_rename_1.2.3.tgz"; + path = fetchurl { + name = "gulp_rename___gulp_rename_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.3.tgz"; + sha1 = "37b75298e9d3e6c0fe9ac4eac13ce3be5434646b"; + }; + } + + { + name = "gulp_replace___gulp_replace_0.5.4.tgz"; + path = fetchurl { + name = "gulp_replace___gulp_replace_0.5.4.tgz"; + url = "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-0.5.4.tgz"; + sha1 = "69a67914bbd13c562bff14f504a403796aa0daa9"; + }; + } + + { + name = "gulp_sass___gulp_sass_3.2.1.tgz"; + path = fetchurl { + name = "gulp_sass___gulp_sass_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-3.2.1.tgz"; + sha1 = "2e3688a96fd8be1c0c01340750c191b2e79fab94"; + }; + } + + { + name = "gulp_sourcemaps___gulp_sourcemaps_1.6.0.tgz"; + path = fetchurl { + name = "gulp_sourcemaps___gulp_sourcemaps_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz"; + sha1 = "b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c"; + }; + } + + { + name = "gulp_uglify___gulp_uglify_1.4.2.tgz"; + path = fetchurl { + name = "gulp_uglify___gulp_uglify_1.4.2.tgz"; + url = "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-1.4.2.tgz"; + sha1 = "2807ea1016e4962c37766c02feeb5501818857c3"; + }; + } + + { + name = "gulp_util___gulp_util_3.0.8.tgz"; + path = fetchurl { + name = "gulp_util___gulp_util_3.0.8.tgz"; + url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz"; + sha1 = "0054e1e744502e27c04c187c3ecc505dd54bbb4f"; + }; + } + + { + name = "gulp_util___gulp_util_3.0.7.tgz"; + path = fetchurl { + name = "gulp_util___gulp_util_3.0.7.tgz"; + url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz"; + sha1 = "78925c4b8f8b49005ac01a011c557e6218941cbb"; + }; + } + + { + name = "gulp_util___gulp_util_2.2.20.tgz"; + path = fetchurl { + name = "gulp_util___gulp_util_2.2.20.tgz"; + url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz"; + sha1 = "d7146e5728910bd8f047a6b0b1e549bc22dbd64c"; + }; + } + + { + name = "gulp_wrap___gulp_wrap_0.8.0.tgz"; + path = fetchurl { + name = "gulp_wrap___gulp_wrap_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/gulp-wrap/-/gulp-wrap-0.8.0.tgz"; + sha1 = "c41ce89a374947788b78c9e67f33bbe838c69b86"; + }; + } + + { + name = "gulp___gulp_3.9.1.tgz"; + path = fetchurl { + name = "gulp___gulp_3.9.1.tgz"; + url = "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz"; + sha1 = "571ce45928dd40af6514fc4011866016c13845b4"; + }; + } + + { + name = "gulplog___gulplog_1.0.0.tgz"; + path = fetchurl { + name = "gulplog___gulplog_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz"; + sha1 = "e28c4d45d05ecbbed818363ce8f9c5926229ffe5"; + }; + } + + { + name = "handlebars___handlebars_4.7.3.tgz"; + path = fetchurl { + name = "handlebars___handlebars_4.7.3.tgz"; + url = "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz"; + sha1 = "8ece2797826886cf8082d1726ff21d2a022550ee"; + }; + } + + { + name = "handlebars___handlebars_1.3.0.tgz"; + path = fetchurl { + name = "handlebars___handlebars_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz"; + sha1 = "9e9b130a93e389491322d975cf3ec1818c37ce34"; + }; + } + + { + 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_5.1.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.1.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; + sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; + }; + } + + { + name = "has_ansi___has_ansi_0.1.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz"; + sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e"; + }; + } + + { + 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_binary___has_binary_0.1.7.tgz"; + path = fetchurl { + name = "has_binary___has_binary_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz"; + sha1 = "68e61eb16210c9545a0a5cce06a873912fe1e68c"; + }; + } + + { + name = "has_color___has_color_0.1.7.tgz"; + path = fetchurl { + name = "has_color___has_color_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz"; + sha1 = "67144a5260c34fc3cca677d041daf52fe7b78b2f"; + }; + } + + { + name = "has_cors___has_cors_1.1.0.tgz"; + path = fetchurl { + name = "has_cors___has_cors_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz"; + sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39"; + }; + } + + { + 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_4.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz"; + sha1 = "944771fd9c81c81265c4d6941860da06bb59479b"; + }; + } + + { + name = "has_gulplog___has_gulplog_0.1.0.tgz"; + path = fetchurl { + name = "has_gulplog___has_gulplog_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz"; + sha1 = "6414c82913697da51590397dafb12f22967811ce"; + }; + } + + { + 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 = "hawk___hawk_1.1.1.tgz"; + path = fetchurl { + name = "hawk___hawk_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz"; + sha1 = "87cd491f9b46e4e2aeaca335416766885d2d1ed9"; + }; + } + + { + name = "hawk___hawk_1.0.0.tgz"; + path = fetchurl { + name = "hawk___hawk_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hawk/-/hawk-1.0.0.tgz"; + sha1 = "b90bb169807285411da7ffcb8dd2598502d3b52d"; + }; + } + + { + name = "hoek___hoek_0.9.1.tgz"; + path = fetchurl { + name = "hoek___hoek_0.9.1.tgz"; + url = "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz"; + sha1 = "3d322462badf07716ea7eb85baf88079cddce505"; + }; + } + + { + name = "homedir_polyfill___homedir_polyfill_1.0.3.tgz"; + path = fetchurl { + name = "homedir_polyfill___homedir_polyfill_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz"; + sha1 = "743298cef4e5af3e194161fbadcc2151d3a058e8"; + }; + } + + { + name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz"; + sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488"; + }; + } + + { + name = "http_browserify___http_browserify_1.3.2.tgz"; + path = fetchurl { + name = "http_browserify___http_browserify_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.3.2.tgz"; + sha1 = "b562c34479349a690d7a6597df495aefa8c604f5"; + }; + } + + { + name = "http_errors___http_errors_1.7.2.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz"; + sha1 = "4f5029cf13239f31036e5b2e55292bcfbcc85c8f"; + }; + } + + { + name = "http_errors___http_errors_1.3.1.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz"; + sha1 = "197e22cdebd4198585e8694ef6786197b91ed942"; + }; + } + + { + name = "http_parser_js___http_parser_js_0.4.10.tgz"; + path = fetchurl { + name = "http_parser_js___http_parser_js_0.4.10.tgz"; + url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz"; + sha1 = "92c9c1374c35085f75db359ec56cc257cbb93fa4"; + }; + } + + { + name = "http_proxy___http_proxy_1.18.0.tgz"; + path = fetchurl { + name = "http_proxy___http_proxy_1.18.0.tgz"; + url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz"; + sha1 = "dbe55f63e75a347db7f3d99974f2692a314a6a3a"; + }; + } + + { + name = "http_signature___http_signature_0.10.1.tgz"; + path = fetchurl { + name = "http_signature___http_signature_0.10.1.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz"; + sha1 = "4fbdac132559aa8323121e540779c0a012b27e66"; + }; + } + + { + 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_0.0.1.tgz"; + path = fetchurl { + name = "https_browserify___https_browserify_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz"; + sha1 = "3f91365cabe60b77ed0ebba24b454e3e09d95a82"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.13.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.13.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz"; + sha1 = "1f88aba4ab0b1508e8312acc39345f36e992e2f2"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; + }; + } + + { + name = "ieee754___ieee754_1.1.13.tgz"; + path = fetchurl { + name = "ieee754___ieee754_1.1.13.tgz"; + url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz"; + sha1 = "ec168558e95aa181fd87d37f55c32bbcb6708b84"; + }; + } + + { + name = "ignore_walk___ignore_walk_3.0.3.tgz"; + path = fetchurl { + name = "ignore_walk___ignore_walk_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz"; + sha1 = "017e2447184bfeade7c238e4aefdd1e8f95b1e37"; + }; + } + + { + name = "in_publish___in_publish_2.0.1.tgz"; + path = fetchurl { + name = "in_publish___in_publish_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz"; + sha1 = "948b1a535c8030561cea522f73f78f4be357e00c"; + }; + } + + { + 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 = "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 = "infinity_agent___infinity_agent_2.0.3.tgz"; + path = fetchurl { + name = "infinity_agent___infinity_agent_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz"; + sha1 = "45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216"; + }; + } + + { + 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_1.0.2.tgz"; + path = fetchurl { + name = "inherits___inherits_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz"; + sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"; + }; + } + + { + name = "inherits___inherits_2.0.4.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz"; + sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c"; + }; + } + + { + 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 = "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 = "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 = "inline_source_map___inline_source_map_0.3.1.tgz"; + path = fetchurl { + name = "inline_source_map___inline_source_map_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.3.1.tgz"; + sha1 = "a528b514e689fce90db3089e870d92f527acb5eb"; + }; + } + + { + name = "inquirer___inquirer_0.4.1.tgz"; + path = fetchurl { + name = "inquirer___inquirer_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/inquirer/-/inquirer-0.4.1.tgz"; + sha1 = "6cf74eb1a347f97a1a207bea8ad1c987d0ff4b81"; + }; + } + + { + name = "inquirer___inquirer_0.5.1.tgz"; + path = fetchurl { + name = "inquirer___inquirer_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/inquirer/-/inquirer-0.5.1.tgz"; + sha1 = "e9f2cd1ee172c7a32e054b78a03d4ddb0d7707f1"; + }; + } + + { + name = "insert_module_globals___insert_module_globals_6.0.0.tgz"; + path = fetchurl { + name = "insert_module_globals___insert_module_globals_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-6.0.0.tgz"; + sha1 = "ee8aeb9dee16819e33aa14588a558824af0c15dc"; + }; + } + + { + name = "insight___insight_0.3.1.tgz"; + path = fetchurl { + name = "insight___insight_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/insight/-/insight-0.3.1.tgz"; + sha1 = "1a14f32c06115c0850338c38a253d707b611d448"; + }; + } + + { + name = "interpret___interpret_1.2.0.tgz"; + path = fetchurl { + name = "interpret___interpret_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz"; + sha1 = "d5061a6224be58e8083985f5014d844359576296"; + }; + } + + { + name = "intersect___intersect_0.0.3.tgz"; + path = fetchurl { + name = "intersect___intersect_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/intersect/-/intersect-0.0.3.tgz"; + sha1 = "c1a4a5e5eac6ede4af7504cc07e0ada7bc9f4920"; + }; + } + + { + 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 = "is_absolute___is_absolute_1.0.0.tgz"; + path = fetchurl { + name = "is_absolute___is_absolute_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz"; + sha1 = "395e1ae84b11f26ad1795e73c17378e48a301576"; + }; + } + + { + 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_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_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_expression___is_expression_3.0.0.tgz"; + path = fetchurl { + name = "is_expression___is_expression_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz"; + sha1 = "39acaa6be7fd1f3471dc42c7416e61c24317ac9f"; + }; + } + + { + 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.1.0.tgz"; + path = fetchurl { + name = "is_finite___is_finite_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz"; + sha1 = "904135c77fb42c0641d6aa1bcdbc4daa8da082f3"; + }; + } + + { + 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_npm___is_npm_1.0.0.tgz"; + path = fetchurl { + name = "is_npm___is_npm_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz"; + sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4"; + }; + } + + { + name = "is_number___is_number_0.1.1.tgz"; + path = fetchurl { + name = "is_number___is_number_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz"; + sha1 = "69a7af116963d47206ec9bd9b48a14216f1e3806"; + }; + } + + { + 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_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_promise___is_promise_2.1.0.tgz"; + path = fetchurl { + name = "is_promise___is_promise_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz"; + sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"; + }; + } + + { + name = "is_redirect___is_redirect_1.0.0.tgz"; + path = fetchurl { + name = "is_redirect___is_redirect_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz"; + sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"; + }; + } + + { + name = "is_regex___is_regex_1.0.5.tgz"; + path = fetchurl { + name = "is_regex___is_regex_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz"; + sha1 = "39d589a358bf18967f726967120b8fc1aed74eae"; + }; + } + + { + name = "is_relative___is_relative_1.0.0.tgz"; + path = fetchurl { + name = "is_relative___is_relative_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz"; + sha1 = "a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"; + }; + } + + { + name = "is_root___is_root_0.1.0.tgz"; + path = fetchurl { + name = "is_root___is_root_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-root/-/is-root-0.1.0.tgz"; + sha1 = "825e394ab593df2d73c5d0092fce507270b53dcb"; + }; + } + + { + 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_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_unc_path___is_unc_path_1.0.0.tgz"; + path = fetchurl { + name = "is_unc_path___is_unc_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz"; + sha1 = "d731e8898ed090a12c352ad2eaed5095ad322c9d"; + }; + } + + { + 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___is_3.3.0.tgz"; + path = fetchurl { + name = "is___is_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz"; + sha1 = "61cff6dd3c4193db94a3d62582072b44e5645d79"; + }; + } + + { + 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 = "isbinaryfile___isbinaryfile_3.0.3.tgz"; + path = fetchurl { + name = "isbinaryfile___isbinaryfile_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz"; + sha1 = "5d6def3edebf6e8ca8cae9c30183a804b5f8be80"; + }; + } + + { + 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 = "istanbul___istanbul_0.4.5.tgz"; + path = fetchurl { + name = "istanbul___istanbul_0.4.5.tgz"; + url = "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz"; + sha1 = "65c7d73d4c4da84d4f3ac310b918fb0b8033733b"; + }; + } + + { + name = "istextorbinary___istextorbinary_1.0.2.tgz"; + path = fetchurl { + name = "istextorbinary___istextorbinary_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-1.0.2.tgz"; + sha1 = "ace19354d1a9a0173efeb1084ce0f87b0ad7decf"; + }; + } + + { + name = "jasmine_core___jasmine_core_2.99.1.tgz"; + path = fetchurl { + name = "jasmine_core___jasmine_core_2.99.1.tgz"; + url = "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz"; + sha1 = "e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"; + }; + } + + { + name = "js_base64___js_base64_2.5.2.tgz"; + path = fetchurl { + name = "js_base64___js_base64_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz"; + sha1 = "313b6274dda718f714d00b3330bbae6e38e90209"; + }; + } + + { + name = "js_string_escape___js_string_escape_1.0.1.tgz"; + path = fetchurl { + name = "js_string_escape___js_string_escape_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz"; + sha1 = "e2625badbc0d67c7533e9edc1068c587ae4137ef"; + }; + } + + { + name = "js_stringify___js_stringify_1.0.2.tgz"; + path = fetchurl { + name = "js_stringify___js_stringify_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz"; + sha1 = "1736fddfd9724f28a3682adc6230ae7e4e9679db"; + }; + } + + { + name = "js_yaml___js_yaml_3.13.1.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.13.1.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz"; + sha1 = "aff151b30bfdfa8e49e05da22e7415e9dfa37847"; + }; + } + + { + name = "js_yaml___js_yaml_3.0.2.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.0.2.tgz"; + sha1 = "9937865f8e897a5e894e73c2c5cf2e89b32eb771"; + }; + } + + { + 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 = "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_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 = "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 = "jsonparse___jsonparse_0.0.5.tgz"; + path = fetchurl { + name = "jsonparse___jsonparse_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz"; + sha1 = "330542ad3f0a654665b778f3eb2d9a9fa507ac64"; + }; + } + + { + 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 = "jstransformer___jstransformer_1.0.0.tgz"; + path = fetchurl { + name = "jstransformer___jstransformer_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz"; + sha1 = "ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"; + }; + } + + { + name = "junk___junk_0.3.0.tgz"; + path = fetchurl { + name = "junk___junk_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/junk/-/junk-0.3.0.tgz"; + sha1 = "6c89c636f6e99898d8efbfc50430db40be71e10c"; + }; + } + + { + name = "karma_chrome_launcher___karma_chrome_launcher_2.1.1.tgz"; + path = fetchurl { + name = "karma_chrome_launcher___karma_chrome_launcher_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz"; + sha1 = "216879c68ac04d8d5140e99619ba04b59afd46cf"; + }; + } + + { + name = "karma_coffee_preprocessor___karma_coffee_preprocessor_0.3.0.tgz"; + path = fetchurl { + name = "karma_coffee_preprocessor___karma_coffee_preprocessor_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/karma-coffee-preprocessor/-/karma-coffee-preprocessor-0.3.0.tgz"; + sha1 = "a4d8dc2b145bfef458a203d308b63bc03c9b4259"; + }; + } + + { + name = "karma_coverage___karma_coverage_0.5.5.tgz"; + path = fetchurl { + name = "karma_coverage___karma_coverage_0.5.5.tgz"; + url = "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-0.5.5.tgz"; + sha1 = "b0d58b1025d59d5c6620263186f1d58f5d5348c5"; + }; + } + + { + name = "karma_jasmine___karma_jasmine_0.3.8.tgz"; + path = fetchurl { + name = "karma_jasmine___karma_jasmine_0.3.8.tgz"; + url = "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-0.3.8.tgz"; + sha1 = "5b6457791ad9b89aa173f079e3ebe1b8c805236c"; + }; + } + + { + name = "karma_sourcemap_loader___karma_sourcemap_loader_0.3.7.tgz"; + path = fetchurl { + name = "karma_sourcemap_loader___karma_sourcemap_loader_0.3.7.tgz"; + url = "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz"; + sha1 = "91322c77f8f13d46fed062b042e1009d4c4505d8"; + }; + } + + { + name = "karma___karma_0.13.22.tgz"; + path = fetchurl { + name = "karma___karma_0.13.22.tgz"; + url = "https://registry.yarnpkg.com/karma/-/karma-0.13.22.tgz"; + sha1 = "07750b1bd063d7e7e7b91bcd2e6354d8f2aa8744"; + }; + } + + { + 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.3.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.3.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz"; + sha1 = "07c05034a6c349fa06e24fa35aa76db4580ce4dd"; + }; + } + + { + name = "latest_version___latest_version_1.0.1.tgz"; + path = fetchurl { + name = "latest_version___latest_version_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz"; + sha1 = "72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb"; + }; + } + + { + 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 = "lazypipe___lazypipe_1.0.2.tgz"; + path = fetchurl { + name = "lazypipe___lazypipe_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/lazypipe/-/lazypipe-1.0.2.tgz"; + sha1 = "b66f64ed7fd8b04869f1f1bcb795dbbaa80e418c"; + }; + } + + { + 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 = "less___less_1.7.5.tgz"; + path = fetchurl { + name = "less___less_1.7.5.tgz"; + url = "https://registry.yarnpkg.com/less/-/less-1.7.5.tgz"; + sha1 = "4f220cf7288a27eaca739df6e4808a2d4c0d5756"; + }; + } + + { + name = "levn___levn_0.3.0.tgz"; + path = fetchurl { + name = "levn___levn_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + } + + { + name = "lexical_scope___lexical_scope_1.1.1.tgz"; + path = fetchurl { + name = "lexical_scope___lexical_scope_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.1.1.tgz"; + sha1 = "debac1067435f1359d90fcfd9e94bcb2ee47b2bf"; + }; + } + + { + name = "liftoff___liftoff_2.5.0.tgz"; + path = fetchurl { + name = "liftoff___liftoff_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz"; + sha1 = "2009291bb31cea861bbf10a7c15a28caf75c31ec"; + }; + } + + { + name = "livereload_js___livereload_js_2.4.0.tgz"; + path = fetchurl { + name = "livereload_js___livereload_js_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz"; + sha1 = "447c31cf1ea9ab52fc20db615c5ddf678f78009c"; + }; + } + + { + 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 = "lockfile___lockfile_0.4.3.tgz"; + path = fetchurl { + name = "lockfile___lockfile_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/lockfile/-/lockfile-0.4.3.tgz"; + sha1 = "79b965ee9b32d9dd24b59cf81205e6dcb6d3b224"; + }; + } + + { + 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._basetostring___lodash._basetostring_3.0.1.tgz"; + path = fetchurl { + name = "lodash._basetostring___lodash._basetostring_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz"; + sha1 = "d1861d877f824a52f669832dcaf3ee15566a07d5"; + }; + } + + { + name = "lodash._basevalues___lodash._basevalues_3.0.0.tgz"; + path = fetchurl { + name = "lodash._basevalues___lodash._basevalues_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz"; + sha1 = "5b775762802bde3d3297503e26300820fdf661b7"; + }; + } + + { + 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._escapehtmlchar___lodash._escapehtmlchar_2.4.1.tgz"; + path = fetchurl { + name = "lodash._escapehtmlchar___lodash._escapehtmlchar_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz"; + sha1 = "df67c3bb6b7e8e1e831ab48bfa0795b92afe899d"; + }; + } + + { + name = "lodash._escapestringchar___lodash._escapestringchar_2.4.1.tgz"; + path = fetchurl { + name = "lodash._escapestringchar___lodash._escapestringchar_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz"; + sha1 = "ecfe22618a2ade50bfeea43937e51df66f0edb72"; + }; + } + + { + 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._htmlescapes___lodash._htmlescapes_2.4.1.tgz"; + path = fetchurl { + name = "lodash._htmlescapes___lodash._htmlescapes_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz"; + sha1 = "32d14bf0844b6de6f8b62a051b4f67c228b624cb"; + }; + } + + { + 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._isnative___lodash._isnative_2.4.1.tgz"; + path = fetchurl { + name = "lodash._isnative___lodash._isnative_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz"; + sha1 = "3ea6404b784a7be836c7b57580e1cdf79b14832c"; + }; + } + + { + name = "lodash._objecttypes___lodash._objecttypes_2.4.1.tgz"; + path = fetchurl { + name = "lodash._objecttypes___lodash._objecttypes_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz"; + sha1 = "7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11"; + }; + } + + { + name = "lodash._reescape___lodash._reescape_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reescape___lodash._reescape_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz"; + sha1 = "2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"; + }; + } + + { + name = "lodash._reevaluate___lodash._reevaluate_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reevaluate___lodash._reevaluate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz"; + sha1 = "58bc74c40664953ae0b124d806996daca431e2ed"; + }; + } + + { + name = "lodash._reinterpolate___lodash._reinterpolate_2.4.1.tgz"; + path = fetchurl { + name = "lodash._reinterpolate___lodash._reinterpolate_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz"; + sha1 = "4f1227aa5a8711fc632f5b07a1f4607aab8b3222"; + }; + } + + { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"; + sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d"; + }; + } + + { + name = "lodash._reunescapedhtml___lodash._reunescapedhtml_2.4.1.tgz"; + path = fetchurl { + name = "lodash._reunescapedhtml___lodash._reunescapedhtml_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz"; + sha1 = "747c4fc40103eb3bb8a0976e571f7a2659e93ba7"; + }; + } + + { + name = "lodash._root___lodash._root_3.0.1.tgz"; + path = fetchurl { + name = "lodash._root___lodash._root_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz"; + sha1 = "fba1c4524c19ee9a5f8136b4609f017cf4ded692"; + }; + } + + { + name = "lodash._shimkeys___lodash._shimkeys_2.4.1.tgz"; + path = fetchurl { + name = "lodash._shimkeys___lodash._shimkeys_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz"; + sha1 = "6e9cc9666ff081f0b5a6c978b83e242e6949d203"; + }; + } + + { + 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.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.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_2.4.1.tgz"; + path = fetchurl { + name = "lodash.debounce___lodash.debounce_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-2.4.1.tgz"; + sha1 = "d8cead246ec4b926e8b85678fc396bfeba8cc6fc"; + }; + } + + { + name = "lodash.defaults___lodash.defaults_2.4.1.tgz"; + path = fetchurl { + name = "lodash.defaults___lodash.defaults_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz"; + sha1 = "a7e8885f05e68851144b6e12a8f3678026bc4c54"; + }; + } + + { + 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.escape___lodash.escape_3.2.0.tgz"; + path = fetchurl { + name = "lodash.escape___lodash.escape_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz"; + sha1 = "995ee0dc18c1b48cc92effae71a10aab5b487698"; + }; + } + + { + name = "lodash.escape___lodash.escape_2.4.1.tgz"; + path = fetchurl { + name = "lodash.escape___lodash.escape_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz"; + sha1 = "2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4"; + }; + } + + { + 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.isfunction___lodash.isfunction_2.4.1.tgz"; + path = fetchurl { + name = "lodash.isfunction___lodash.isfunction_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz"; + sha1 = "2cfd575c73e498ab57e319b77fa02adef13a94d1"; + }; + } + + { + name = "lodash.isobject___lodash.isobject_2.4.1.tgz"; + path = fetchurl { + name = "lodash.isobject___lodash.isobject_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz"; + sha1 = "5a2e47fe69953f1ee631a7eba1fe64d2d06558f5"; + }; + } + + { + 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.keys___lodash.keys_2.4.1.tgz"; + path = fetchurl { + name = "lodash.keys___lodash.keys_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz"; + sha1 = "48dea46df8ff7632b10d706b8acb26591e2b3727"; + }; + } + + { + name = "lodash.now___lodash.now_2.4.1.tgz"; + path = fetchurl { + name = "lodash.now___lodash.now_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.now/-/lodash.now-2.4.1.tgz"; + sha1 = "6872156500525185faf96785bb7fe7fe15b562c6"; + }; + } + + { + 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.template___lodash.template_2.4.1.tgz"; + path = fetchurl { + name = "lodash.template___lodash.template_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz"; + sha1 = "9e611007edf629129a974ab3c48b817b3e1cf20d"; + }; + } + + { + name = "lodash.template___lodash.template_3.6.2.tgz"; + path = fetchurl { + name = "lodash.template___lodash.template_3.6.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz"; + sha1 = "f8cdecc6169a255be9098ae8b0c53d378931d14f"; + }; + } + + { + name = "lodash.template___lodash.template_4.5.0.tgz"; + path = fetchurl { + name = "lodash.template___lodash.template_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz"; + sha1 = "f976195cf3f347d0d5f52483569fe8031ccce8ab"; + }; + } + + { + name = "lodash.templatesettings___lodash.templatesettings_3.1.1.tgz"; + path = fetchurl { + name = "lodash.templatesettings___lodash.templatesettings_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz"; + sha1 = "fb307844753b66b9f1afa54e262c745307dba8e5"; + }; + } + + { + name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; + path = fetchurl { + name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz"; + sha1 = "e481310f049d3cf6d47e912ad09313b154f0fb33"; + }; + } + + { + name = "lodash.templatesettings___lodash.templatesettings_2.4.1.tgz"; + path = fetchurl { + name = "lodash.templatesettings___lodash.templatesettings_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz"; + sha1 = "ea76c75d11eb86d4dbe89a83893bb861929ac699"; + }; + } + + { + name = "lodash.values___lodash.values_2.4.1.tgz"; + path = fetchurl { + name = "lodash.values___lodash.values_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz"; + sha1 = "abf514436b3cb705001627978cbcf30b1280eea4"; + }; + } + + { + name = "lodash___lodash_2.4.2.tgz"; + path = fetchurl { + name = "lodash___lodash_2.4.2.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz"; + sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e"; + }; + } + + { + name = "lodash___lodash_3.10.1.tgz"; + path = fetchurl { + name = "lodash___lodash_3.10.1.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz"; + sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6"; + }; + } + + { + name = "lodash___lodash_4.17.15.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.15.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz"; + sha1 = "b447f6670a0455bbfeedd11392eff330ea097548"; + }; + } + + { + name = "lodash___lodash_1.0.2.tgz"; + path = fetchurl { + name = "lodash___lodash_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz"; + sha1 = "8f57560c83b59fc270bd3d561b690043430e2551"; + }; + } + + { + name = "log4js___log4js_0.6.38.tgz"; + path = fetchurl { + name = "log4js___log4js_0.6.38.tgz"; + url = "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz"; + sha1 = "2c494116695d6fb25480943d3fc872e662a522fd"; + }; + } + + { + 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 = "loophole___loophole_1.1.0.tgz"; + path = fetchurl { + name = "loophole___loophole_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/loophole/-/loophole-1.1.0.tgz"; + sha1 = "37949fea453b6256acc725c320ce0c5a7f70a2bd"; + }; + } + + { + 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 = "lowercase_keys___lowercase_keys_1.0.1.tgz"; + path = fetchurl { + name = "lowercase_keys___lowercase_keys_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz"; + sha1 = "6f9e30b47084d971a7c820ff15a6c5167b74c26f"; + }; + } + + { + name = "lru_cache___lru_cache_2.7.3.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_2.7.3.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz"; + sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952"; + }; + } + + { + name = "lru_cache___lru_cache_4.1.5.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; + sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; + }; + } + + { + name = "lru_cache___lru_cache_2.3.1.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.3.1.tgz"; + sha1 = "b3adf6b3d856e954e2c390e6cef22081245a53d6"; + }; + } + + { + name = "lru_cache___lru_cache_2.5.2.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.5.2.tgz"; + sha1 = "1fddad938aae1263ce138680be1b3f591c0ab41c"; + }; + } + + { + name = "lru_queue___lru_queue_0.1.0.tgz"; + path = fetchurl { + name = "lru_queue___lru_queue_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz"; + sha1 = "2738bd9f0d3cf4f84490c5736c48699ac632cda3"; + }; + } + + { + name = "make_iterator___make_iterator_1.0.1.tgz"; + path = fetchurl { + name = "make_iterator___make_iterator_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz"; + sha1 = "29b33f312aa8f547c4a5e490f56afcec99133ad6"; + }; + } + + { + 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_stream___map_stream_0.0.7.tgz"; + path = fetchurl { + name = "map_stream___map_stream_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz"; + sha1 = "8a1f07896d82b10926bd3744a2420009f88974a8"; + }; + } + + { + name = "map_stream___map_stream_0.1.0.tgz"; + path = fetchurl { + name = "map_stream___map_stream_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz"; + sha1 = "e56aa94c4c8055a16404a0674b78f215f7c8e194"; + }; + } + + { + 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_random___math_random_1.0.4.tgz"; + path = fetchurl { + name = "math_random___math_random_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz"; + sha1 = "5dd6943c938548267016d4e34f057583080c514c"; + }; + } + + { + 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 = "memoizee___memoizee_0.2.6.tgz"; + path = fetchurl { + name = "memoizee___memoizee_0.2.6.tgz"; + url = "https://registry.yarnpkg.com/memoizee/-/memoizee-0.2.6.tgz"; + sha1 = "bb45a7ad02530082f1612671dab35219cd2e0741"; + }; + } + + { + name = "memoizee___memoizee_0.3.10.tgz"; + path = fetchurl { + name = "memoizee___memoizee_0.3.10.tgz"; + url = "https://registry.yarnpkg.com/memoizee/-/memoizee-0.3.10.tgz"; + sha1 = "4eca0d8aed39ec9d017f4c5c2f2f6432f42e5c8f"; + }; + } + + { + 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_stream___merge_stream_1.0.1.tgz"; + path = fetchurl { + name = "merge_stream___merge_stream_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz"; + sha1 = "4041202d508a342ba00174008df0c251b8c135e1"; + }; + } + + { + name = "merge___merge_1.2.1.tgz"; + path = fetchurl { + name = "merge___merge_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz"; + sha1 = "38bebf80c3220a8a487b6fcfb3941bb11720c145"; + }; + } + + { + 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 = "mime_db___mime_db_1.43.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.43.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz"; + sha1 = "0a12e0502650e473d735535050e7c8f4eb4fae58"; + }; + } + + { + name = "mime_db___mime_db_1.12.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.12.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz"; + sha1 = "3d0c63180f458eb10d325aaa37d7c58ae312e9d7"; + }; + } + + { + name = "mime_types___mime_types_2.1.26.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.26.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz"; + sha1 = "9c921fc09b7e149a65dfdc0da4d20997200b0a06"; + }; + } + + { + name = "mime_types___mime_types_1.0.2.tgz"; + path = fetchurl { + name = "mime_types___mime_types_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz"; + sha1 = "995ae1392ab8affcbfcb2641dd054e943c0d5dce"; + }; + } + + { + name = "mime_types___mime_types_2.0.14.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.0.14.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz"; + sha1 = "310e159db23e077f8bb22b748dabfa4957140aa6"; + }; + } + + { + name = "mime___mime_1.3.4.tgz"; + path = fetchurl { + name = "mime___mime_1.3.4.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz"; + sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53"; + }; + } + + { + 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 = "mime___mime_1.2.11.tgz"; + path = fetchurl { + name = "mime___mime_1.2.11.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz"; + sha1 = "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"; + }; + } + + { + name = "mini_lr___mini_lr_0.1.9.tgz"; + path = fetchurl { + name = "mini_lr___mini_lr_0.1.9.tgz"; + url = "https://registry.yarnpkg.com/mini-lr/-/mini-lr-0.1.9.tgz"; + sha1 = "02199d27347953d1fd1d6dbded4261f187b2d0f6"; + }; + } + + { + name = "minimatch___minimatch_0.3.0.tgz"; + path = fetchurl { + name = "minimatch___minimatch_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz"; + sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd"; + }; + } + + { + 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 = "minimatch___minimatch_0.2.14.tgz"; + path = fetchurl { + name = "minimatch___minimatch_0.2.14.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz"; + sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a"; + }; + } + + { + name = "minimatch___minimatch_1.0.0.tgz"; + path = fetchurl { + name = "minimatch___minimatch_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz"; + sha1 = "e0dd2120b49e1b724ce8d714c520822a9438576d"; + }; + } + + { + name = "minimatch___minimatch_2.0.10.tgz"; + path = fetchurl { + name = "minimatch___minimatch_2.0.10.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz"; + sha1 = "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"; + }; + } + + { + name = "minimist___minimist_0.2.1.tgz"; + path = fetchurl { + name = "minimist___minimist_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz"; + sha1 = "827ba4e7593464e7c221e8c5bed930904ee2c455"; + }; + } + + { + name = "minimist___minimist_1.2.5.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz"; + sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602"; + }; + } + + { + name = "minimist___minimist_0.0.10.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.10.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz"; + sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf"; + }; + } + + { + name = "minipass___minipass_2.9.0.tgz"; + path = fetchurl { + name = "minipass___minipass_2.9.0.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz"; + sha1 = "e713762e7d3e32fed803115cf93e04bca9fcc9a6"; + }; + } + + { + name = "minizlib___minizlib_1.3.3.tgz"; + path = fetchurl { + name = "minizlib___minizlib_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz"; + sha1 = "2290de96818a34c29551c8a8d301216bd65a861d"; + }; + } + + { + name = "mixin_deep___mixin_deep_1.3.2.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz"; + sha1 = "1120b43dc359a785dce65b55b82e257ccf479566"; + }; + } + + { + name = "mkdirp___mkdirp_0.5.4.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.4.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz"; + sha1 = "fd01504a6797ec5c9be81ff43d204961ed64a512"; + }; + } + + { + name = "mkdirp___mkdirp_0.3.5.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.3.5.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz"; + sha1 = "de3e5f8961c88c787ee1368df849ac4413eca8d7"; + }; + } + + { + name = "mkpath___mkpath_0.1.0.tgz"; + path = fetchurl { + name = "mkpath___mkpath_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/mkpath/-/mkpath-0.1.0.tgz"; + sha1 = "7554a6f8d871834cc97b5462b122c4c124d6de91"; + }; + } + + { + name = "module_deps___module_deps_2.0.6.tgz"; + path = fetchurl { + name = "module_deps___module_deps_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/module-deps/-/module-deps-2.0.6.tgz"; + sha1 = "b999321c73ac33580f00712c0f3075fdca42563f"; + }; + } + + { + name = "mout___mout_0.9.1.tgz"; + path = fetchurl { + name = "mout___mout_0.9.1.tgz"; + url = "https://registry.yarnpkg.com/mout/-/mout-0.9.1.tgz"; + sha1 = "84f0f3fd6acc7317f63de2affdcc0cee009b0477"; + }; + } + + { + name = "ms___ms_0.7.1.tgz"; + path = fetchurl { + name = "ms___ms_0.7.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz"; + sha1 = "9cd13c03adbff25b65effde7ce864ee952017098"; + }; + } + + { + name = "ms___ms_0.7.2.tgz"; + path = fetchurl { + name = "ms___ms_0.7.2.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz"; + sha1 = "ae25cf2512b3885a1d95d7f037868d8431124765"; + }; + } + + { + 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 = "ms___ms_2.1.2.tgz"; + path = fetchurl { + name = "ms___ms_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz"; + sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009"; + }; + } + + { + name = "multipipe___multipipe_0.1.2.tgz"; + path = fetchurl { + name = "multipipe___multipipe_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz"; + sha1 = "2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"; + }; + } + + { + name = "mute_stream___mute_stream_0.0.4.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz"; + sha1 = "a9219960a6d5d5d046597aee51252c6655f7177e"; + }; + } + + { + name = "mute_stream___mute_stream_0.0.8.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz"; + sha1 = "1630c42b2251ff81e2a283de96a5497ea92e5e0d"; + }; + } + + { + name = "nan___nan_2.14.0.tgz"; + path = fetchurl { + name = "nan___nan_2.14.0.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz"; + sha1 = "7818f722027b2459a86f0295d434d1fc2336c52c"; + }; + } + + { + 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 = "natives___natives_1.1.6.tgz"; + path = fetchurl { + name = "natives___natives_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz"; + sha1 = "a603b4a498ab77173612b9ea1acdec4d980f00bb"; + }; + } + + { + name = "needle___needle_2.3.3.tgz"; + path = fetchurl { + name = "needle___needle_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz"; + sha1 = "a041ad1d04a871b0ebb666f40baaf1fb47867117"; + }; + } + + { + 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.6.1.tgz"; + path = fetchurl { + name = "neo_async___neo_async_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz"; + sha1 = "ac27ada66167fa8849a6addd837f6b189ad2081c"; + }; + } + + { + name = "nested_error_stacks___nested_error_stacks_1.0.2.tgz"; + path = fetchurl { + name = "nested_error_stacks___nested_error_stacks_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz"; + sha1 = "19f619591519f096769a5ba9a86e6eeec823c3cf"; + }; + } + + { + name = "next_tick___next_tick_0.1.0.tgz"; + path = fetchurl { + name = "next_tick___next_tick_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/next-tick/-/next-tick-0.1.0.tgz"; + sha1 = "1912cce8eb9b697d640fbba94f8f00dec3b94259"; + }; + } + + { + name = "next_tick___next_tick_1.1.0.tgz"; + path = fetchurl { + name = "next_tick___next_tick_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz"; + sha1 = "1836ee30ad56d67ef281b22bd199f709449b35eb"; + }; + } + + { + name = "next_tick___next_tick_0.2.2.tgz"; + path = fetchurl { + name = "next_tick___next_tick_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/next-tick/-/next-tick-0.2.2.tgz"; + sha1 = "75da4a927ee5887e39065880065b7336413b310d"; + }; + } + + { + 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 = "ng_annotate___ng_annotate_1.2.2.tgz"; + path = fetchurl { + name = "ng_annotate___ng_annotate_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/ng-annotate/-/ng-annotate-1.2.2.tgz"; + sha1 = "dc3fc51ba0b2f8b385dbe047f4da06f580a1fd61"; + }; + } + + { + name = "ng_classify___ng_classify_4.1.1.tgz"; + path = fetchurl { + name = "ng_classify___ng_classify_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/ng-classify/-/ng-classify-4.1.1.tgz"; + sha1 = "6688b924c3c9b5f94da5f8fbc0d55176f3dda122"; + }; + } + + { + name = "node_gyp___node_gyp_3.8.0.tgz"; + path = fetchurl { + name = "node_gyp___node_gyp_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz"; + sha1 = "540304261c330e80d0d5edce253a68cb3964218c"; + }; + } + + { + name = "node_pre_gyp___node_pre_gyp_0.14.0.tgz"; + path = fetchurl { + name = "node_pre_gyp___node_pre_gyp_0.14.0.tgz"; + url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz"; + sha1 = "9a0596533b877289bcad4e143982ca3d904ddc83"; + }; + } + + { + name = "node_sass___node_sass_4.13.1.tgz"; + path = fetchurl { + name = "node_sass___node_sass_4.13.1.tgz"; + url = "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz"; + sha1 = "9db5689696bb2eec2c32b98bfea4c7a2e992d0a3"; + }; + } + + { + name = "node_uuid___node_uuid_1.4.8.tgz"; + path = fetchurl { + name = "node_uuid___node_uuid_1.4.8.tgz"; + url = "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz"; + sha1 = "b040eb0923968afabf8d32fb1f17f1167fdab907"; + }; + } + + { + name = "node.extend___node.extend_1.1.8.tgz"; + path = fetchurl { + name = "node.extend___node.extend_1.1.8.tgz"; + url = "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.8.tgz"; + sha1 = "0aab3e63789f4e6d68b42bc00073ad1881243cf0"; + }; + } + + { + 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.3.tgz"; + path = fetchurl { + name = "nopt___nopt_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz"; + sha1 = "a375cad9d02fd921278d954c2254d5aa57e15e48"; + }; + } + + { + name = "nopt___nopt_1.0.10.tgz"; + path = fetchurl { + name = "nopt___nopt_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz"; + sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee"; + }; + } + + { + name = "nopt___nopt_2.2.1.tgz"; + path = fetchurl { + name = "nopt___nopt_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-2.2.1.tgz"; + sha1 = "2aa09b7d1768487b3b89a9c5aa52335bff0baea7"; + }; + } + + { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz"; + sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8"; + }; + } + + { + 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 = "npm_bundled___npm_bundled_1.1.1.tgz"; + path = fetchurl { + name = "npm_bundled___npm_bundled_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz"; + sha1 = "1edd570865a94cdb1bc8220775e29466c9fb234b"; + }; + } + + { + name = "npm_normalize_package_bin___npm_normalize_package_bin_1.0.1.tgz"; + path = fetchurl { + name = "npm_normalize_package_bin___npm_normalize_package_bin_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"; + sha1 = "6e79a41f23fd235c0623218228da7d9c23b8f6e2"; + }; + } + + { + name = "npm_packlist___npm_packlist_1.4.8.tgz"; + path = fetchurl { + name = "npm_packlist___npm_packlist_1.4.8.tgz"; + url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz"; + sha1 = "56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"; + }; + } + + { + 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 = "null_check___null_check_1.0.0.tgz"; + path = fetchurl { + name = "null_check___null_check_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz"; + sha1 = "977dffd7176012b9ec30d2a39db5cf72a0439edd"; + }; + } + + { + 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.3.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz"; + sha1 = "cb540f93bb2b22a7d5941691a288d60e8ea9386e"; + }; + } + + { + name = "oauth_sign___oauth_sign_0.5.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.5.0.tgz"; + sha1 = "d767f5169325620eab2e087ef0c472e773db6461"; + }; + } + + { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; + }; + } + + { + 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_assign___object_assign_4.1.0.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz"; + sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"; + }; + } + + { + name = "object_assign___object_assign_2.1.1.tgz"; + path = fetchurl { + name = "object_assign___object_assign_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz"; + sha1 = "43c36e5d569ff8e4816c4efa8be02d26967c18aa"; + }; + } + + { + name = "object_assign___object_assign_3.0.0.tgz"; + path = fetchurl { + name = "object_assign___object_assign_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz"; + sha1 = "9bedd5ca0897949bca47e7ff408062d549f587f2"; + }; + } + + { + name = "object_assign___object_assign_0.1.2.tgz"; + path = fetchurl { + name = "object_assign___object_assign_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-0.1.2.tgz"; + sha1 = "036992f073aff7b2db83d06b3fb3155a5ccac37f"; + }; + } + + { + name = "object_component___object_component_0.0.3.tgz"; + path = fetchurl { + name = "object_component___object_component_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz"; + sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291"; + }; + } + + { + 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_0.4.0.tgz"; + path = fetchurl { + name = "object_keys___object_keys_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz"; + sha1 = "28a6aae7428dd2c3a92f3d95f21335dd204e0336"; + }; + } + + { + 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.defaults___object.defaults_1.1.0.tgz"; + path = fetchurl { + name = "object.defaults___object.defaults_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz"; + sha1 = "3a7f868334b407dea06da16d88d5cd29e435fecf"; + }; + } + + { + name = "object.map___object.map_1.0.1.tgz"; + path = fetchurl { + name = "object.map___object.map_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz"; + sha1 = "cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"; + }; + } + + { + 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 = "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 = "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 = "once___once_1.3.3.tgz"; + path = fetchurl { + name = "once___once_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz"; + sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20"; + }; + } + + { + name = "opn___opn_0.1.2.tgz"; + path = fetchurl { + name = "opn___opn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/opn/-/opn-0.1.2.tgz"; + sha1 = "c527832cfd964d52096b524d0035ecaece51db4f"; + }; + } + + { + name = "optimist___optimist_0.6.1.tgz"; + path = fetchurl { + name = "optimist___optimist_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz"; + sha1 = "da3ea74686fa21a19a111c326e90eb15a0196686"; + }; + } + + { + name = "optimist___optimist_0.3.7.tgz"; + path = fetchurl { + name = "optimist___optimist_0.3.7.tgz"; + url = "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz"; + sha1 = "c90941ad59e4273328923074d2cf2e7cbc6ec0d9"; + }; + } + + { + name = "optionator___optionator_0.8.3.tgz"; + path = fetchurl { + name = "optionator___optionator_0.8.3.tgz"; + url = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz"; + sha1 = "84fa1d036fe9d3c7e21d99884b601167ec8fb495"; + }; + } + + { + name = "options___options_0.0.6.tgz"; + path = fetchurl { + name = "options___options_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz"; + sha1 = "ec22d312806bb53e731773e7cdaefcf1c643128f"; + }; + } + + { + name = "orchestrator___orchestrator_0.3.8.tgz"; + path = fetchurl { + name = "orchestrator___orchestrator_0.3.8.tgz"; + url = "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz"; + sha1 = "14e7e9e2764f7315fbac184e506c7aa6df94ad7e"; + }; + } + + { + name = "ordered_ast_traverse___ordered_ast_traverse_1.1.1.tgz"; + path = fetchurl { + name = "ordered_ast_traverse___ordered_ast_traverse_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ordered-ast-traverse/-/ordered-ast-traverse-1.1.1.tgz"; + sha1 = "6843a170bc0eee8b520cc8ddc1ddd3aa30fa057c"; + }; + } + + { + name = "ordered_esprima_props___ordered_esprima_props_1.1.0.tgz"; + path = fetchurl { + name = "ordered_esprima_props___ordered_esprima_props_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/ordered-esprima-props/-/ordered-esprima-props-1.1.0.tgz"; + sha1 = "a9827086df5f010aa60e9bd02b6e0335cea2ffcb"; + }; + } + + { + name = "ordered_read_streams___ordered_read_streams_0.1.0.tgz"; + path = fetchurl { + name = "ordered_read_streams___ordered_read_streams_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz"; + sha1 = "fd565a9af8eb4473ba69b6ed8a34352cb552f126"; + }; + } + + { + name = "os_browserify___os_browserify_0.1.2.tgz"; + path = fetchurl { + name = "os_browserify___os_browserify_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz"; + sha1 = "49ca0293e0b19590a5f5de10c7f265a617d8fe54"; + }; + } + + { + 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_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 = "osenv___osenv_0.0.3.tgz"; + path = fetchurl { + name = "osenv___osenv_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz"; + sha1 = "cd6ad8ddb290915ad9e22765576025d411f29cb6"; + }; + } + + { + name = "p_throttler___p_throttler_0.0.1.tgz"; + path = fetchurl { + name = "p_throttler___p_throttler_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/p-throttler/-/p-throttler-0.0.1.tgz"; + sha1 = "c341e3589ec843852a035e6f88e6c1e96150029b"; + }; + } + + { + name = "package_json___package_json_1.2.0.tgz"; + path = fetchurl { + name = "package_json___package_json_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz"; + sha1 = "c8ecac094227cdf76a316874ed05e27cc939a0e0"; + }; + } + + { + name = "pako___pako_0.2.9.tgz"; + path = fetchurl { + name = "pako___pako_0.2.9.tgz"; + url = "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz"; + sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75"; + }; + } + + { + name = "parents___parents_0.0.2.tgz"; + path = fetchurl { + name = "parents___parents_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/parents/-/parents-0.0.2.tgz"; + sha1 = "67147826e497d40759aaf5ba4c99659b6034d302"; + }; + } + + { + name = "parents___parents_0.0.3.tgz"; + path = fetchurl { + name = "parents___parents_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/parents/-/parents-0.0.3.tgz"; + sha1 = "fa212f024d9fa6318dbb6b4ce676c8be493b9c43"; + }; + } + + { + name = "parse_filepath___parse_filepath_1.0.2.tgz"; + path = fetchurl { + name = "parse_filepath___parse_filepath_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz"; + sha1 = "a632127f53aaf3d15876f5872f3ffac763d6c891"; + }; + } + + { + 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 = "parse_node_version___parse_node_version_1.0.1.tgz"; + path = fetchurl { + name = "parse_node_version___parse_node_version_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz"; + sha1 = "e2b5dbede00e7fa9bc363607f53327e8b073189b"; + }; + } + + { + name = "parse_passwd___parse_passwd_1.0.0.tgz"; + path = fetchurl { + name = "parse_passwd___parse_passwd_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz"; + sha1 = "6d5b934a456993b23d37f40a382d6f1666a8e5c6"; + }; + } + + { + name = "parsejson___parsejson_0.0.3.tgz"; + path = fetchurl { + name = "parsejson___parsejson_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz"; + sha1 = "ab7e3759f209ece99437973f7d0f1f64ae0e64ab"; + }; + } + + { + name = "parseqs___parseqs_0.0.5.tgz"; + path = fetchurl { + name = "parseqs___parseqs_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz"; + sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d"; + }; + } + + { + name = "parseuri___parseuri_0.0.5.tgz"; + path = fetchurl { + name = "parseuri___parseuri_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz"; + sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a"; + }; + } + + { + name = "parseurl___parseurl_1.3.3.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz"; + sha1 = "9da19e7bee8d12dff0513ed5b76957793bc2e8d4"; + }; + } + + { + 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.1.tgz"; + path = fetchurl { + name = "path_browserify___path_browserify_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz"; + sha1 = "e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"; + }; + } + + { + 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_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_parse___path_parse_1.0.6.tgz"; + path = fetchurl { + name = "path_parse___path_parse_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; + sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; + }; + } + + { + name = "path_platform___path_platform_0.0.1.tgz"; + path = fetchurl { + name = "path_platform___path_platform_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-platform/-/path-platform-0.0.1.tgz"; + sha1 = "b5585d7c3c463d89aa0060d86611cf1afd617e2a"; + }; + } + + { + name = "path_root_regex___path_root_regex_0.1.2.tgz"; + path = fetchurl { + name = "path_root_regex___path_root_regex_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz"; + sha1 = "bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"; + }; + } + + { + name = "path_root___path_root_0.1.1.tgz"; + path = fetchurl { + name = "path_root___path_root_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz"; + sha1 = "9a4a6814cac1c0cd73360a95f32083c8ea4745b7"; + }; + } + + { + 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 = "pause_stream___pause_stream_0.0.11.tgz"; + path = fetchurl { + name = "pause_stream___pause_stream_0.0.11.tgz"; + url = "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz"; + sha1 = "fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"; + }; + } + + { + 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 = "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 = "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 = "prelude_ls___prelude_ls_1.1.2.tgz"; + path = fetchurl { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + } + + { + 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_hrtime___pretty_hrtime_1.0.3.tgz"; + path = fetchurl { + name = "pretty_hrtime___pretty_hrtime_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"; + sha1 = "b7e3ea42435a4c9b2759d99e0f201eb195802ee1"; + }; + } + + { + name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; + sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"; + }; + } + + { + name = "process___process_0.7.0.tgz"; + path = fetchurl { + name = "process___process_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/process/-/process-0.7.0.tgz"; + sha1 = "c52208161a34adf3812344ae85d3e6150469389d"; + }; + } + + { + name = "process___process_0.5.2.tgz"; + path = fetchurl { + name = "process___process_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz"; + sha1 = "1638d8a8e34c2f440a91db95ab9aeb677fc185cf"; + }; + } + + { + name = "process___process_0.6.0.tgz"; + path = fetchurl { + name = "process___process_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/process/-/process-0.6.0.tgz"; + sha1 = "7dd9be80ffaaedd4cb628f1827f1cbab6dc0918f"; + }; + } + + { + name = "promise___promise_7.3.1.tgz"; + path = fetchurl { + name = "promise___promise_7.3.1.tgz"; + url = "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz"; + sha1 = "064b72602b18f90f29192b8b1bc418ffd1ebd3bf"; + }; + } + + { + name = "promptly___promptly_0.2.1.tgz"; + path = fetchurl { + name = "promptly___promptly_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/promptly/-/promptly-0.2.1.tgz"; + sha1 = "6444e7ca4dbd9899e7eeb5ec3922827ebdc22b3b"; + }; + } + + { + 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 = "psl___psl_1.8.0.tgz"; + path = fetchurl { + name = "psl___psl_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz"; + sha1 = "9326f8bcfb013adcc005fdff056acce020e51c24"; + }; + } + + { + name = "pug_attrs___pug_attrs_2.0.4.tgz"; + path = fetchurl { + name = "pug_attrs___pug_attrs_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.4.tgz"; + sha1 = "b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336"; + }; + } + + { + name = "pug_code_gen___pug_code_gen_2.0.2.tgz"; + path = fetchurl { + name = "pug_code_gen___pug_code_gen_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.2.tgz"; + sha1 = "ad0967162aea077dcf787838d94ed14acb0217c2"; + }; + } + + { + name = "pug_error___pug_error_1.3.3.tgz"; + path = fetchurl { + name = "pug_error___pug_error_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.3.tgz"; + sha1 = "f342fb008752d58034c185de03602dd9ffe15fa6"; + }; + } + + { + name = "pug_filters___pug_filters_3.1.1.tgz"; + path = fetchurl { + name = "pug_filters___pug_filters_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.1.tgz"; + sha1 = "ab2cc82db9eeccf578bda89130e252a0db026aa7"; + }; + } + + { + name = "pug_lexer___pug_lexer_4.1.0.tgz"; + path = fetchurl { + name = "pug_lexer___pug_lexer_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.1.0.tgz"; + sha1 = "531cde48c7c0b1fcbbc2b85485c8665e31489cfd"; + }; + } + + { + name = "pug_linker___pug_linker_3.0.6.tgz"; + path = fetchurl { + name = "pug_linker___pug_linker_3.0.6.tgz"; + url = "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.6.tgz"; + sha1 = "f5bf218b0efd65ce6670f7afc51658d0f82989fb"; + }; + } + + { + name = "pug_load___pug_load_2.0.12.tgz"; + path = fetchurl { + name = "pug_load___pug_load_2.0.12.tgz"; + url = "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.12.tgz"; + sha1 = "d38c85eb85f6e2f704dea14dcca94144d35d3e7b"; + }; + } + + { + name = "pug_parser___pug_parser_5.0.1.tgz"; + path = fetchurl { + name = "pug_parser___pug_parser_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.1.tgz"; + sha1 = "03e7ada48b6840bd3822f867d7d90f842d0ffdc9"; + }; + } + + { + name = "pug_runtime___pug_runtime_2.0.5.tgz"; + path = fetchurl { + name = "pug_runtime___pug_runtime_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.5.tgz"; + sha1 = "6da7976c36bf22f68e733c359240d8ae7a32953a"; + }; + } + + { + name = "pug_strip_comments___pug_strip_comments_1.0.4.tgz"; + path = fetchurl { + name = "pug_strip_comments___pug_strip_comments_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz"; + sha1 = "cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8"; + }; + } + + { + name = "pug_walk___pug_walk_1.1.8.tgz"; + path = fetchurl { + name = "pug_walk___pug_walk_1.1.8.tgz"; + url = "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.8.tgz"; + sha1 = "b408f67f27912f8c21da2f45b7230c4bd2a5ea7a"; + }; + } + + { + name = "pug___pug_2.0.4.tgz"; + path = fetchurl { + name = "pug___pug_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pug/-/pug-2.0.4.tgz"; + sha1 = "ee7682ec0a60494b38d48a88f05f3b0ac931377d"; + }; + } + + { + 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_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 = "punycode___punycode_1.2.4.tgz"; + path = fetchurl { + name = "punycode___punycode_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.2.4.tgz"; + sha1 = "54008ac972aec74175def9cba6df7fa9d3918740"; + }; + } + + { + 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 = "q___q_0.9.7.tgz"; + path = fetchurl { + name = "q___q_0.9.7.tgz"; + url = "https://registry.yarnpkg.com/q/-/q-0.9.7.tgz"; + sha1 = "4de2e6cb3b29088c9e4cbc03bf9d42fb96ce2f75"; + }; + } + + { + name = "q___q_1.0.1.tgz"; + path = fetchurl { + name = "q___q_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz"; + sha1 = "11872aeedee89268110b10a718448ffb10112a14"; + }; + } + + { + name = "qs___qs_5.2.0.tgz"; + path = fetchurl { + name = "qs___qs_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz"; + sha1 = "a9f31142af468cb72b25b30136ba2456834916be"; + }; + } + + { + name = "qs___qs_6.7.0.tgz"; + path = fetchurl { + name = "qs___qs_6.7.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz"; + sha1 = "41dc1a015e3d581f1621776be31afb2876a9b1bc"; + }; + } + + { + name = "qs___qs_0.6.6.tgz"; + path = fetchurl { + name = "qs___qs_0.6.6.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz"; + sha1 = "6e015098ff51968b8a3c819001d5f2c89bc4b107"; + }; + } + + { + name = "qs___qs_1.0.2.tgz"; + path = fetchurl { + name = "qs___qs_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-1.0.2.tgz"; + sha1 = "50a93e2b5af6691c31bcea5dae78ee6ea1903768"; + }; + } + + { + name = "qs___qs_2.2.5.tgz"; + path = fetchurl { + name = "qs___qs_2.2.5.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz"; + sha1 = "1088abaf9dcc0ae5ae45b709e6c6b5888b23923c"; + }; + } + + { + name = "qs___qs_2.3.3.tgz"; + path = fetchurl { + name = "qs___qs_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz"; + sha1 = "e9e85adbe75da0bbe4c8e0476a086290f863b404"; + }; + } + + { + 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 = "querystring_es3___querystring_es3_0.2.0.tgz"; + path = fetchurl { + name = "querystring_es3___querystring_es3_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.0.tgz"; + sha1 = "c365a08a69c443accfeb3a9deab35e3f0abaa476"; + }; + } + + { + 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 = "randomatic___randomatic_3.1.1.tgz"; + path = fetchurl { + name = "randomatic___randomatic_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz"; + sha1 = "b776efc59375984e36c537b2f51a1f0aff0da1ed"; + }; + } + + { + name = "range_parser___range_parser_1.0.3.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz"; + sha1 = "6872823535c692e2c2a0103826afd82c2e0ff175"; + }; + } + + { + name = "raw_body___raw_body_2.4.0.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz"; + sha1 = "a1ce6fb9c9bc356ca52e89256ab59059e13d0332"; + }; + } + + { + name = "raw_body___raw_body_2.1.7.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.1.7.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz"; + sha1 = "adfeace2e4fb3098058014d08c072dcc59758774"; + }; + } + + { + 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_all_stream___read_all_stream_3.1.0.tgz"; + path = fetchurl { + name = "read_all_stream___read_all_stream_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz"; + sha1 = "35c3e177f2078ef789ee4bfafa4373074eaef4fa"; + }; + } + + { + 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___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___read_1.0.7.tgz"; + path = fetchurl { + name = "read___read_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz"; + sha1 = "b3da19bd052431a97671d44a42634adf710b40c4"; + }; + } + + { + 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_1.1.14.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_1.1.14.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz"; + sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9"; + }; + } + + { + name = "readable_stream___readable_stream_2.3.7.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.7.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz"; + sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57"; + }; + } + + { + name = "readdirp___readdirp_2.2.1.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; + sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; + }; + } + + { + name = "readline2___readline2_0.1.1.tgz"; + path = fetchurl { + name = "readline2___readline2_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz"; + sha1 = "99443ba6e83b830ef3051bfd7dc241a82728d568"; + }; + } + + { + name = "rechoir___rechoir_0.6.2.tgz"; + path = fetchurl { + name = "rechoir___rechoir_0.6.2.tgz"; + url = "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz"; + sha1 = "85204b54dba82d5742e28c96756ef43af50e3384"; + }; + } + + { + 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 = "redeyed___redeyed_0.4.4.tgz"; + path = fetchurl { + name = "redeyed___redeyed_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz"; + sha1 = "37e990a6f2b21b2a11c2e6a48fd4135698cba97f"; + }; + } + + { + 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 = "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 = "registry_url___registry_url_3.1.0.tgz"; + path = fetchurl { + name = "registry_url___registry_url_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz"; + sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942"; + }; + } + + { + 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 = "repeat_element___repeat_element_1.1.3.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; + sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; + }; + } + + { + name = "repeat_string___repeat_string_0.2.2.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz"; + sha1 = "c7a8d3236068362059a7e4651fc6884e8b1fb4ae"; + }; + } + + { + 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 = "replace_ext___replace_ext_0.0.1.tgz"; + path = fetchurl { + name = "replace_ext___replace_ext_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz"; + sha1 = "29bbd92078a739f0bcce2b4ee41e837953522924"; + }; + } + + { + name = "replace_ext___replace_ext_1.0.0.tgz"; + path = fetchurl { + name = "replace_ext___replace_ext_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz"; + sha1 = "de63128373fcbf7c3ccfa4de5a480c45a67958eb"; + }; + } + + { + name = "replacestream___replacestream_4.0.3.tgz"; + path = fetchurl { + name = "replacestream___replacestream_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/replacestream/-/replacestream-4.0.3.tgz"; + sha1 = "3ee5798092be364b1cdb1484308492cb3dff2f36"; + }; + } + + { + name = "request_progress___request_progress_0.3.1.tgz"; + path = fetchurl { + name = "request_progress___request_progress_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.1.tgz"; + sha1 = "0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a"; + }; + } + + { + name = "request_replay___request_replay_0.2.0.tgz"; + path = fetchurl { + name = "request_replay___request_replay_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/request-replay/-/request-replay-0.2.0.tgz"; + sha1 = "9b693a5d118b39f5c596ead5ed91a26444057f60"; + }; + } + + { + name = "request___request_2.88.2.tgz"; + path = fetchurl { + name = "request___request_2.88.2.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz"; + sha1 = "d73c918731cb5a87da047e207234146f664d12b3"; + }; + } + + { + name = "request___request_2.27.0.tgz"; + path = fetchurl { + name = "request___request_2.27.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.27.0.tgz"; + sha1 = "dfb1a224dd3a5a9bade4337012503d710e538668"; + }; + } + + { + name = "request___request_2.36.0.tgz"; + path = fetchurl { + name = "request___request_2.36.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.36.0.tgz"; + sha1 = "28c6c04262c7b9ffdd21b9255374517ee6d943f5"; + }; + } + + { + name = "request___request_2.40.0.tgz"; + path = fetchurl { + name = "request___request_2.40.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.40.0.tgz"; + sha1 = "4dd670f696f1e6e842e66b4b5e839301ab9beb67"; + }; + } + + { + name = "request___request_2.51.0.tgz"; + path = fetchurl { + name = "request___request_2.51.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.51.0.tgz"; + sha1 = "35d00bbecc012e55f907b1bd9e0dbd577bfef26e"; + }; + } + + { + 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_dir___resolve_dir_1.0.1.tgz"; + path = fetchurl { + name = "resolve_dir___resolve_dir_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz"; + sha1 = "79a40644c362be82f26effe739c9bb5382046f43"; + }; + } + + { + 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 = "resolve___resolve_0.6.3.tgz"; + path = fetchurl { + name = "resolve___resolve_0.6.3.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz"; + sha1 = "dd957982e7e736debdf53b58a4dd91754575dd46"; + }; + } + + { + name = "resolve___resolve_1.1.7.tgz"; + path = fetchurl { + name = "resolve___resolve_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz"; + sha1 = "203114d82ad2c5ed9e8e0411b3932875e889e97b"; + }; + } + + { + name = "resolve___resolve_1.15.1.tgz"; + path = fetchurl { + name = "resolve___resolve_1.15.1.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz"; + sha1 = "27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"; + }; + } + + { + name = "resolve___resolve_0.3.1.tgz"; + path = fetchurl { + name = "resolve___resolve_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-0.3.1.tgz"; + sha1 = "34c63447c664c70598d1c9b126fc43b2a24310a4"; + }; + } + + { + 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 = "retry___retry_0.6.1.tgz"; + path = fetchurl { + name = "retry___retry_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/retry/-/retry-0.6.1.tgz"; + sha1 = "fdc90eed943fde11b893554b8cc63d0e899ba918"; + }; + } + + { + name = "rfile___rfile_1.0.0.tgz"; + path = fetchurl { + name = "rfile___rfile_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/rfile/-/rfile-1.0.0.tgz"; + sha1 = "59708cf90ca1e74c54c3cfc5c36fdb9810435261"; + }; + } + + { + 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.7.1.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz"; + sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec"; + }; + } + + { + name = "rimraf___rimraf_2.2.8.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.2.8.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz"; + sha1 = "e439be2aaee327321952730f99a8929e4fc50582"; + }; + } + + { + name = "rimraf___rimraf_2.4.5.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.4.5.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz"; + sha1 = "ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"; + }; + } + + { + name = "ruglify___ruglify_1.0.0.tgz"; + path = fetchurl { + name = "ruglify___ruglify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/ruglify/-/ruglify-1.0.0.tgz"; + sha1 = "dc8930e2a9544a274301cc9972574c0d0986b675"; + }; + } + + { + name = "run_sequence___run_sequence_1.1.5.tgz"; + path = fetchurl { + name = "run_sequence___run_sequence_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/run-sequence/-/run-sequence-1.1.5.tgz"; + sha1 = "556bd47eb47877349e36c9c582748897db7be4f7"; + }; + } + + { + name = "safe_buffer___safe_buffer_5.2.0.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz"; + sha1 = "b74daec49b1148f88c64b68d49b1e815c1f2f519"; + }; + } + + { + 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 = "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 = "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 = "semver_diff___semver_diff_2.1.0.tgz"; + path = fetchurl { + name = "semver_diff___semver_diff_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz"; + sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"; + }; + } + + { + name = "semver___semver_5.7.1.tgz"; + path = fetchurl { + name = "semver___semver_5.7.1.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz"; + sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7"; + }; + } + + { + name = "semver___semver_4.3.6.tgz"; + path = fetchurl { + name = "semver___semver_4.3.6.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz"; + sha1 = "300bc6e0e86374f7ba61068b5b1ecd57fc6532da"; + }; + } + + { + name = "semver___semver_2.3.2.tgz"; + path = fetchurl { + name = "semver___semver_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz"; + sha1 = "b9848f25d6cf36333073ec9ef8856d42f1233e52"; + }; + } + + { + 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.13.2.tgz"; + path = fetchurl { + name = "send___send_0.13.2.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz"; + sha1 = "765e7607c8055452bba6f0b052595350986036de"; + }; + } + + { + name = "sequencify___sequencify_0.0.7.tgz"; + path = fetchurl { + name = "sequencify___sequencify_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz"; + sha1 = "90cff19d02e07027fd767f5ead3e7b95d1e7380c"; + }; + } + + { + name = "serve_static___serve_static_1.10.3.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.10.3.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz"; + sha1 = "ce5a6ecd3101fed5ec09827dac22a9c29bfb0535"; + }; + } + + { + 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_value___set_value_2.0.1.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz"; + sha1 = "a18d40530e6f07de4228c7defe4227af8cad005b"; + }; + } + + { + name = "setprototypeof___setprototypeof_1.1.1.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz"; + sha1 = "7e95acb24aa92f5885e0abef5ba131330d4ae683"; + }; + } + + { + name = "shallow_copy___shallow_copy_0.0.1.tgz"; + path = fetchurl { + name = "shallow_copy___shallow_copy_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz"; + sha1 = "415f42702d73d810330292cc5ee86eae1a11a170"; + }; + } + + { + name = "shell_quote___shell_quote_0.0.1.tgz"; + path = fetchurl { + name = "shell_quote___shell_quote_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-0.0.1.tgz"; + sha1 = "1a41196f3c0333c482323593d6886ecf153dd986"; + }; + } + + { + name = "shell_quote___shell_quote_1.4.3.tgz"; + path = fetchurl { + name = "shell_quote___shell_quote_1.4.3.tgz"; + url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.3.tgz"; + sha1 = "952c44e0b1ed9013ef53958179cc643e8777466b"; + }; + } + + { + name = "sigmund___sigmund_1.0.1.tgz"; + path = fetchurl { + name = "sigmund___sigmund_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz"; + sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; + }; + } + + { + name = "signal_exit___signal_exit_3.0.3.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz"; + sha1 = "a1410c2edd8f077b08b4e253c8eacfcaf057461c"; + }; + } + + { + name = "simple_fmt___simple_fmt_0.1.0.tgz"; + path = fetchurl { + name = "simple_fmt___simple_fmt_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz"; + sha1 = "191bf566a59e6530482cb25ab53b4a8dc85c3a6b"; + }; + } + + { + name = "simple_is___simple_is_0.2.0.tgz"; + path = fetchurl { + name = "simple_is___simple_is_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz"; + sha1 = "2abb75aade39deb5cc815ce10e6191164850baf0"; + }; + } + + { + 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_0.2.4.tgz"; + path = fetchurl { + name = "sntp___sntp_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz"; + sha1 = "fb885f18b0f3aad189f824862536bceeec750900"; + }; + } + + { + name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; + path = fetchurl { + name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz"; + sha1 = "cb6d4bb8bec81e1078b99677f9ced0046066bb8b"; + }; + } + + { + name = "socket.io_client___socket.io_client_1.7.4.tgz"; + path = fetchurl { + name = "socket.io_client___socket.io_client_1.7.4.tgz"; + url = "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz"; + sha1 = "ec9f820356ed99ef6d357f0756d648717bdd4281"; + }; + } + + { + name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; + path = fetchurl { + name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz"; + sha1 = "dd532025103ce429697326befd64005fcfe5b4a0"; + }; + } + + { + name = "socket.io___socket.io_1.7.4.tgz"; + path = fetchurl { + name = "socket.io___socket.io_1.7.4.tgz"; + url = "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz"; + sha1 = "2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00"; + }; + } + + { + name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; + sha1 = "190866bece7553e1f8f267a2ee82c606b5509a1a"; + }; + } + + { + 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.34.tgz"; + path = fetchurl { + name = "source_map___source_map_0.1.34.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz"; + sha1 = "a7cfe89aec7b1682c3b198d0acfb47d7d090566b"; + }; + } + + { + 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 = "source_map___source_map_0.2.0.tgz"; + path = fetchurl { + name = "source_map___source_map_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz"; + sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"; + }; + } + + { + name = "source_map___source_map_0.3.0.tgz"; + path = fetchurl { + name = "source_map___source_map_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.3.0.tgz"; + sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9"; + }; + } + + { + name = "sparkles___sparkles_1.0.1.tgz"; + path = fetchurl { + name = "sparkles___sparkles_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz"; + sha1 = "008db65edce6c50eec0c5e228e1945061dd0437c"; + }; + } + + { + name = "spdx_correct___spdx_correct_3.1.0.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz"; + sha1 = "fb83e504445268f154b074e218c87c003cd31df4"; + }; + } + + { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz"; + sha1 = "2ea450aee74f2a89bfb94519c07fcd6f41322977"; + }; + } + + { + 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.5.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz"; + sha1 = "3694b5804567a458d3c8045842a6358632f62654"; + }; + } + + { + 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 = "split___split_0.3.3.tgz"; + path = fetchurl { + name = "split___split_0.3.3.tgz"; + url = "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz"; + sha1 = "cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"; + }; + } + + { + name = "split___split_1.0.1.tgz"; + path = fetchurl { + name = "split___split_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz"; + sha1 = "605bd9be303aa59fb35f9229fbea0ddec9ea07d9"; + }; + } + + { + 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.16.1.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.16.1.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz"; + sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877"; + }; + } + + { + name = "stable___stable_0.1.8.tgz"; + path = fetchurl { + name = "stable___stable_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz"; + sha1 = "836eb3c8382fe2936feaf544631017ce7d47a3cf"; + }; + } + + { + 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.2.1.tgz"; + path = fetchurl { + name = "statuses___statuses_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz"; + sha1 = "dded45cc18256d51ed40aec142489d5c61026d28"; + }; + } + + { + name = "stdout_stream___stdout_stream_1.4.1.tgz"; + path = fetchurl { + name = "stdout_stream___stdout_stream_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz"; + sha1 = "5ac174cdd5cd726104aa0c0b2bd83815d8d535de"; + }; + } + + { + name = "stream_browserify___stream_browserify_0.1.3.tgz"; + path = fetchurl { + name = "stream_browserify___stream_browserify_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-0.1.3.tgz"; + sha1 = "95cf1b369772e27adaf46352265152689c6c4be9"; + }; + } + + { + name = "stream_combiner___stream_combiner_0.2.2.tgz"; + path = fetchurl { + name = "stream_combiner___stream_combiner_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz"; + sha1 = "aec8cbac177b56b6f4fa479ced8c1912cee52858"; + }; + } + + { + name = "stream_combiner___stream_combiner_0.0.4.tgz"; + path = fetchurl { + name = "stream_combiner___stream_combiner_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz"; + sha1 = "4d5e433c185261dde623ca3f44c586bcf5c4ad14"; + }; + } + + { + name = "stream_combiner___stream_combiner_0.1.0.tgz"; + path = fetchurl { + name = "stream_combiner___stream_combiner_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.1.0.tgz"; + sha1 = "0dc389a3c203f8f4d56368f95dde52eb9269b5be"; + }; + } + + { + name = "stream_consume___stream_consume_0.1.1.tgz"; + path = fetchurl { + name = "stream_consume___stream_consume_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz"; + sha1 = "d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48"; + }; + } + + { + name = "stream_shift___stream_shift_1.0.1.tgz"; + path = fetchurl { + name = "stream_shift___stream_shift_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz"; + sha1 = "d7088281559ab2778424279b0877da3c392d5a3d"; + }; + } + + { + name = "string_length___string_length_1.0.1.tgz"; + path = fetchurl { + name = "string_length___string_length_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz"; + sha1 = "56970fb1c38558e9e70b728bf3de269ac45adfac"; + }; + } + + { + 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_0.0.1.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.0.1.tgz"; + sha1 = "f5472d0a8d1650ec823752d24e6fd627b39bf141"; + }; + } + + { + 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 = "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 = "stringify_object___stringify_object_0.2.1.tgz"; + path = fetchurl { + name = "stringify_object___stringify_object_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-0.2.1.tgz"; + sha1 = "b58be50b3ff5f371038c545d4332656bfded5620"; + }; + } + + { + name = "stringmap___stringmap_0.2.2.tgz"; + path = fetchurl { + name = "stringmap___stringmap_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz"; + sha1 = "556c137b258f942b8776f5b2ef582aa069d7d1b1"; + }; + } + + { + name = "stringset___stringset_0.2.1.tgz"; + path = fetchurl { + name = "stringset___stringset_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz"; + sha1 = "ef259c4e349344377fcd1c913dd2e848c9c042b5"; + }; + } + + { + 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_0.3.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz"; + sha1 = "25f48ea22ca79187f3174a4db8759347bb126220"; + }; + } + + { + name = "strip_ansi___strip_ansi_2.0.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz"; + sha1 = "df62c1aa94ed2f114e1d0f21fd1d50482b79a60e"; + }; + } + + { + 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_ansi___strip_ansi_0.1.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz"; + sha1 = "39e8a98d044d150660abe4a6808acf70bb7bc991"; + }; + } + + { + name = "strip_bom___strip_bom_1.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz"; + sha1 = "85b8862f3844b5a6d5ec8467a93598173a36f794"; + }; + } + + { + 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_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 = "subarg___subarg_0.0.1.tgz"; + path = fetchurl { + name = "subarg___subarg_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/subarg/-/subarg-0.0.1.tgz"; + sha1 = "3d56b07dacfbc45bbb63f7672b43b63e46368e3a"; + }; + } + + { + name = "supports_color___supports_color_0.2.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz"; + sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a"; + }; + } + + { + 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_7.1.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz"; + sha1 = "68e32591df73e25ad1c4b49108a2ec507962bfd1"; + }; + } + + { + name = "syntax_error___syntax_error_1.1.6.tgz"; + path = fetchurl { + name = "syntax_error___syntax_error_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.1.6.tgz"; + sha1 = "b4549706d386cc1c1dc7c2423f18579b6cade710"; + }; + } + + { + name = "tar___tar_2.2.2.tgz"; + path = fetchurl { + name = "tar___tar_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz"; + sha1 = "0ca8848562c7299b8b446ff6a4d60cdbb23edc40"; + }; + } + + { + name = "tar___tar_4.4.13.tgz"; + path = fetchurl { + name = "tar___tar_4.4.13.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz"; + sha1 = "43b364bc52888d555298637b10d60790254ab525"; + }; + } + + { + name = "tar___tar_0.1.20.tgz"; + path = fetchurl { + name = "tar___tar_0.1.20.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-0.1.20.tgz"; + sha1 = "42940bae5b5f22c74483699126f9f3f27449cb13"; + }; + } + + { + name = "ternary_stream___ternary_stream_2.1.1.tgz"; + path = fetchurl { + name = "ternary_stream___ternary_stream_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-2.1.1.tgz"; + sha1 = "4ad64b98668d796a085af2c493885a435a8a8bfc"; + }; + } + + { + name = "textextensions___textextensions_1.0.2.tgz"; + path = fetchurl { + name = "textextensions___textextensions_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/textextensions/-/textextensions-1.0.2.tgz"; + sha1 = "65486393ee1f2bb039a60cbba05b0b68bd9501d2"; + }; + } + + { + name = "throttleit___throttleit_0.0.2.tgz"; + path = fetchurl { + name = "throttleit___throttleit_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz"; + sha1 = "cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"; + }; + } + + { + name = "through2___through2_0.4.2.tgz"; + path = fetchurl { + name = "through2___through2_0.4.2.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz"; + sha1 = "dbf5866031151ec8352bb6c4db64a2292a840b9b"; + }; + } + + { + name = "through2___through2_0.5.1.tgz"; + path = fetchurl { + name = "through2___through2_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz"; + sha1 = "dfdd012eb9c700e2323fd334f38ac622ab372da7"; + }; + } + + { + name = "through2___through2_0.6.5.tgz"; + path = fetchurl { + name = "through2___through2_0.6.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz"; + sha1 = "41ab9c67b29d57209071410e1d7a7a968cd3ad48"; + }; + } + + { + name = "through2___through2_2.0.5.tgz"; + path = fetchurl { + name = "through2___through2_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; + sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; + }; + } + + { + name = "through___through_2.3.8.tgz"; + path = fetchurl { + name = "through___through_2.3.8.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + } + + { + name = "through___through_2.2.7.tgz"; + path = fetchurl { + name = "through___through_2.2.7.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.2.7.tgz"; + sha1 = "6e8e21200191d4eb6a99f6f010df46aa1c6eb2bd"; + }; + } + + { + name = "tildify___tildify_1.2.0.tgz"; + path = fetchurl { + name = "tildify___tildify_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz"; + sha1 = "dcec03f55dca9b7aa3e5b04f21817eb56e63588a"; + }; + } + + { + name = "time_stamp___time_stamp_1.1.0.tgz"; + path = fetchurl { + name = "time_stamp___time_stamp_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz"; + sha1 = "764a5a11af50561921b133f3b44e618687e0f5c3"; + }; + } + + { + name = "timed_out___timed_out_2.0.0.tgz"; + path = fetchurl { + name = "timed_out___timed_out_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz"; + sha1 = "f38b0ae81d3747d628001f41dafc652ace671c0a"; + }; + } + + { + name = "timers_browserify___timers_browserify_1.0.3.tgz"; + path = fetchurl { + name = "timers_browserify___timers_browserify_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.0.3.tgz"; + sha1 = "ffba70c9c12eed916fd67318e629ac6f32295551"; + }; + } + + { + name = "timers_ext___timers_ext_0.1.7.tgz"; + path = fetchurl { + name = "timers_ext___timers_ext_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz"; + sha1 = "6f57ad8578e07a3fb9f91d9387d65647555e25c6"; + }; + } + + { + name = "tmp___tmp_0.0.23.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.23.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.23.tgz"; + sha1 = "de874aa5e974a85f0a32cdfdbd74663cb3bd9c74"; + }; + } + + { + name = "tmp___tmp_0.0.33.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.33.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; + sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; + }; + } + + { + name = "to_array___to_array_0.1.4.tgz"; + path = fetchurl { + name = "to_array___to_array_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz"; + sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"; + }; + } + + { + 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 = "toidentifier___toidentifier_1.0.0.tgz"; + path = fetchurl { + name = "toidentifier___toidentifier_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz"; + sha1 = "7e1be3470f1e77948bc43d94a3c8f4d7752ba553"; + }; + } + + { + name = "token_stream___token_stream_0.0.1.tgz"; + path = fetchurl { + name = "token_stream___token_stream_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz"; + sha1 = "ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"; + }; + } + + { + name = "touch___touch_0.0.2.tgz"; + path = fetchurl { + name = "touch___touch_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/touch/-/touch-0.0.2.tgz"; + sha1 = "a65a777795e5cbbe1299499bdc42281ffb21b5f4"; + }; + } + + { + name = "tough_cookie___tough_cookie_4.0.0.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz"; + sha1 = "d822234eeca882f991f0f908824ad2622ddbece4"; + }; + } + + { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz"; + sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"; + }; + } + + { + name = "traverse___traverse_0.3.9.tgz"; + path = fetchurl { + name = "traverse___traverse_0.3.9.tgz"; + url = "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz"; + sha1 = "717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"; + }; + } + + { + 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 = "true_case_path___true_case_path_1.0.3.tgz"; + path = fetchurl { + name = "true_case_path___true_case_path_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz"; + sha1 = "f813b5a8c86b40da59606722b144e3225799f47d"; + }; + } + + { + name = "tryor___tryor_0.1.2.tgz"; + path = fetchurl { + name = "tryor___tryor_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz"; + sha1 = "8145e4ca7caff40acde3ccf946e8b8bb75b4172b"; + }; + } + + { + name = "tty_browserify___tty_browserify_0.0.1.tgz"; + path = fetchurl { + name = "tty_browserify___tty_browserify_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz"; + sha1 = "3f05251ee17904dfd0677546670db9651682b811"; + }; + } + + { + 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 = "tunnel_agent___tunnel_agent_0.3.0.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.3.0.tgz"; + sha1 = "ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee"; + }; + } + + { + name = "tunnel_agent___tunnel_agent_0.4.3.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz"; + sha1 = "6373db76909fe570e08d73583365ed828a74eeeb"; + }; + } + + { + 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_check___type_check_0.3.2.tgz"; + path = fetchurl { + name = "type_check___type_check_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + } + + { + name = "type_is___type_is_1.6.18.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.18.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz"; + sha1 = "4e552cd05df09467dcbc4ef739de89f2cf37c131"; + }; + } + + { + name = "type___type_1.2.0.tgz"; + path = fetchurl { + name = "type___type_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz"; + sha1 = "848dd7698dafa3e54a6c479e759c4bc3f18847a0"; + }; + } + + { + name = "type___type_2.0.0.tgz"; + path = fetchurl { + name = "type___type_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz"; + sha1 = "5f16ff6ef2eb44f260494dae271033b29c09a9c3"; + }; + } + + { + name = "typedarray___typedarray_0.0.6.tgz"; + path = fetchurl { + name = "typedarray___typedarray_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + } + + { + name = "uglify_js___uglify_js_2.5.0.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.5.0.tgz"; + sha1 = "4ab5d65a4730ecb7a4fb62d3f499e2054d98fba1"; + }; + } + + { + 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_js___uglify_js_3.8.1.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_3.8.1.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.1.tgz"; + sha1 = "43bb15ce6f545eaa0a64c49fd29375ea09fa0f93"; + }; + } + + { + name = "uglify_js___uglify_js_2.2.5.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_2.2.5.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.2.5.tgz"; + sha1 = "a6e02a70d839792b9780488b7b8b184c095c99c7"; + }; + } + + { + name = "uglify_js___uglify_js_2.3.6.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_2.3.6.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz"; + sha1 = "fa0984770b428b7a9b2a8058f46355d14fef211a"; + }; + } + + { + name = "uglify_js___uglify_js_2.4.24.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_2.4.24.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.4.24.tgz"; + sha1 = "fad5755c1e1577658bb06ff9ab6e548c95bebd6e"; + }; + } + + { + name = "uglify_save_license___uglify_save_license_0.4.1.tgz"; + path = fetchurl { + name = "uglify_save_license___uglify_save_license_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz"; + sha1 = "95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1"; + }; + } + + { + 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 = "ultron___ultron_1.0.2.tgz"; + path = fetchurl { + name = "ultron___ultron_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz"; + sha1 = "ace116ab557cd197386a4e88f4685378c8b2e4fa"; + }; + } + + { + name = "umd___umd_2.0.0.tgz"; + path = fetchurl { + name = "umd___umd_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/umd/-/umd-2.0.0.tgz"; + sha1 = "749683b0d514728ae0e1b6195f5774afc0ad4f8f"; + }; + } + + { + name = "unc_path_regex___unc_path_regex_0.1.2.tgz"; + path = fetchurl { + name = "unc_path_regex___unc_path_regex_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz"; + sha1 = "e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"; + }; + } + + { + name = "underscore.string___underscore.string_2.4.0.tgz"; + path = fetchurl { + name = "underscore.string___underscore.string_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz"; + sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b"; + }; + } + + { + name = "underscore___underscore_1.7.0.tgz"; + path = fetchurl { + name = "underscore___underscore_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz"; + sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209"; + }; + } + + { + name = "union_value___union_value_1.0.1.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz"; + sha1 = "0b6fe7b835aecda61c6ea4d4f02c14221e109847"; + }; + } + + { + name = "unique_stream___unique_stream_1.0.0.tgz"; + path = fetchurl { + name = "unique_stream___unique_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz"; + sha1 = "d59a4a75427447d9aa6c91e70263f8d26a4b104b"; + }; + } + + { + name = "universalify___universalify_0.1.2.tgz"; + path = fetchurl { + name = "universalify___universalify_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz"; + sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66"; + }; + } + + { + 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 = "update_notifier___update_notifier_0.2.2.tgz"; + path = fetchurl { + name = "update_notifier___update_notifier_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.2.2.tgz"; + sha1 = "e69b3a784b4e686a2acd98f5e66944591996e187"; + }; + } + + { + 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___url_0.10.3.tgz"; + path = fetchurl { + name = "url___url_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz"; + sha1 = "021e4d9c7705f21bbf37d03ceb58767402774c64"; + }; + } + + { + 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 = "user_home___user_home_1.1.1.tgz"; + path = fetchurl { + name = "user_home___user_home_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz"; + sha1 = "2b5be23a32b63a7c9deb8d0f28d485724a3df190"; + }; + } + + { + name = "useragent___useragent_2.3.0.tgz"; + path = fetchurl { + name = "useragent___useragent_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz"; + sha1 = "217f943ad540cb2128658ab23fc960f6a88c9972"; + }; + } + + { + 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 = "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_2.0.3.tgz"; + path = fetchurl { + name = "uuid___uuid_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz"; + sha1 = "67e2e863797215530dff318e5bf9dcebfd47b21a"; + }; + } + + { + name = "uuid___uuid_3.4.0.tgz"; + path = fetchurl { + name = "uuid___uuid_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz"; + sha1 = "b23e4358afa8a202fe7a100af1f5f883f02007ee"; + }; + } + + { + name = "uuid___uuid_1.4.2.tgz"; + path = fetchurl { + name = "uuid___uuid_1.4.2.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-1.4.2.tgz"; + sha1 = "453019f686966a6df83cdc5244e7c990ecc332fc"; + }; + } + + { + name = "v8flags___v8flags_2.1.1.tgz"; + path = fetchurl { + name = "v8flags___v8flags_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz"; + sha1 = "aab1a1fa30d45f88dd321148875ac02c0b55e5b4"; + }; + } + + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; + sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; + }; + } + + { + 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 = "vinyl_fs___vinyl_fs_0.3.14.tgz"; + path = fetchurl { + name = "vinyl_fs___vinyl_fs_0.3.14.tgz"; + url = "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz"; + sha1 = "9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"; + }; + } + + { + name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.1.4.tgz"; + path = fetchurl { + name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz"; + sha1 = "c5fcbd43e2f238423c2dc98bddd6f79b72bc345b"; + }; + } + + { + name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.2.1.tgz"; + path = fetchurl { + name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz"; + sha1 = "ab6549d61d172c2b1b87be5c508d239c8ef87705"; + }; + } + + { + name = "vinyl___vinyl_0.2.3.tgz"; + path = fetchurl { + name = "vinyl___vinyl_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz"; + sha1 = "bca938209582ec5a49ad538a00fa1f125e513252"; + }; + } + + { + name = "vinyl___vinyl_0.4.6.tgz"; + path = fetchurl { + name = "vinyl___vinyl_0.4.6.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz"; + sha1 = "2f356c87a550a255461f36bbeb2a5ba8bf784847"; + }; + } + + { + name = "vinyl___vinyl_0.5.3.tgz"; + path = fetchurl { + name = "vinyl___vinyl_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz"; + sha1 = "b0455b38fc5e0cf30d4325132e461970c2091cde"; + }; + } + + { + name = "vinyl___vinyl_1.2.0.tgz"; + path = fetchurl { + name = "vinyl___vinyl_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz"; + sha1 = "5c88036cf565e5df05558bfc911f8656df218884"; + }; + } + + { + name = "vinyl___vinyl_2.2.0.tgz"; + path = fetchurl { + name = "vinyl___vinyl_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz"; + sha1 = "d85b07da96e458d25b2ffe19fece9f2caa13ed86"; + }; + } + + { + 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 = "void_elements___void_elements_2.0.1.tgz"; + path = fetchurl { + name = "void_elements___void_elements_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz"; + sha1 = "c066afb582bb1cb4128d60ea92392e94d5e9dbec"; + }; + } + + { + name = "websocket_driver___websocket_driver_0.7.3.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.7.3.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz"; + sha1 = "a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"; + }; + } + + { + 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 = "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___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 = "which___which_1.0.9.tgz"; + path = fetchurl { + name = "which___which_1.0.9.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz"; + sha1 = "460c1da0f810103d0321a9b633af9e575e64486f"; + }; + } + + { + 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 = "with___with_5.1.1.tgz"; + path = fetchurl { + name = "with___with_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz"; + sha1 = "fa4daa92daf32c4ea94ed453c81f04686b575dfe"; + }; + } + + { + name = "word_wrap___word_wrap_1.2.3.tgz"; + path = fetchurl { + name = "word_wrap___word_wrap_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz"; + sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c"; + }; + } + + { + 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 = "wordwrap___wordwrap_1.0.0.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz"; + sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; + }; + } + + { + name = "wordwrap___wordwrap_0.0.3.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz"; + sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107"; + }; + } + + { + 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 = "ws___ws_1.1.5.tgz"; + path = fetchurl { + name = "ws___ws_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz"; + sha1 = "cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"; + }; + } + + { + name = "wtf_8___wtf_8_1.0.0.tgz"; + path = fetchurl { + name = "wtf_8___wtf_8_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz"; + sha1 = "392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"; + }; + } + + { + name = "xdg_basedir___xdg_basedir_1.0.1.tgz"; + path = fetchurl { + name = "xdg_basedir___xdg_basedir_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-1.0.1.tgz"; + sha1 = "14ff8f63a4fdbcb05d5b6eea22b36f3033b9f04e"; + }; + } + + { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; + path = fetchurl { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz"; + sha1 = "185a888c04eca46c3e4070d99f7b49de3528992d"; + }; + } + + { + name = "xtend___xtend_4.0.2.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz"; + sha1 = "bb72779f5fa465186b1f438f674fa347fdb5db54"; + }; + } + + { + name = "xtend___xtend_3.0.0.tgz"; + path = fetchurl { + name = "xtend___xtend_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz"; + sha1 = "5cce7407baf642cba7becda568111c493f59665a"; + }; + } + + { + name = "xtend___xtend_2.1.2.tgz"; + path = fetchurl { + name = "xtend___xtend_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz"; + sha1 = "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"; + }; + } + + { + 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.1.1.tgz"; + path = fetchurl { + name = "yallist___yallist_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz"; + sha1 = "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"; + }; + } + + { + 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___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_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"; + }; + } + + { + name = "yargs___yargs_3.5.4.tgz"; + path = fetchurl { + name = "yargs___yargs_3.5.4.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-3.5.4.tgz"; + sha1 = "d8aff8f665e94c34bd259bdebd1bfaf0ddd35361"; + }; + } + + { + name = "yeast___yeast_0.1.2.tgz"; + path = fetchurl { + name = "yeast___yeast_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz"; + sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419"; + }; + } + ]; +} diff --git a/flakes/private/buildbot/common/build_helpers.py b/flakes/private/buildbot/common/build_helpers.py new file mode 100644 index 0000000..77e6c07 --- /dev/null +++ b/flakes/private/buildbot/common/build_helpers.py @@ -0,0 +1,293 @@ +from buildbot.plugins import util, steps, schedulers +from buildbot_buildslist import BuildsList +from shutil import which + +__all__ = [ + "force_scheduler", "deploy_scheduler", "git_hook_scheduler", + "clean_branch", "package_and_upload", "AppriseStatusPush", + "XMPPStatusPush", "NixShellCommand", + "all_builder_names", "compute_build_infos", "deploy_ssh_command", + "configure_apprise_push", + "configure_xmpp_push", "deploy_hook_scheduler", + ] + +# 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, + command=["git", "archive", "HEAD", "-o", package]), + + steps.FileUpload(name="upload package", workersrc=package, + masterdest=package_dest, + url=package_url, mode=0o644), + + steps.ShellCommand(name="cleanup package", logEnviron=False, + haltOnFailure=True, alwaysRun=True, + command=["rm", "-f", package]), + ] + +# Steps +class NixShellCommand(steps.ShellCommand): + def __init__(self, command=None, nixPackages=[], pure=True, nixFile=None, nixIncludes={}, nixArgs={}, **kwargs): + 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"] + for k, v in nixArgs.items(): + nixcommand.append("--arg") + nixcommand.append(k) + nixcommand.append(v) + if pure: + nixcommand.append("--pure") + for k, v in nixIncludes.items(): + nixcommand.append("-I") + nixcommand.append("{}={}".format(k, v)) + nixcommand.append("--run") + nixcommand.append(command) + if len(nixPackages) > 0: + nixcommand.append("-p") + nixcommand += nixPackages + elif nixFile is not None: + nixcommand.append(nixFile) + super().__init__(command=nixcommand, **kwargs) + +# Schedulers +def force_scheduler(name, builders, nobranch=False): + if nobranch: + branch = util.FixedParameter(name="branch", default="") + else: + branch=util.StringParameter(name="branch", label="Git reference (tag, branch)", required=True) + + 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=branch, + 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 git_hook_scheduler(project, builders=[], timer=1): + if len(builders) == 0: + builders = ["{}_build".format(project)] + return schedulers.AnyBranchScheduler( + change_filter=util.ChangeFilter(category="gitolite-hooks", project=project), + name="{}_git_hook".format(project), treeStableTimer=timer, builderNames=builders) + +def deploy_hook_scheduler(project, builders, timer=1): + return schedulers.AnyBranchScheduler( + change_filter=util.ChangeFilter(category="deploy_webhook", project=project), + name="{}_deploy".format(project), treeStableTimer=timer, builderNames=builders) + +# Builders +def all_builder_names(c): + return [builder.name for builder in c['builders']] + +# Apprise/XMPP status push +from buildbot.reporters.http import HttpStatusPushBase +from twisted.internet import defer +from twisted.python import log +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 +import apprise + +class AppriseStatusPush(HttpStatusPushBase): + name = "AppriseStatusPush" + + @defer.inlineCallbacks + def reconfigService(self, appriseUrls, **kwargs): + self.appriseUrls = appriseUrls + yield HttpStatusPushBase.reconfigService(self, **kwargs) + + @defer.inlineCallbacks + def send(self, build): + yield utils.getDetailsForBuild(self.master, build, wantProperties=True) + appobject = apprise.Apprise() + message = self.format(build) + for url in self.appriseUrls: + appobject.add(url.format(**message)) + yield appobject.notify(title=message["title"], body=message["text"]) + + 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["number"], build["url"], + build["builder"]["name"], + msg, + results.Results[build["results"]], + duration, + ) + else: + text = "Build {} ({}) of {}'s {} started.".format( + build["number"], build["url"], + build["builder"]["name"], + msg, + ) + return { + "username": "Buildbot", + "image_url": "http://docs.buildbot.net/current/_static/icon.png", + "text": text, + "title": "", + } + +def configure_apprise_push(c, secrets_file, builders): + c['services'].append(AppriseStatusPush( + name="apprise_status", builders=builders, + appriseUrls=open(secrets_file + "/apprise_webhooks", "r").read().split("\n"))) + +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["number"], build["url"], + build["builder"]["name"], + msg, + results.Results[build["results"]], + duration, + ) + else: + text = "Build {} ( {} ) of {}'s {} started.".format( + build["number"], build["url"], + build["builder"]["name"], + msg, + ) + + return text + +def configure_xmpp_push(c, secrets_file, builders, recipients): + c['services'].append(XMPPStatusPush( + name="xmpp_status", builders=builders, recipients=recipients, + password=open(secrets_file + "/notify_xmpp_password", "r").read().rstrip())) + +# LDAP edit +from buildbot.process.buildstep import FAILURE +from buildbot.process.buildstep import SUCCESS +from buildbot.process.buildstep import BuildStep + +def compute_build_infos(prefix, release_path): + @util.renderer + def compute(props): + import re, hashlib + build_file = props.getProperty("build") + package_dest = "{}/{}".format(release_path, build_file) + version = re.match(r"{0}_(.*).tar.gz".format(prefix), 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 + +def deploy_ssh_command(ssh_key_path, deploy_hosts): + @util.renderer + def compute(props): + environment = props["environment"] if props.hasProperty("environment") else "integration" + ssh_command = [ + "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", + "-i", ssh_key_path ] + return ssh_command + deploy_hosts.get(environment, ["host.invalid"]) + return compute diff --git a/flakes/private/buildbot/common/libvirt.py b/flakes/private/buildbot/common/libvirt.py new file mode 100644 index 0000000..e250627 --- /dev/null +++ b/flakes/private/buildbot/common/libvirt.py @@ -0,0 +1,318 @@ +# 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/flakes/private/buildbot/common/master.cfg b/flakes/private/buildbot/common/master.cfg new file mode 100644 index 0000000..0357f2a --- /dev/null +++ b/flakes/private/buildbot/common/master.cfg @@ -0,0 +1,93 @@ +# -*- 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) + +class GitoliteHook(webhooks.base): + def getChanges(self, request): + try: + branch = request.args[b"branch"][0].decode("utf-8") + project = request.args[b"project"][0].decode("utf-8") + repository = request.args[b"repository"][0].decode("utf-8") + author = request.args[b"author"][0].decode("utf-8") + except Exception as e: + raise ValueError("Error missing key in request: " + str(e)) + + args = { + "author": "gitolite for " + author, + "category": "gitolite-hooks", + "comments": "gitolite post-receive hook", + "branch": branch, + "project": project, + "repository": repository, + } + + 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 }, + "gitolite": { "custom_class": GitoliteHook }, + }, + "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/flakes/private/buildbot/flake.lock b/flakes/private/buildbot/flake.lock new file mode 100644 index 0000000..8952f75 --- /dev/null +++ b/flakes/private/buildbot/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "buildslist": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "root": { + "inputs": { + "buildslist": "buildslist", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/buildbot/flake.nix b/flakes/private/buildbot/flake.nix new file mode 100644 index 0000000..8b3c704 --- /dev/null +++ b/flakes/private/buildbot/flake.nix @@ -0,0 +1,74 @@ +{ + description = "The continuous integration framework"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs = { + url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742"; + flake = false; + }; + inputs.buildslist = { + url = "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist"; + type = "git"; + flake = false; + }; + outputs = { self, nixpkgs, flake-utils, buildslist }: flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + python = pkgs.python38; + wokkel = python.pkgs.buildPythonPackage rec { + pname = "wokkel"; + version = "18.0.0"; + src = python.pkgs.fetchPypi { + inherit pname version; + sha256 = "1spq44gg8gsviqx1dvlmjpgfc0wk0jpyx4ap01y2pad1ai9cw016"; + }; + propagatedBuildInputs = with python.pkgs; [ twisted.extras.tls twisted incremental dateutil ]; + doCheck = false; + }; + buildbot_common = python.pkgs.buildPythonPackage { + name = "buildbot_common"; + src = ./common; + format = "other"; + installPhase = '' + mkdir -p $out/${python.sitePackages} + cp -a $src $out/${python.sitePackages}/buildbot_common + ''; + }; + buildbot-full = python.pkgs.buildbot-full.withPlugins [ buildslist-plugin ] // { + inherit buildbot_common; + buildbot_config = project: python.pkgs.buildPythonPackage (rec { + name = "buildbot_config-${project.name}"; + src = if project.name == "test" then ./test_project else project.src; + format = "other"; + installPhase = '' + mkdir -p $out/${python.sitePackages} + cp -a $src $out/${python.sitePackages}/buildbot_config + ''; + }); + common_packages = pkgs: [ + (pkgs.apprise.overridePythonAttrs(old: { propagatedBuildInputs = old.propagatedBuildInputs ++ [ pkgs.sleekxmpp ]; })) pkgs.libvirt pkgs.treq pkgs.ldap3 + buildbot-full pkgs.buildbot-worker pkgs.pip buildbot_common + wokkel + ]; + }; + buildslist-plugin = pkgs.callPackage ./buildslist { + pythonPackages = python.pkgs; + buildslist_src = buildslist; + }; + in rec { + packages = { + buildslist = buildslist-plugin; + buildbot-full = buildbot-full; + buildbot_common = buildbot_common; + }; + defaultPackage = packages.buildbot-full; + legacyPackages = packages; + checks = packages; + }) // rec { + overlays = { + immae-buildbot = final: prev: { + immae-buildbot = self.defaultPackage."${final.system}"; + }; + }; + overlay = overlays.immae-buildbot; + }; +} diff --git a/flakes/private/buildbot/test_project/__init__.py b/flakes/private/buildbot/test_project/__init__.py new file mode 100644 index 0000000..d5893fd --- /dev/null +++ b/flakes/private/buildbot/test_project/__init__.py @@ -0,0 +1,121 @@ +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 + 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 configure(c): + c["buildbotURL"] = E.BUILDBOT_URL + c["www"]["port"] = E.SOCKET + + c["www"]["change_hook_dialects"]["base"] = { "custom_class": CustomBase } + + configure_build(c) + configure_deploy(c) + + configure_apprise_push(c, E.SECRETS_FILE, all_builder_names(c)) + configure_xmpp_push(c, E.SECRETS_FILE, all_builder_names(c), E.XMPP_RECIPIENTS) + +def configure_build(c): + builder_name = "TestProject_build" + worker_name = "test-build" + c['schedulers'].append(force_scheduler("force_test", [builder_name])) + c['schedulers'].append(git_hook_scheduler("TestProject", [builder_name])) + c['workers'].append(libvirt_worker(worker_name)) + c['builders'].append(util.BuilderConfig(name=builder_name, workernames=[worker_name], factory=build_factory())) + +def configure_deploy(c): + builder_name = "TestProject_deploy" + worker_name = "test-deploy" + c['workers'].append(libvirt_worker(worker_name)) + c['schedulers'].append(deploy_hook_scheduler("TestProject", [builder_name])) + c['schedulers'].append(deploy_scheduler("deploy_test", [builder_name])) + c['builders'].append(util.BuilderConfig(name=builder_name, workernames=[worker_name], factory=deploy_factory())) + +def libvirt_worker(name): + return ilibvirt.LibVirtWorker(name, + open(E.SECRETS_FILE + "/worker_password", "r").read().rstrip(), + ilibvirt.Connection(E.LIBVIRT_URL), + E.WORKER_HOST) + +def build_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="fresh")) + 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 factory + +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("test", E.RELEASE_PATH))) + factory.addStep(steps.MasterShellCommand(command=deploy_ssh_command(E.SSH_KEY_PATH, {}))) + return factory diff --git a/flakes/private/chatons/flake.lock b/flakes/private/chatons/flake.lock new file mode 100644 index 0000000..39ed484 --- /dev/null +++ b/flakes/private/chatons/flake.lock @@ -0,0 +1,23 @@ +{ + "nodes": { + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "root": { + "inputs": { + "environment": "environment" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/chatons/flake.nix b/flakes/private/chatons/flake.nix new file mode 100644 index 0000000..70fb02d --- /dev/null +++ b/flakes/private/chatons/flake.nix @@ -0,0 +1,142 @@ +{ + inputs.environment.url = "path:../environment"; + outputs = { self, environment }: { + nixosModule = self.nixosModules.chatons; + nixosModules.chatons = { config, lib, pkgs, nodes, ... }: + let + concatValue = value: if lib.isList value then builtins.concatStringsSep "," value else builtins.toString value; + toProperties = properties: builtins.concatStringsSep "\n" ( + lib.collect + (p: !(lib.isAttrs p)) + (lib.mapAttrsRecursive + (path: value: builtins.concatStringsSep "." (builtins.filter (f: f != "") path) + " = " + (concatValue value)) + properties)); + before = name: { + "${name}" = { + status.level = "OK"; + status.description = "OK"; + install.type = "PACKAGE"; + registration.load = "OPEN"; + }; + host = { + name = "Hetzner"; + server.type = "PHYSICAL"; + provider.type = "HOSTEDSERVER"; + server.distribution = "NixOS"; + country.name = "Allemagne"; + country.code = "DE"; + }; + }; + after = name: { + file = { + class = name; + protocol = "ChatonsInfos-0.5"; + generator = "Nix derivation"; + }; + "${name}" = { + legal.url = "https://www.immae.eu/mentions.html"; + guide.technical = "https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/"; + contact.url = "https://www.immae.eu/contacts_fr.html"; + contact.email = config.myEnv.tools.contact; + startdate = "01/01/2019"; + }; + }; + organization = { + file = { + class = "organization"; + protocol = "ChatonsInfos-0.5"; + datetime = "2021-01-11T22:23:00"; + generator = "Nix derivation"; + }; + organization = { + country.name = "France"; + country.code = "FR"; + name = "ImmaeEu"; + description = "ImmaeEu est un CHATONS des Alpes-Maritimes"; + website = "https://www.immae.eu"; + logo = "https://assets.immae.eu/logo.jpg"; + socialnetworks = { + diaspora = "https://diaspora.immae.eu/people/1a185f29cc76cb35"; + facebook = "https://www.facebook.com/ismael.bouya"; + mastodon = "https://mastodon.immae.eu/@immae"; + peertube = "https://peertube.immae.eu/accounts/immae/"; + twitter = "https://twitter.com/_immae"; + }; + chatrooms = { + xmpp = "ismael@immae.fr"; + irc = "immae@freenode"; + matrix = "#support:immae.eu"; + }; + contact.url = "https://www.immae.eu/contacts_fr.html"; + contact.email = config.myEnv.tools.contact; + legal.url = "https://www.immae.eu/mentions.html"; + guide.technical = "https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/"; + guide.user = "https://www.immae.eu/docs"; + status.level = "ACTIVE"; + status.description = "En activité"; + startdate = "01/01/2019"; + type = "COMPANY"; + owner = { + logo = "https://assets.immae.eu/logo.jpg"; + name = "Ismaël Bouya"; + website = "https://www.immae.eu"; + }; + memberof.chatons = { + startdate = "01/07/2019"; + status.level = "ACTIVE"; + status.description = "Participe au collectif"; + }; + }; + }; + subname = v: if v.published or true then "subs" else "subs-hidden"; + toOrganizationProperties = name: pkgs.writeText name (toProperties organization + "\n" + ( + builtins.concatStringsSep "\n" (lib.mapAttrsToList + (n: v: "${subname v}.${n} = https://www.immae.eu/.well-known/chatonsinfos/service-${n}.properties") mergedServices + )) + "\n" + ( + builtins.concatStringsSep "\n" (lib.mapAttrsToList + (n: v: "subs.hosting-${n} = https://www.immae.eu/.well-known/chatonsinfos/hosting-${n}.properties") mergedHostings + ))); + toHostingProperties = name: content: pkgs.writeText name (toProperties (lib.recursiveUpdate (before "hosting") (lib.recursiveUpdate content (after "hosting")))); + toServiceProperties = name: content: pkgs.writeText name (toProperties (lib.recursiveUpdate (before "service") (lib.recursiveUpdate content (after "service")))); + + cfg = config.myServices.chatonsProperties; + mergedServices = lib.foldr (v: o: lib.recursiveUpdate o v) {} (lib.mapAttrsToList (k: v: if (v.config.myServices or {}) ? "chatonsProperties" then v.config.myServices.chatonsProperties.services else {}) nodes); + mergedHostings = lib.foldr (v: o: lib.recursiveUpdate o v) {} (lib.mapAttrsToList (k: v: if (v.config.myServices or {}) ? "chatonsProperties" then v.config.myServices.chatonsProperties.hostings else {}) nodes); + in { + imports = [ + environment.nixosModule + ]; + options.myServices.chatonsProperties.organization = lib.mkOption { + type = lib.types.attrsOf lib.types.unspecified; + default = {}; + description = '' + nested attrs of strings or arrays of strings + ''; + }; + options.myServices.chatonsProperties.services = lib.mkOption { + type = lib.types.attrsOf lib.types.unspecified; + default = {}; + description = '' + nested attrs of strings or arrays of strings + ''; + }; + options.myServices.chatonsProperties.hostings = lib.mkOption { + type = lib.types.attrsOf lib.types.unspecified; + default = {}; + description = '' + nested attrs of strings or arrays of strings + ''; + }; + options.myServices.chatonsProperties.propertiesPath = lib.mkOption { + type = lib.types.package; + readOnly = true; + default = pkgs.runCommand "chatons" {} '' + mkdir -p $out + cp ${toOrganizationProperties "immae-eu"} $out/immae-eu.properties + ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: c: "cp ${toHostingProperties n c} $out/hosting-${n}.properties") mergedHostings)} + ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: c: "cp ${toServiceProperties n c} $out/service-${n}.properties") mergedServices)} + ''; + }; + }; + }; +} diff --git a/flakes/private/environment-dummy/flake.nix b/flakes/private/environment-dummy/flake.nix new file mode 100644 index 0000000..5ebc27f --- /dev/null +++ b/flakes/private/environment-dummy/flake.nix @@ -0,0 +1,18 @@ +{ + description = '' + A dummy flake that contains a compatible structure to the one stored at + git+ssh://gitolite@git.immae.eu/perso/Immae/Config/Nix/Nixops/Secrets + It is used as default value in "public" configurations + ''; + outputs = { self }: { + vars-file = ./vars.yml; + ldap-conf = ./ldap.conf; + environment-file = ./environment.nix; + nixosModule = self.nixosModules.my-environment; + nixosModules.my-environment = { ... }: { + config.myEnv = import self.environment-file; + }; + nixosModules.users-config-eldiron = { ... }: {}; + }; +} + diff --git a/flakes/private/environment-dummy/ldap.conf b/flakes/private/environment-dummy/ldap.conf new file mode 100644 index 0000000..064a4be --- /dev/null +++ b/flakes/private/environment-dummy/ldap.conf @@ -0,0 +1,13 @@ +# Indices to maintain +index objectClass eq +index uid pres,eq +index mail pres,sub,eq +index cn pres,sub,eq +index sn pres,sub,eq +index dc eq +index krbPrincipalName eq +index member eq +index memberOf eq + +access to * + by * none diff --git a/flakes/private/environment-dummy/vars.yml b/flakes/private/environment-dummy/vars.yml new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/flakes/private/environment-dummy/vars.yml @@ -0,0 +1 @@ +{} diff --git a/flakes/private/environment/flake.nix b/flakes/private/environment/flake.nix new file mode 100644 index 0000000..15c079a --- /dev/null +++ b/flakes/private/environment/flake.nix @@ -0,0 +1,1135 @@ +{ + outputs = { self }: { + nixosModule = self.nixosModules.environment; + nixosModules.environment = { 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 = int; }; + 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; + }; + hostKey = mkOption { + type = nullOr str; + default = null; + description = '' + ssh host key + ''; + }; + isVm = mkEnableOption "The host is a vm"; + 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 int; description = "Priority"; }; + }; + }; + }; + ips = mkOption { + description = '' + attrs of ip4/ip6 grouped by section + ''; + type = attrsOf (submodule { + options = { + alias = mkOption { + type = nullOr str; + default = null; + description = '' + alias to use in DNS for that group + ''; + }; + ip4 = mkOption { + type = listOf str; + default = []; + description = '' + ip4 addresses of the host + ''; + }; + ip6 = mkOption { + type = listOf str; + default = []; + description = '' + ip6 addresses of the host + ''; + }; + }; + }); + }; + }; + }; + in + { + # Necessary for situations where flake gets included multiple times + key = builtins.hashString "sha256" (builtins.path { path = self.sourceInfo.outPath; name = "source"; }); + + 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; }; + }; + }; + }; + psql = mkOption { + description = '' + PSQL credentials for immae_auth_read + ''; + 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 = { + 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)); + }; + }; + }; + }; + 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 = functionTo str; + 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" {}; + certs = mkOption { + description = "Certificates"; + type = attrsOf (submodule { + options = { + key = mkOption { type = str; description = "Key"; }; + certificate = mkOption { type = str; description = "Certificate"; }; + }; + }); + }; + }; + }; + }; + 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"; + default = {}; + 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"; }; + }; + }; + }; + nrdp_tokens = mkOption { type = listOf str; description = "Tokens allowed to push status update"; }; + apprise_urls = mkOption { type = str; description = "Apprise space-separated urls 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"; }; + immae_contact = mkOption { type = str; description = "Immae Contact e-mail"; }; + 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 = attrsOf str; + example = literalExample '' + { + v = "DKIM1"; + k = "rsa"; + p = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3w1a2aMxWw9+hdcmbqX4UevcVqr204y0K73Wdc7MPZiOOlUJQYsMNSYR1Y/SC7jmPKeitpcJCpQgn/cveJZbuikjjPLsDReHyFEYmC278ZLRTELHx6f1IXM8WE08JIRT69CfZiMi1rVcOh9qRT4F93PyjCauU8Y5hJjtg9ThsWwIDAQAB"; + } + ''; + description = "Public entry to put in DNS TXT field"; + }; + private = mkOption { type = nullOr str; default = null; description = "Private key"; }; + }; + }); + }; + postfix = mkOption { + description = "Postfix configuration"; + type = submodule { + options = { + mysql = mkMysqlOptions "Postfix" { + password_encrypt = mkOption { type = str; description = "Key to encrypt relay password in database"; }; + }; + admins = mkOption { + description = '' + List of admins meant to receive common aliases + ''; + type = listOf str; + }; + common_aliases = mkOption { + description = '' + List of aliases common to all hosts, to forward to admins + ''; + type = listOf str; + }; + other_aliases = mkOption { + description = '' + Other list of aliases, to forward to admins + ''; + type = listOf str; + }; + }; + }; + }; + 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: ""; + }; + }; + }; + }; + 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"; + }; + }; + }; + }; + }; + }; + }; + coturn = mkOption { + description = "Coturn configuration"; + type = submodule { + options = { + auth_access_key = mkOption { type = str; description = "key to access coturn"; }; + }; + }; + }; + 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"; }; + src = mkOption { type = path; description = "source of the project configuration"; }; + packages = mkOption { + type = listOf package; + example = literalExample '' + [ pkgs.bash pkgs.git pkgs.gzip pkgs.openssh ]; + ''; + description = '' + Builds packages list to make available to buildbot project. + ''; + }; + 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 lines; + description = "Secrets for the project to dump as files"; + }; + secretsDeps = mkOption { + type = listOf package; + default = []; + description = "Dependencies of file that will land in secrets"; + }; + 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 + ''; + }; + 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 = { + assetType = mkOption { type = enum ["tgz" "url" "googleFont"]; default = "url"; description = "Type of asset"; }; + tgzRemoveComponents = mkOption { type = int; default = 0; description = "Remove components when extracting"; }; + 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"; }; + }; + }; + }; + 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"; }; + }; + }; + }; + }; + }; + }; + landing = mkOption { + description = "Landing configuration"; + type = submodule { + options = { + postgresql = mkPsqlOptions "Landing"; + }; + }; + }; + 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 "Nextcloud"; + redis = mkRedisOptions "Nextcloud"; + 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" {}; + }; + }; + }; + 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"; + default = {}; + 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"; }; + }; + }; + }; + 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 = 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"; }; + }; + options.hostEnv = mkOption { + readOnly = true; + type = hostEnv; + default = config.myEnv.servers."${name}"; + description = "Host environment"; + }; + }; + }; +} diff --git a/flakes/private/mail-relay/filter-rewrite-from.py b/flakes/private/mail-relay/filter-rewrite-from.py new file mode 100755 index 0000000..aad9c69 --- /dev/null +++ b/flakes/private/mail-relay/filter-rewrite-from.py @@ -0,0 +1,68 @@ +#! /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/flakes/private/mail-relay/flake.lock b/flakes/private/mail-relay/flake.lock new file mode 100644 index 0000000..bbb2011 --- /dev/null +++ b/flakes/private/mail-relay/flake.lock @@ -0,0 +1,36 @@ +{ + "nodes": { + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "root": { + "inputs": { + "environment": "environment", + "secrets": "secrets" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/mail-relay/flake.nix b/flakes/private/mail-relay/flake.nix new file mode 100644 index 0000000..639bd06 --- /dev/null +++ b/flakes/private/mail-relay/flake.nix @@ -0,0 +1,58 @@ +{ + inputs.environment.url = "path:../environment"; + inputs.secrets.url = "path:../../secrets"; + + outputs = { self, environment, secrets }: { + nixosModule = self.nixosModules.mail-relay; + nixosModules.mail-relay = { lib, pkgs, config, name, ... }: + { + imports = [ + environment.nixosModule + secrets.nixosModule + ]; + options.myServices.mailRelay.enable = lib.mkEnableOption "enable Mail relay services"; + 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.python38 ]; + } '' + 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 ]; + }; + }; + }; +} diff --git a/flakes/private/milters/flake.lock b/flakes/private/milters/flake.lock new file mode 100644 index 0000000..1a0c138 --- /dev/null +++ b/flakes/private/milters/flake.lock @@ -0,0 +1,186 @@ +{ + "nodes": { + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "openarc": { + "inputs": { + "flake-utils": "flake-utils", + "myuids": "myuids", + "nixpkgs": "nixpkgs", + "openarc": "openarc_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_2": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "opendmarc": { + "inputs": { + "flake-utils": "flake-utils_2", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "root": { + "inputs": { + "environment": "environment", + "files-watcher": "files-watcher", + "openarc": "openarc", + "opendmarc": "opendmarc", + "secrets": "secrets" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/milters/flake.nix b/flakes/private/milters/flake.nix new file mode 100644 index 0000000..c4de5b6 --- /dev/null +++ b/flakes/private/milters/flake.nix @@ -0,0 +1,106 @@ +{ + inputs.secrets.url = "path:../../secrets"; + inputs.environment.url = "path:../environment"; + inputs.files-watcher.url = "path:../../files-watcher"; + inputs.opendmarc.url = "path:../../opendmarc"; + inputs.openarc.url = "path:../../openarc"; + outputs = { self, secrets, environment, opendmarc, openarc, files-watcher }: { + nixosModule = self.nixosModules.milters; + nixosModules.milters = { lib, pkgs, config, nodes, ... }: + { + imports = [ + secrets.nixosModule + environment.nixosModule + files-watcher.nixosModule + opendmarc.nixosModule + openarc.nixosModule + ]; + options.myServices.mail.milters.enable = lib.mkEnableOption "enable Mail milters"; + 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.milters.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; + }; + }; + users.users."${config.services.opendkim.user}".extraGroups = [ "keys" ]; + services.opendkim = { + enable = true; + socket = "local:${config.myServices.mail.milters.sockets.opendkim}"; + domains = + let + getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) p.emailPolicies; + bydomain = builtins.mapAttrs (n: getDomains) nodes.eldiron.config.myServices.dns.zones; + domains' = lib.flatten (builtins.attrValues bydomain); + in + builtins.concatStringsSep "," domains'; + 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 + pymilter = with pkgs.python38Packages; buildPythonPackage rec { + pname = "pymilter"; + version = "1.0.4"; + src = fetchPypi { + inherit pname version; + sha256 = "1bpcvq7d72q0zi7c8h5knhasywwz9gxc23n9fxmw874n5k8hsn7k"; + }; + doCheck = false; + buildInputs = [ pkgs.libmilter ]; + }; + python = pkgs.python38.withPackages (p: [ pymilter ]); + in "${python}/bin/python ${./verify_from.py} -s /run/milter_verify_from/verify_from.sock"; + RuntimeDirectory = "milter_verify_from"; + }; + }; + }; + }; + }; +} diff --git a/flakes/private/milters/verify_from.py b/flakes/private/milters/verify_from.py new file mode 100755 index 0000000..b75001e --- /dev/null +++ b/flakes/private/milters/verify_from.py @@ -0,0 +1,60 @@ +#!/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/flakes/private/monitoring/flake.lock b/flakes/private/monitoring/flake.lock new file mode 100644 index 0000000..2e156fb --- /dev/null +++ b/flakes/private/monitoring/flake.lock @@ -0,0 +1,67 @@ +{ + "nodes": { + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "environment": "environment", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib", + "secrets": "secrets" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/monitoring/flake.nix b/flakes/private/monitoring/flake.nix new file mode 100644 index 0000000..b7c3997 --- /dev/null +++ b/flakes/private/monitoring/flake.nix @@ -0,0 +1,267 @@ +{ + inputs = { + environment.url = "path:../environment"; + secrets.url = "path:../../secrets"; + naemon.url = "path:../../naemon"; + nixpkgs-lib.url = "github:NixOS/nixpkgs?dir=lib"; + }; + outputs = { self, environment, nixpkgs-lib, secrets, naemon }: { + nagios-cli-config = ./nagios-cli.cfg; + lib = rec { + expandedObject = kind: object: objects: + if object ? "use" + then expandedObject kind objects.templates.${kind}.${object.use} objects // object + else object; + + objectsCommon = import ./objects_common.nix; + toObjects = import ./to_objects.nix { inherit (nixpkgs-lib) lib; }; + + toMasterPassiveObject = svcTemplate: freshnessThresholdMultiplier: objects: + { + service = with nixpkgs-lib.lib; map (s: + { + host_name = (expandedObject "service" s objects).host_name; + use = svcTemplate; + retry_interval = "1"; + freshness_threshold = let + fs = expandedObject "service" s objects; + in if builtins.isInt fs.check_interval + then builtins.ceil (freshnessThresholdMultiplier * 60 * fs.check_interval) + else fs.check_interval; + } + // filterAttrs (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_") s + // mapAttrs' + (n: nameValuePair (removePrefix "__passive_" n)) + (filterAttrs (k: _: hasPrefix "__passive_" k) s) + ) objects.service; + host = objects.host; + }; + + emailCheck = allCfg: host: hostFQDN: let + cfg = allCfg."${host}"; + reverseTargets = builtins.attrNames (nixpkgs-lib.lib.filterAttrs (k: v: builtins.elem host v.targets) allCfg); + to_email = cfg': host': + let sep = if nixpkgs-lib.lib.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; + }; + }; + nixosModule = self.nixosModules.monitoring; + nixosModules.monitoring = { config, pkgs, lib, ... }: + let + cfg = config.myServices.monitoring; + allPluginsConfig = import ./myplugins.nix { + inherit pkgs lib config; + sudo = "/run/wrappers/bin/sudo"; + }; + mypluginsConfig = lib.mapAttrs (n: v: + if builtins.isFunction v + then v (cfg.pluginsArgs."${n}" or {}) + else v + ) (lib.getAttrs cfg.activatedPlugins allPluginsConfig); + myplugins = let + mypluginsChunk = builtins.concatStringsSep "\n" (lib.mapAttrsToList (k: v: v.chunk or "") mypluginsConfig); + in pkgs.runCommand "buildplugins" { + buildInputs = [ pkgs.makeWrapper pkgs.perl ]; + } '' + mkdir $out + ${mypluginsChunk} + ''; + objectsModule = with lib.types; submodule { + options = { + command = lib.mkOption { + type = attrsOf str; + default = {}; + description = "Command definitions"; + }; + + host = lib.mkOption { + type = attrsOf (attrsOf str); + default = {}; + description = "Host definitions"; + }; + hostgroup = lib.mkOption { + type = attrsOf (attrsOf str); + default = {}; + description = "Host group definitions"; + }; + hostdependency = lib.mkOption { + type = listOf (attrsOf str); + default = []; + description = "Host dependency definitions"; + }; + + service = lib.mkOption { + type = listOf (attrsOf (oneOf [ str (listOf str) int ])); + # str -> string + # listOf str -> list to be concatenated with "!" + # int -> toString + default = []; + description = "Service definitions"; + }; + servicegroup = lib.mkOption { + type = attrsOf (attrsOf str); + default = {}; + description = "Service group definitions"; + }; + servicedependency = lib.mkOption { + type = listOf (attrsOf str); + default = []; + description = "Service dependency definitions"; + }; + + contact = lib.mkOption { + type = attrsOf (attrsOf str); + default = {}; + description = "Contact definitions"; + }; + contactgroup = lib.mkOption { + type = attrsOf (attrsOf str); + default = {}; + description = "Contact group definitions"; + }; + + timeperiod = lib.mkOption { + type = attrsOf (attrsOf str); + default = {}; + description = "Time period definitions"; + }; + + templates = lib.mkOption { + description = "Template definitions"; + default = {}; + type = submodule { + options = { + service = lib.mkOption { type = attrsOf (attrsOf (either str int)); default = {}; }; + contact = lib.mkOption { type = attrsOf (attrsOf str); default = {}; }; + host = lib.mkOption { type = attrsOf (attrsOf str); default = {}; }; + }; + }; + }; + }; + }; + 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 + ''; + }; + pluginsArgs = lib.mkOption { + default = {}; + description = "Arguments to pass to the naemon plugin configuration"; + type = lib.types.attrsOf (lib.types.attrsOf lib.types.unspecified); + }; + activatedPlugins = lib.mkOption { + default = []; + description = "List of naemon plugins to activate"; + type = lib.types.listOf (lib.types.enum (builtins.attrNames allPluginsConfig)); + }; + fromMasterActivatedPlugins = lib.mkOption { + default = []; + description = "List of naemon plugins to activate from master"; + type = lib.types.listOf (lib.types.str); + }; + resources = lib.mkOption { + default = {}; + description = "List of additionnal resources elements"; + type = lib.types.attrsOf (lib.types.str); + }; + objects = lib.mkOption { + default = {}; + description = "Object definitions"; + type = objectsModule; + }; + fromMasterObjects = lib.mkOption { + default = {}; + description = "Object definitions of checks that should be executed from master"; + type = objectsModule; + }; + }; + }; + + imports = [ + environment.nixosModule + secrets.nixosModule + naemon.nixosModule + ]; + config = lib.mkIf cfg.enable { + myServices.monitoring.objects.command = + lib.foldr (v: o: o // (v.commands or {})) {} (builtins.attrValues mypluginsConfig); + + security.sudo.extraRules = let + pluginsSudo = lib.lists.remove null (lib.mapAttrsToList (k: v: + if (v ? sudo) + then ({ users = [ "naemon" ]; } // (v.sudo myplugins)) + else null) mypluginsConfig); + in pluginsSudo; + + environment.etc.cnagios.source = "${pkgs.cnagios}/share/doc/cnagios"; + environment.systemPackages = let + nagios-cli = pkgs.writeScriptBin "nagios-cli" '' + #!${pkgs.stdenv.shell} + sudo -u naemon ${pkgs.nagios-cli}/bin/nagios-cli -c ${self.nagios-cli-config} + ''; + in [ + pkgs.cnagios + nagios-cli + ]; + secrets.keys = { + "naemon/id_rsa" = { + user = "naemon"; + group = "naemon"; + permissions = "0400"; + text = config.myEnv.monitoring.ssh_secret_key; + }; + "naemon/resources.cfg".keyDependencies = [ 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 + ''; + extraResource = let + resources = [cfg.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 = + self.lib.toObjects cfg.objects; + }; + }; + }; + }; +} diff --git a/flakes/private/monitoring/myplugins.nix b/flakes/private/monitoring/myplugins.nix new file mode 100644 index 0000000..35730bb --- /dev/null +++ b/flakes/private/monitoring/myplugins.nix @@ -0,0 +1,400 @@ +{ 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 = { + USER210 = config.myEnv.monitoring.apprise_urls; + }; + 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-host-by-apprise = "HOST=\"$HOSTALIAS$\" NOTIFICATIONTYPE=\"$NOTIFICATIONTYPE$\" HOSTSTATE=\"$HOSTSTATE$\" HOSTOUTPUT=\"$HOSTOUTPUT$\" $USER2$/notify_by_apprise host \"$ARG1$\""; + notify-service-by-apprise = "HOST=\"$HOSTALIAS$\" NOTIFICATIONTYPE=\"$NOTIFICATIONTYPE$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_apprise service \"$ARG1$\""; + }; + chunk = '' + cp ${./plugins}/{notify_by_email,notify_by_apprise} $out + patchShebangs $out/{notify_by_email,notify_by_apprise} + wrapProgram $out/notify_by_email --prefix PATH : ${lib.makeBinPath [ + pkgs.mailutils + ]} + wrapProgram $out/notify_by_apprise --prefix PATH : ${lib.makeBinPath [ + pkgs.apprise + ]} + ''; + }; + 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$"; + }; + }; + mdadm = { + commands = { + check_mdadm = "$USER2$/check_command -c \"${pkgs.mdadm}/bin/mdadm --monitor --scan -1\" -s 0 -o \"^$\" -r root"; + }; + sudo = _: { + commands = [ + { command = "${pkgs.mdadm}/bin/mdadm --monitor --scan -1"; options = [ "NOPASSWD" ]; } + ]; + runAs = "root"; + }; + }; + postfix = { + commands = { + check_mailq = "$USER1$/check_mailq -s -w 1 -c 2"; + }; + sudo = _: { + commands = [ + { command = "${pkgs.postfix}/bin/mailq"; options = [ "NOPASSWD" ]; } + ]; + runAs = "root"; + }; + }; + 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.python38 + ]} + 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_4 = "$USER1$/check_http -4 --sni --ssl -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\""; + check_https_6 = "$USER1$/check_http -6 --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 + ]} + ''; + }; + 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.python38.withPackages (ps: [ps.ovh])) + ]} + ''; + }; + postgresql = { package }: { + 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 = '' + cp ${./plugins}/check_postgres_replication $out/ + patchShebangs $out/check_postgres_replication + wrapProgram $out/check_postgres_replication --prefix PATH : ${lib.makeBinPath [ + package + ]} + cp ${./plugins}/check_postgres_database_count $out/ + patchShebangs $out/check_postgres_database_count + wrapProgram $out/check_postgres_database_count --prefix PATH : ${lib.makeBinPath [ + package + ]} + ''; + + 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/flakes/private/monitoring/nagios-cli.cfg b/flakes/private/monitoring/nagios-cli.cfg new file mode 100644 index 0000000..7bd30cb --- /dev/null +++ b/flakes/private/monitoring/nagios-cli.cfg @@ -0,0 +1,68 @@ +# -*- 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/flakes/private/monitoring/objects_common.nix b/flakes/private/monitoring/objects_common.nix new file mode 100644 index 0000000..1da7764 --- /dev/null +++ b/flakes/private/monitoring/objects_common.nix @@ -0,0 +1,227 @@ +{ hostFQDN +, hostName +, interface ? "eth0" +, processWarn ? "250" +, processAlert ? "400" +, loadWarn ? "0.9" +, load5Warn ? loadWarn +, load15Warn ? load5Warn +, loadAlert ? "1.0" +, load5Alert ? loadAlert +, load15Alert ? load5Alert +, master +, ... +}: +{ + host = { + "${hostFQDN}" = { + alias = hostFQDN; + address = hostFQDN; + use = "linux-server"; + hostgroups = "webstatus-hosts"; + _webstatus_name = hostName; + _webstatus_vhost = "status.immae.eu"; + }; + }; + service = [ + { + service_description = "Size on root partition"; + use = "local-service"; + check_command = ["check_local_disk" "20%" "10%" "/"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Total number of process"; + use = "local-service"; + check_command = [ + "check_local_procs" + processWarn + processAlert + "RSZDT" + ]; + __passive_servicegroups = "webstatus-resources"; + } + { + 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 + ]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Average load"; + use = "local-service"; + check_command = [ + "check_local_load" + "${loadWarn},${load5Warn},${load15Warn}" + "${loadAlert},${load5Alert},${load15Alert}" + ]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Swap usage"; + use = "local-service"; + check_command = ["check_local_swap" "20" "10"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Memory usage"; + use = "local-service"; + check_command = ["check_memory" "80" "90"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "NTP is activated and working"; + use = "local-service"; + check_command = ["check_ntp"]; + __passive_servicegroups = "webstatus-resources"; + } + ]; + 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 -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_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/flakes/private/monitoring/plugins/check_backup_age b/flakes/private/monitoring/plugins/check_backup_age new file mode 100755 index 0000000..d873bdc --- /dev/null +++ b/flakes/private/monitoring/plugins/check_backup_age @@ -0,0 +1,66 @@ +#!/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/flakes/private/monitoring/plugins/check_bandwidth b/flakes/private/monitoring/plugins/check_bandwidth new file mode 100755 index 0000000..21d01f5 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_bandwidth @@ -0,0 +1,122 @@ +#!/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/flakes/private/monitoring/plugins/check_command b/flakes/private/monitoring/plugins/check_command new file mode 100755 index 0000000..2b546c1 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_command @@ -0,0 +1,113 @@ +#!/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/flakes/private/monitoring/plugins/check_emails b/flakes/private/monitoring/plugins/check_emails new file mode 100755 index 0000000..534e5a5 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_emails @@ -0,0 +1,121 @@ +#!/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/flakes/private/monitoring/plugins/check_eriomem b/flakes/private/monitoring/plugins/check_eriomem new file mode 100755 index 0000000..880b88a --- /dev/null +++ b/flakes/private/monitoring/plugins/check_eriomem @@ -0,0 +1,83 @@ +#!/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/flakes/private/monitoring/plugins/check_ftp_database b/flakes/private/monitoring/plugins/check_ftp_database new file mode 100755 index 0000000..f9cf579 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_ftp_database @@ -0,0 +1,11 @@ +#!/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/flakes/private/monitoring/plugins/check_git b/flakes/private/monitoring/plugins/check_git new file mode 100755 index 0000000..e8fbb29 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_git @@ -0,0 +1,81 @@ +#!/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/flakes/private/monitoring/plugins/check_imap_connection b/flakes/private/monitoring/plugins/check_imap_connection new file mode 100755 index 0000000..c1ab0dd --- /dev/null +++ b/flakes/private/monitoring/plugins/check_imap_connection @@ -0,0 +1,52 @@ +#!/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/flakes/private/monitoring/plugins/check_last_file_date b/flakes/private/monitoring/plugins/check_last_file_date new file mode 100755 index 0000000..f51a258 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_last_file_date @@ -0,0 +1,28 @@ +#!/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/flakes/private/monitoring/plugins/check_mem.sh b/flakes/private/monitoring/plugins/check_mem.sh new file mode 100755 index 0000000..3a29040 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_mem.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +if [ "$1" = "-w" ] && [ "$2" -gt "0" ] && [ "$3" = "-c" ] && [ "$4" -gt "0" ]; then + FreeM=`free -m -w` + 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}'` + memShared_m=`echo "$FreeM" |grep Mem |awk '{print $5}'` + memBuffer_m=`echo "$FreeM" |grep Mem |awk '{print $6}'` + memCache_m=`echo "$FreeM" |grep Mem |awk '{print $7}'` + memAvailable_m=`echo "$FreeM" |grep Mem |awk '{print $8}'` + memUsedPrc=`echo $((($memUsed_m-$memBuffer_m-$memCache_m)*100/$memTotal_m))||cut -d. -f1` + if [ "$memUsedPrc" -ge "$4" ]; then + echo "Memory: CRITICAL Total: $memTotal_m MB - Used/Buffer/Cache: $memUsed_m MB - $memUsedPrc% used!|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; SHARED=$memShared_m;;;; CACHE=$memCache_m;;;; AVAILABLE=$memAvailable_m;;;; BUFFER=$memBuffer_m;;;;" + exit 2 + elif [ "$memUsedPrc" -ge "$2" ]; then + echo "Memory: WARNING Total: $memTotal_m MB - Used/Buffer/Cache: $memUsed_m MB - $memUsedPrc% used!|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; SHARED=$memShared_m;;;; CACHE=$memCache_m;;;; AVAILABLE=$memAvailable_m;;;; BUFFER=$memBuffer_m;;;;" + exit 1 + else + echo "Memory: OK Total: $memTotal_m MB - Used/Buffer/Cache: $memUsed_m MB - $memUsedPrc% used|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; SHARED=$memShared_m;;;; CACHE=$memCache_m;;;; AVAILABLE=$memAvailable_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/flakes/private/monitoring/plugins/check_mysql_replication b/flakes/private/monitoring/plugins/check_mysql_replication new file mode 100755 index 0000000..1ee5de1 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_mysql_replication @@ -0,0 +1,41 @@ +#!/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/flakes/private/monitoring/plugins/check_openldap_replication b/flakes/private/monitoring/plugins/check_openldap_replication new file mode 100755 index 0000000..7136ad5 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_openldap_replication @@ -0,0 +1,54 @@ +#!/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/flakes/private/monitoring/plugins/check_ovh_sms b/flakes/private/monitoring/plugins/check_ovh_sms new file mode 100755 index 0000000..caf279c --- /dev/null +++ b/flakes/private/monitoring/plugins/check_ovh_sms @@ -0,0 +1,25 @@ +#!/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/flakes/private/monitoring/plugins/check_postgres_database_count b/flakes/private/monitoring/plugins/check_postgres_database_count new file mode 100755 index 0000000..43bdd8c --- /dev/null +++ b/flakes/private/monitoring/plugins/check_postgres_database_count @@ -0,0 +1,32 @@ +#!/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/flakes/private/monitoring/plugins/check_postgres_replication b/flakes/private/monitoring/plugins/check_postgres_replication new file mode 100755 index 0000000..ff257a3 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_postgres_replication @@ -0,0 +1,35 @@ +#!/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/flakes/private/monitoring/plugins/check_redis_replication b/flakes/private/monitoring/plugins/check_redis_replication new file mode 100755 index 0000000..6dbe4c4 --- /dev/null +++ b/flakes/private/monitoring/plugins/check_redis_replication @@ -0,0 +1,38 @@ +#!/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/flakes/private/monitoring/plugins/check_zfs_snapshot b/flakes/private/monitoring/plugins/check_zfs_snapshot new file mode 100755 index 0000000..56f8c4f --- /dev/null +++ b/flakes/private/monitoring/plugins/check_zfs_snapshot @@ -0,0 +1,325 @@ +#! /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/flakes/private/monitoring/plugins/notify_by_apprise b/flakes/private/monitoring/plugins/notify_by_apprise new file mode 100755 index 0000000..82bc5a3 --- /dev/null +++ b/flakes/private/monitoring/plugins/notify_by_apprise @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +APPRISE_USERNAME="Naemon" +APPRISE_USERICON="https://assets.immae.eu/monitoring.png" +APPRISE_URLS=$(echo "$2" | sed -e "s/{username}/$APPRISE_USERNAME/g" -e "s@{image_url}@$APPRISE_USERICON@g") + +if [ "$SERVICESTATE" = "CRITICAL" ]; then + ICON="❗" +elif [ "$SERVICESTATE" = "WARNING" ]; then + ICON="⚠️:" +elif [ "$SERVICESTATE" = "OK" ]; then + ICON="✅" +elif [ "$SERVICESTATE" = "UNKNOWN" ]; then + ICON="❓" +elif [ "$HOSTSTATE" = "UP" ]; then + ICON="✅" +elif [ "$HOSTSTATE" = "DOWN" ]; then + ICON="❗" +elif [ "$HOSTSTATE" = "UNKNOWN" ]; then + ICON="❓" +elif [ "$HOSTSTATE" = "UNREACHABLE" ]; then + ICON="❓" +else + ICON="◻" +fi + +if [ "$1" = "host" ]; then + apprise --title "${ICON} ${NOTIFICATIONTYPE} ${HOST} is ${HOSTSTATE}" --body "$HOSTOUTPUT" $APPRISE_URLS +else + apprise --title "${ICON} ${NOTIFICATIONTYPE} ${SERVICEDESC} on ${HOST} is ${SERVICESTATE}" --body "$SERVICEOUTPUT" $APPRISE_URLS +fi diff --git a/flakes/private/monitoring/plugins/notify_by_email b/flakes/private/monitoring/plugins/notify_by_email new file mode 100755 index 0000000..959db26 --- /dev/null +++ b/flakes/private/monitoring/plugins/notify_by_email @@ -0,0 +1,29 @@ +#!/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/flakes/private/monitoring/plugins/notify_by_slack b/flakes/private/monitoring/plugins/notify_by_slack new file mode 100755 index 0000000..1b16a0d --- /dev/null +++ b/flakes/private/monitoring/plugins/notify_by_slack @@ -0,0 +1,46 @@ +#!/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/flakes/private/monitoring/plugins/send_nrdp.sh b/flakes/private/monitoring/plugins/send_nrdp.sh new file mode 100755 index 0000000..c83c8cb --- /dev/null +++ b/flakes/private/monitoring/plugins/send_nrdp.sh @@ -0,0 +1,57 @@ +#!/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/flakes/private/monitoring/send_mails b/flakes/private/monitoring/send_mails new file mode 100755 index 0000000..105c505 --- /dev/null +++ b/flakes/private/monitoring/send_mails @@ -0,0 +1,15 @@ +#!/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/flakes/private/monitoring/to_objects.nix b/flakes/private/monitoring/to_objects.nix new file mode 100644 index 0000000..57a71ad --- /dev/null +++ b/flakes/private/monitoring/to_objects.nix @@ -0,0 +1,77 @@ +{ 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 builtins.toString v; + + toService = service: '' + define service { + ${builtins.concatStringsSep "\n" (mapAttrsToList (k: v: + " ${pad 30 k} ${toStr k v}" + ) (filterAttrs (k: v: ! hasPrefix "__passive_" k) 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} ${builtins.toString 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" "hostdependency"] + then toOthersArray keyname v + else builtins.trace ("Warning: unknown object type " + keyname) ""; + toObjects = v: builtins.concatStringsSep "\n" (mapAttrsToList toObjects' v); +in + toObjects diff --git a/flakes/private/openarc/flake.lock b/flakes/private/openarc/flake.lock index be75993..60b0fdf 100644 --- a/flakes/private/openarc/flake.lock +++ b/flakes/private/openarc/flake.lock @@ -2,7 +2,8 @@ "nodes": { "files-watcher": { "locked": { - "narHash": "sha256-6urOJuzXsu4HJHyVmrZHd40SMzzTeHiOiDOM40q53Y0=", + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", "path": "../../files-watcher", "type": "path" }, @@ -26,68 +27,19 @@ "type": "github" } }, - "my-lib": { - "inputs": { - "nixpkgs": "nixpkgs" - }, + "myuids": { "locked": { - "narHash": "sha256-HGNP1eH7b42BxViYx/F3ZPO9CM1X+5qfA9JoP2ArN+s=", - "path": "../../lib", + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", "type": "path" }, "original": { - "path": "../../lib", + "path": "../myuids", "type": "path" } }, - "myuids": { - "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" - }, - "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" - } - }, - "nix-lib": { - "locked": { - "lastModified": 1633008342, - "narHash": "sha256-wZV5YidnsqV/iufDIhaZip3LzwUGeIt8wtdiGS5+cXc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6eae8a116011f4db0aa5146f364820024411d6bb", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs": { - "locked": { - "lastModified": 1631570365, - "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "df7113c0727881519248d4c7d080324e0ee3327b", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { "locked": { "lastModified": 1597943282, "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", @@ -106,11 +58,12 @@ "inputs": { "flake-utils": "flake-utils", "myuids": "myuids", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "openarc": "openarc_2" }, "locked": { - "narHash": "sha256-ilrfNs6jpi1OceDE3y1atkovECx6PKNWubwLc0Sjx+s=", + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", "path": "../../openarc", "type": "path" }, @@ -138,15 +91,14 @@ "root": { "inputs": { "files-watcher": "files-watcher", - "my-lib": "my-lib", - "nix-lib": "nix-lib", "openarc": "openarc", "secrets": "secrets" } }, "secrets": { "locked": { - "narHash": "sha256-w3u1bMEJHCg9SqErJ5Qi0sTX2xx7mk+HrHZXzpjQd1w=", + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", "path": "../../secrets", "type": "path" }, diff --git a/flakes/private/openarc/flake.nix b/flakes/private/openarc/flake.nix index b4ab4c8..56c3a1a 100644 --- a/flakes/private/openarc/flake.nix +++ b/flakes/private/openarc/flake.nix @@ -1,63 +1,47 @@ { - inputs.openarc = { - path = "../../openarc"; - type = "path"; - }; - inputs.secrets = { - path = "../../secrets"; - type = "path"; - }; - inputs.files-watcher = { - path = "../../files-watcher"; - type = "path"; - }; - inputs.my-lib = { - path = "../../lib"; - type = "path"; - }; - inputs.nix-lib.url = "github:NixOS/nixpkgs"; + inputs.openarc.url = "path:../../openarc"; + inputs.secrets.url = "path:../../secrets"; + inputs.files-watcher.url = "path:../../files-watcher"; description = "Private configuration for openarc"; - outputs = { self, nix-lib, my-lib, files-watcher, openarc, secrets }: - let - cfg = name': { config, lib, pkgs, name, ... }: { - imports = [ - (my-lib.lib.withNarKey files-watcher "nixosModule") - (my-lib.lib.withNarKey openarc "nixosModule") - (my-lib.lib.withNarKey secrets "nixosModule") - ]; - config = lib.mkIf (name == name') { - services.openarc = { - enable = true; - user = "opendkim"; - socket = "/run/openarc/openarc.sock"; - group = config.services.postfix.group; - configFile = pkgs.writeText "openarc.conf" '' - AuthservID mail.immae.eu - Domain mail.immae.eu - KeyFile ${config.secrets.fullPaths."opendkim/eldiron.private"} - Mode sv - Selector eldiron - SoftwareHeader yes - Syslog Yes - ''; - }; - systemd.services.openarc.serviceConfig.Slice = "mail.slice"; - systemd.services.openarc.postStart = '' - while [ ! -S ${config.services.openarc.socket} ]; do - sleep 0.5 - done - chmod g+w ${config.services.openarc.socket} + outputs = { self, files-watcher, openarc, secrets }: { + nixosModule = self.nixosModules.openarc; + nixosModules.openarc = { config, pkgs, ... }: { + imports = [ + files-watcher.nixosModule + openarc.nixosModule + secrets.nixosModule + ]; + config = { + services.openarc = { + enable = true; + user = "opendkim"; + socket = "/run/openarc/openarc.sock"; + group = config.services.postfix.group; + configFile = pkgs.writeText "openarc.conf" '' + AuthservID mail.immae.eu + Domain mail.immae.eu + KeyFile ${config.secrets.fullPaths."opendkim/eldiron.private"} + Mode sv + Selector eldiron + SoftwareHeader yes + Syslog Yes ''; - services.filesWatcher.openarc = { - restart = true; - paths = [ - config.secrets.fullPaths."opendkim/eldiron.private" - ]; - }; + }; + systemd.services.openarc.serviceConfig.Slice = "mail.slice"; + systemd.services.openarc.postStart = '' + while [ ! -S ${config.services.openarc.socket} ]; do + sleep 0.5 + done + chmod g+w ${config.services.openarc.socket} + ''; + services.filesWatcher.openarc = { + restart = true; + paths = [ + config.secrets.fullPaths."opendkim/eldiron.private" + ]; }; }; - in - openarc.outputs // - { nixosModules = openarc.nixosModules or {} // nix-lib.lib.genAttrs ["eldiron" "backup-2"] cfg; }; + }; + }; } diff --git a/flakes/private/opendmarc/flake.lock b/flakes/private/opendmarc/flake.lock index f40e1a9..fdd4d64 100644 --- a/flakes/private/opendmarc/flake.lock +++ b/flakes/private/opendmarc/flake.lock @@ -1,8 +1,21 @@ { "nodes": { + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, "files-watcher": { "locked": { - "narHash": "sha256-6urOJuzXsu4HJHyVmrZHd40SMzzTeHiOiDOM40q53Y0=", + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", "path": "../../files-watcher", "type": "path" }, @@ -26,68 +39,19 @@ "type": "github" } }, - "my-lib": { - "inputs": { - "nixpkgs": "nixpkgs" - }, + "myuids": { "locked": { - "narHash": "sha256-HGNP1eH7b42BxViYx/F3ZPO9CM1X+5qfA9JoP2ArN+s=", - "path": "../../lib", + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", "type": "path" }, "original": { - "path": "../../lib", + "path": "../myuids", "type": "path" } }, - "myuids": { - "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" - }, - "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" - } - }, - "nix-lib": { - "locked": { - "lastModified": 1633008342, - "narHash": "sha256-wZV5YidnsqV/iufDIhaZip3LzwUGeIt8wtdiGS5+cXc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6eae8a116011f4db0aa5146f364820024411d6bb", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs": { - "locked": { - "lastModified": 1631570365, - "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "df7113c0727881519248d4c7d080324e0ee3327b", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { "locked": { "lastModified": 1597943282, "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", @@ -106,10 +70,11 @@ "inputs": { "flake-utils": "flake-utils", "myuids": "myuids", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs" }, "locked": { - "narHash": "sha256-7jup/d3+WXXWsNMB7Sp5Py4rJQV30Z5+PJITBISbQ9o=", + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", "path": "../../opendmarc", "type": "path" }, @@ -120,16 +85,16 @@ }, "root": { "inputs": { + "environment": "environment", "files-watcher": "files-watcher", - "my-lib": "my-lib", - "nix-lib": "nix-lib", "opendmarc": "opendmarc", "secrets": "secrets" } }, "secrets": { "locked": { - "narHash": "sha256-w3u1bMEJHCg9SqErJ5Qi0sTX2xx7mk+HrHZXzpjQd1w=", + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", "path": "../../secrets", "type": "path" }, diff --git a/flakes/private/opendmarc/flake.nix b/flakes/private/opendmarc/flake.nix index e2575e7..7e9e8eb 100644 --- a/flakes/private/opendmarc/flake.nix +++ b/flakes/private/opendmarc/flake.nix @@ -1,77 +1,62 @@ { - inputs.opendmarc = { - path = "../../opendmarc"; - type = "path"; - }; - inputs.secrets = { - path = "../../secrets"; - type = "path"; - }; - inputs.files-watcher = { - path = "../../files-watcher"; - type = "path"; - }; - inputs.my-lib = { - path = "../../lib"; - type = "path"; - }; - inputs.nix-lib.url = "github:NixOS/nixpkgs"; + inputs.opendmarc.url = "path:../../opendmarc"; + inputs.environment.url = "path:../environment"; + inputs.secrets.url = "path:../../secrets"; + inputs.files-watcher.url = "path:../../files-watcher"; description = "Private configuration for opendmarc"; - outputs = { self, nix-lib, opendmarc, my-lib, files-watcher, secrets }: - let - cfg = name': { config, lib, pkgs, name, ... }: { - imports = [ - (my-lib.lib.withNarKey files-watcher "nixosModule") - (my-lib.lib.withNarKey opendmarc "nixosModule") - (my-lib.lib.withNarKey secrets "nixosModule") - ]; - config = lib.mkIf (name == name') { - users.users."${config.services.opendmarc.user}".extraGroups = [ "keys" ]; - systemd.services.opendmarc.serviceConfig.Slice = "mail.slice"; - services.opendmarc = { - enable = true; - socket = "/run/opendmarc/opendmarc.sock"; - configFile = pkgs.writeText "opendmarc.conf" '' - AuthservID HOSTNAME - FailureReports false - FailureReportsBcc postmaster@immae.eu - FailureReportsOnNone true - FailureReportsSentBy postmaster@immae.eu - IgnoreAuthenticatedClients true - IgnoreHosts ${config.secrets.fullPaths."opendmarc/ignore.hosts"} - SoftwareHeader true - SPFIgnoreResults true - SPFSelfValidate true - UMask 002 - ''; - group = config.services.postfix.group; - }; - services.filesWatcher.opendmarc = { - restart = true; - paths = [ - config.secrets.fullPaths."opendmarc/ignore.hosts" - ]; - }; - secrets.keys = { - "opendmarc/ignore.hosts" = { - user = config.services.opendmarc.user; - group = config.services.opendmarc.group; - permissions = "0400"; - text = let - mxes = lib.attrsets.filterAttrs - (n: v: v.mx.enable) - config.myEnv.servers; - in - builtins.concatStringsSep "\n" ([ - config.myEnv.mail.dmarc.ignore_hosts - ] ++ lib.mapAttrsToList (n: v: v.fqdn) mxes); - }; + outputs = { self, environment, opendmarc, files-watcher, secrets }: { + nixosModule = self.nixosModules.opendmarc; + nixosModules.opendmarc = { config, lib, pkgs, ... }: { + imports = [ + environment.nixosModule + files-watcher.nixosModule + opendmarc.nixosModule + secrets.nixosModule + ]; + config = { + users.users."${config.services.opendmarc.user}".extraGroups = [ "keys" ]; + systemd.services.opendmarc.serviceConfig.Slice = "mail.slice"; + services.opendmarc = { + enable = true; + socket = "/run/opendmarc/opendmarc.sock"; + configFile = pkgs.writeText "opendmarc.conf" '' + AuthservID HOSTNAME + FailureReports false + FailureReportsBcc postmaster@immae.eu + FailureReportsOnNone true + FailureReportsSentBy postmaster@immae.eu + IgnoreAuthenticatedClients true + IgnoreHosts ${config.secrets.fullPaths."opendmarc/ignore.hosts"} + SoftwareHeader true + SPFIgnoreResults true + SPFSelfValidate true + UMask 002 + ''; + group = config.services.postfix.group; + }; + services.filesWatcher.opendmarc = { + restart = true; + paths = [ + config.secrets.fullPaths."opendmarc/ignore.hosts" + ]; + }; + secrets.keys = { + "opendmarc/ignore.hosts" = { + user = config.services.opendmarc.user; + group = config.services.opendmarc.group; + permissions = "0400"; + text = let + mxes = lib.attrsets.filterAttrs + (n: v: v.mx.enable) + config.myEnv.servers; + in + builtins.concatStringsSep "\n" ([ + config.myEnv.mail.dmarc.ignore_hosts + ] ++ lib.mapAttrsToList (n: v: v.fqdn) mxes); }; }; }; - in - opendmarc.outputs // - { nixosModules = opendmarc.nixosModules or {} // nix-lib.lib.genAttrs ["eldiron" "backup-2"] cfg; }; + }; + }; } - diff --git a/flakes/private/openldap/flake.nix b/flakes/private/openldap/flake.nix new file mode 100644 index 0000000..130312d --- /dev/null +++ b/flakes/private/openldap/flake.nix @@ -0,0 +1,6 @@ +{ + outputs = { self }: { + immae-schema = ./immae.schema; + immae-ldif = ./immae.ldif; + }; +} diff --git a/flakes/private/openldap/immae.ldif b/flakes/private/openldap/immae.ldif new file mode 100644 index 0000000..f1b4cb7 --- /dev/null +++ b/flakes/private/openldap/immae.ldif @@ -0,0 +1,83 @@ +# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. +# CRC32 22130f5f +dn: cn=immae,cn=schema,cn=config +objectClass: olcSchemaConfig +cn: immae +olcObjectIdentifier: {0}Immaeroot 1.3.6.1.4.1.50071 +olcObjectIdentifier: {1}Immae Immaeroot:2 +olcObjectIdentifier: {2}ImmaeattributeType Immae:3 +olcObjectIdentifier: {3}ImmaeobjectClass Immae:4 +olcAttributeTypes: {0}( ImmaeattributeType:1 NAME 'immaeTtrssLogin' DESC 'lo + gin for TTRSS' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SY + NTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) +olcAttributeTypes: {1}( ImmaeattributeType:2 NAME 'immaeFtpDirectory' DESC ' + home directory for ftp' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466. + 115.121.1.26 ) +olcAttributeTypes: {2}( ImmaeattributeType:3 NAME 'immaeFtpUid' DESC 'user i + d for ftp' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) +olcAttributeTypes: {3}( ImmaeattributeType:4 NAME 'immaeFtpGid' DESC 'group + id for ftp' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) +olcAttributeTypes: {4}( ImmaeattributeType:5 NAME 'immaeSshKey' DESC 'OpenSS + H Public key' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.4 + 0 ) +olcAttributeTypes: {5}( ImmaeattributeType:6 NAME 'immaeAccessDn' EQUALITY d + istinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) +olcAttributeTypes: {6}( ImmaeattributeType:17 NAME 'immaeAccessWriteDn' EQUA + LITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) +olcAttributeTypes: {7}( ImmaeattributeType:18 NAME 'immaeAccessReadSubtree' + EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) +olcAttributeTypes: {8}( ImmaeattributeType:7 NAME 'immaeXmppUid' DESC 'user + part for Xmpp' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SY + NTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) +olcAttributeTypes: {9}( ImmaeattributeType:8 NAME 'immaePostfixAddress' DESC + 'the dovecot address to match as username' EQUALITY caseIgnoreIA5Match SUB + STR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} + ) +olcAttributeTypes: {10}( ImmaeattributeType:9 NAME 'immaePostfixHome' DESC ' + the postfix home directory' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1 + 466.115.121.1.26 SINGLE-VALUE ) +olcAttributeTypes: {11}( ImmaeattributeType:10 NAME 'immaePostfixMail' DESC + 'the dovecot mail location' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1 + 466.115.121.1.26 SINGLE-VALUE ) +olcAttributeTypes: {12}( ImmaeattributeType:11 NAME 'immaePostfixUid' DESC ' + the dovecot uid' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121 + .1.26 SINGLE-VALUE ) +olcAttributeTypes: {13}( ImmaeattributeType:12 NAME 'immaePostfixGid' DESC ' + the dovecot gid' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121 + .1.26 SINGLE-VALUE ) +olcAttributeTypes: {14}( ImmaeattributeType:16 NAME 'immaePuppetJson' DESC ' + Puppet hiera json' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.12 + 1.1.40 ) +olcAttributeTypes: {15}( ImmaeattributeType:19 NAME 'immaeTaskId' DESC 'Task + warrior server Org:Name:Key' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubs + tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) +olcAttributeTypes: {16}( ImmaeattributeType:20 NAME 'immaePeertubeId' DESC ' + login for Peertube' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMat + ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) +olcObjectClasses: {0}( ImmaeobjectClass:1 NAME 'immaeTtrssClass' DESC 'Expan + sion of the existing object classes for ttrss' SUP top AUXILIARY MUST immae + TtrssLogin ) +olcObjectClasses: {1}( ImmaeobjectClass:2 NAME 'immaeFtpClass' DESC 'Expansi + on of the existing object classes for ftp' SUP top AUXILIARY MUST ( immaeFt + pDirectory $ immaeFtpGid $ immaeFtpUid ) ) +olcObjectClasses: {2}( ImmaeobjectClass:3 NAME 'immaeSshClass' DESC 'OpenSSH + class' SUP top AUXILIARY MAY immaeSSHKey ) +olcObjectClasses: {3}( ImmaeobjectClass:4 NAME 'immaeAccessClass' DESC 'Acce + ss class' SUP top AUXILIARY MAY ( immaeAccessDn $ immaeAccessWriteDn $ imma + eAccessReadSubtree ) ) +olcObjectClasses: {4}( ImmaeobjectClass:5 NAME 'immaeXmppClass' DESC 'Expans + ion of the existing object classes for XMPP' SUP top AUXILIARY MUST immaeXm + ppUid ) +olcObjectClasses: {5}( ImmaeobjectClass:6 NAME 'immaePostfixClass' DESC 'Exp + ansion of the existing object classes for Postfix' SUP top AUXILIARY MAY ( + immaePostfixHome $ immaePostfixMail $ immaePostfixUid $ immaePostfixGid ) M + UST ( immaePostfixAddress ) ) +olcObjectClasses: {6}( ImmaeobjectClass:8 NAME 'immaePuppetClass' DESC 'Expa + nsion of the existing object classes for Puppet' SUP top AUXILIARY MUST imm + aePuppetJson ) +olcObjectClasses: {7}( ImmaeobjectClass:9 NAME 'immaeTaskClass' DESC 'Expans + ion of the existing object classes for Task' SUP top AUXILIARY MUST immaeTa + skId ) +olcObjectClasses: {8}( ImmaeobjectClass:10 NAME 'immaePeertubeClass' DESC 'E + xpansion of the existing object classes for peertube' SUP top AUXILIARY MUS + T immaePeertubeId ) diff --git a/flakes/private/openldap/immae.schema b/flakes/private/openldap/immae.schema new file mode 100644 index 0000000..7b3b587 --- /dev/null +++ b/flakes/private/openldap/immae.schema @@ -0,0 +1,179 @@ +# 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 + MAY ( immaePostfixHome $ immaePostfixMail $ immaePostfixUid $ immaePostfixGid ) + MUST ( immaePostfixAddress ) + ) + +# 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/flakes/private/paste/flake.lock b/flakes/private/paste/flake.lock index 6ad428c..e81b9ee 100644 --- a/flakes/private/paste/flake.lock +++ b/flakes/private/paste/flake.lock @@ -15,35 +15,6 @@ "type": "github" } }, - "my-lib": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "narHash": "sha256-HGNP1eH7b42BxViYx/F3ZPO9CM1X+5qfA9JoP2ArN+s=", - "path": "../../lib", - "type": "path" - }, - "original": { - "path": "../../lib", - "type": "path" - } - }, - "nix-lib": { - "locked": { - "lastModified": 1632955135, - "narHash": "sha256-MyOBftnLv5UcPCL4AzvlyNEDwGD2cGGM9HMEOno/MZw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a4d96cd808f13d924988938ecf9a46b2a2787fa3", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1631570365, @@ -59,28 +30,14 @@ "type": "github" } }, - "nixpkgs_2": { - "locked": { - "lastModified": 1631570365, - "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "df7113c0727881519248d4c7d080324e0ee3327b", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, "paste": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs" }, "locked": { - "narHash": "sha256-2ylI42ZHfzW6oCsxfFyHf5zVnDsPMwvJCACtcdErtPg=", + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", "path": "../../paste", "type": "path" }, @@ -91,8 +48,6 @@ }, "root": { "inputs": { - "my-lib": "my-lib", - "nix-lib": "nix-lib", "paste": "paste" } } diff --git a/flakes/private/paste/flake.nix b/flakes/private/paste/flake.nix index 23f8cd3..97853ea 100644 --- a/flakes/private/paste/flake.nix +++ b/flakes/private/paste/flake.nix @@ -1,30 +1,20 @@ { - inputs.paste = { - path = "../../paste"; - type = "path"; - }; - inputs.my-lib = { - path = "../../lib"; - type = "path"; - }; - inputs.nix-lib.url = "github:NixOS/nixpkgs"; + inputs.paste.url = "path:../../paste"; description = "Private configuration for paste"; - outputs = { self, my-lib, nix-lib, paste }: - let - cfg = name': { config, lib, pkgs, name, ... }: { - imports = [ - (my-lib.lib.withNarKey paste "nixosModule") - ]; - config = lib.mkIf (name == name') { - services.paste = { - enable = true; - webDirectory = "/paste"; - }; + outputs = { self, paste }: { + nixosModule = self.nixosModules.paste; + nixosModules.paste = { ... }: { + imports = [ + paste.nixosModule + ]; + config = { + services.paste = { + enable = true; + webDirectory = "/paste"; }; }; - in - paste.outputs // - { nixosModules = paste.nixosModules or {} // nix-lib.lib.genAttrs ["eldiron"] cfg; }; + }; + }; } diff --git a/flakes/private/peertube/flake.lock b/flakes/private/peertube/flake.lock index 4944da7..0ecec47 100644 --- a/flakes/private/peertube/flake.lock +++ b/flakes/private/peertube/flake.lock @@ -32,36 +32,26 @@ }, "myuids": { "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" }, "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "path": "../myuids", + "type": "path" } }, "myuids_2": { "locked": { - "dir": "flakes/myuids", - "lastModified": 1628207001, - "narHash": "sha256-7e12OfDv9zMOfqcAlsk1sZj2l3ZB03kcBdWUqhwVaWo=", - "ref": "master", - "rev": "dfe02d8fd52e33c7d4e1a209cf486696100b88f3", - "revCount": 865, - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" }, "original": { - "dir": "flakes/myuids", - "type": "git", - "url": "https://git.immae.eu/perso/Immae/Config/Nix.git" + "path": "../myuids", + "type": "path" } }, "nixpkgs": { @@ -97,12 +87,13 @@ "peertube": { "flake": false, "locked": { - "lastModified": 1610436329, - "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", - "owner": "Chocobozzz", - "repo": "PeerTube", - "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", - "type": "github" + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" }, "original": { "owner": "Chocobozzz", @@ -114,21 +105,21 @@ "peertube_2": { "flake": false, "locked": { - "lastModified": 1611184594, - "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", - "ref": "gitolite_local/syden", - "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", - "revCount": 6316, - "type": "git", - "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" }, "original": { - "ref": "gitolite_local/syden", - "type": "git", - "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" } }, - "peertube_origin": { + "peertube_open_instance": { "inputs": { "flake-utils": "flake-utils", "myuids": "myuids", @@ -136,16 +127,17 @@ "peertube": "peertube" }, "locked": { - "narHash": "sha256-ESrcCrx7QmNk8MHgws9KrPEZqIxKNQ6bcshbUPj9u88=", - "path": "../../peertube", + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", "type": "path" }, "original": { - "path": "../../peertube", + "path": "./../../peertube", "type": "path" } }, - "peertube_syden": { + "peertube_origin": { "inputs": { "flake-utils": "flake-utils_2", "myuids": "myuids_2", @@ -153,19 +145,20 @@ "peertube": "peertube_2" }, "locked": { - "narHash": "sha256-ESrcCrx7QmNk8MHgws9KrPEZqIxKNQ6bcshbUPj9u88=", - "path": "../../peertube", + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", "type": "path" }, "original": { - "path": "../../peertube", + "path": "./../../peertube", "type": "path" } }, "root": { "inputs": { - "peertube_origin": "peertube_origin", - "peertube_syden": "peertube_syden" + "peertube_open_instance": "peertube_open_instance", + "peertube_origin": "peertube_origin" } } }, diff --git a/flakes/private/peertube/flake.nix b/flakes/private/peertube/flake.nix index e0e0d54..8eb81e9 100644 --- a/flakes/private/peertube/flake.nix +++ b/flakes/private/peertube/flake.nix @@ -1,27 +1,25 @@ { description = "Patched peertube"; inputs.peertube_origin = { - path = "../../peertube"; - type = "path"; + url = "path:./../../peertube"; }; - inputs.peertube_syden = { - path = "../../peertube"; - type = "path"; + inputs.peertube_open_instance = { + url = "path:./../../peertube"; inputs.peertube = { url = "https://git.immae.eu/github/Chocobozzz/PeerTube.git"; - ref = "gitolite_local/syden"; + ref = "gitolite_local/open_instance"; flake = false; type = "git"; }; }; - outputs = { self, peertube_origin, peertube_syden }: { + outputs = { self, peertube_origin, peertube_open_instance }: { overlays = { - peertube_syden = final: prev: { peertube_syden = peertube_syden.defaultPackage."${final.system}"; }; + peertube_open_instance = final: prev: { peertube_open_instance = peertube_open_instance.defaultPackage."${final.system}"; }; peertube_origin = final: prev: { peertube_origin = peertube_origin.defaultPackage."${final.system}"; }; }; packages.x86_64-linux.peertube = peertube_origin.packages.x86_64-linux.peertube; - packages.x86_64-linux.peertube_syden = peertube_syden.packages.x86_64-linux.peertube; + packages.x86_64-linux.peertube_open_instance = peertube_open_instance.packages.x86_64-linux.peertube; defaultPackage.x86_64-linux = peertube_origin.defaultPackage.x86_64-linux; nixosModule = peertube_origin.nixosModule; }; diff --git a/flakes/private/php/flake.lock b/flakes/private/php/flake.lock new file mode 100644 index 0000000..c9af933 --- /dev/null +++ b/flakes/private/php/flake.lock @@ -0,0 +1,62 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "nixpkgs-4": "nixpkgs-4" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/php/flake.nix b/flakes/private/php/flake.nix new file mode 100644 index 0000000..a730b68 --- /dev/null +++ b/flakes/private/php/flake.nix @@ -0,0 +1,40 @@ +{ + description = "Php old versions"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs = { + url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742"; + flake = false; + }; + inputs.nixpkgs-4 = { + url = "github:NixOS/nixpkgs/062a0c5437b68f950b081bbfc8a699d57a4ee026"; + flake = false; + }; + outputs = { self, nixpkgs, nixpkgs-4, flake-utils }: flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + in rec { + packages = { + php72 = pkgs.php72; + php73 = pkgs.php73; + php74 = (import nixpkgs-4 { inherit system; overlays = []; }).php74; + cryptpad = (import nixpkgs-4 { inherit system; overlays = []; }).cryptpad; + python37 = (import nixpkgs-4 { inherit system; overlays = []; }).python37; + python37Packages = (import nixpkgs-4 { inherit system; overlays = []; }).python37Packages; + telegram-purple = (import nixpkgs-4 { inherit system; overlays = []; }).telegram-purple; + }; + defaultPackage = packages.php73; + legacyPackages = packages; + }) // rec { + overlays = { + php = final: prev: { + php72 = self.packages."${final.system}".php72; + php73 = self.packages."${final.system}".php73; + php74 = self.packages."${final.system}".php74; + cryptpad = self.packages."${final.system}".cryptpad; + python37 = self.packages."${final.system}".python37; + telegram-purple = self.packages."${final.system}".telegram-purple; + }; + }; + overlay = overlays.php; + }; +} diff --git a/flakes/private/ssh/flake.lock b/flakes/private/ssh/flake.lock new file mode 100644 index 0000000..bbb2011 --- /dev/null +++ b/flakes/private/ssh/flake.lock @@ -0,0 +1,36 @@ +{ + "nodes": { + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "root": { + "inputs": { + "environment": "environment", + "secrets": "secrets" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/ssh/flake.nix b/flakes/private/ssh/flake.nix new file mode 100644 index 0000000..0ca6d67 --- /dev/null +++ b/flakes/private/ssh/flake.nix @@ -0,0 +1,107 @@ +{ + inputs.environment.url = "path:../environment"; + inputs.secrets.url = "path:../../secrets"; + outputs = { self, environment, secrets }: { + nixosModule = self.nixosModules.ssh; + nixosModules.ssh = { lib, pkgs, config, ... }: + let + cfg = config.myServices.ssh; + in + { + imports = [ + environment.nixosModule + secrets.nixosModule + ]; + options.myServices.ssh = let + module = lib.types.submodule { + options = { + vars = lib.mkOption { + type = lib.types.attrsOf lib.types.lines; + default = {}; + description = '' + variables to interpolate in the script. A `name_` prefix will be prepended + ''; + }; + 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 { + modules = lib.mkOption { + type = lib.types.attrsOf module; + default = {}; + description = '' + List of modules to enable + ''; + }; + }; + config = lib.mkIf (builtins.length (builtins.attrValues 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; + }; + secrets.keys."ssh-psql" = { + user = "nobody"; + group = "nogroup"; + permissions = "0400"; + text = config.myEnv.sshd.psql.password; + }; + system.activationScripts.sshd = { + deps = [ "secrets" ]; + text = '' + install -Dm400 -o nobody -g nogroup -T ${config.secrets.fullPaths."ssh-ldap"} /etc/ssh/ldap_password + install -Dm400 -o nobody -g nogroup -T ${config.secrets.fullPaths."ssh-psql"} /etc/ssh/psql_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 pkgs.postgresql ] + ++ lib.flatten (map (v: v.dependencies) (builtins.attrValues cfg.modules)) + ); + vars = lib.concatMapAttrs (n: v: ( + lib.mapAttrs' (n': lib.nameValuePair "${n}_${n'}") v.vars + )) cfg.modules; + fullScript = pkgs.runCommand "ldap_authorized_keys" (vars // { + snippets = builtins.concatStringsSep "\n" (map (v: v.snippet) (builtins.attrValues cfg.modules)); + }) '' + substituteAll ${./ldap_authorized_keys.sh} $out + # Second call for the included snippets + substituteAllInPlace $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/flakes/private/ssh/ldap_authorized_keys.sh b/flakes/private/ssh/ldap_authorized_keys.sh new file mode 100755 index 0000000..f4395be --- /dev/null +++ b/flakes/private/ssh/ldap_authorized_keys.sh @@ -0,0 +1,62 @@ +#!/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://ldap.immae.eu" +LDAP_BASE="dc=immae,dc=eu" +USER_LDAP_BASE="ou=users,dc=immae,dc=eu" + +PSQL_BASE="immae" +PSQL_HOST="localhost" +PSQL_USER="immae_auth_read" +PSQL_PASS=$(cat /etc/ssh/psql_password) + +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 "$@" +} + +psql_search() { + PGPASSWORD="$PSQL_PASS" psql -U "$PSQL_USER" -h "$PSQL_HOST" -X -A -t -d "$PSQL_BASE" -c "$@" +} + +ldap_keys() { + user=$1; + @snippets@ +} + +ldap_keys $@ diff --git a/flakes/private/system/flake.lock b/flakes/private/system/flake.lock new file mode 100644 index 0000000..3602f00 --- /dev/null +++ b/flakes/private/system/flake.lock @@ -0,0 +1,185 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs_2", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "root": { + "inputs": { + "backports": "backports", + "environment": "environment", + "mypackages": "mypackages", + "myuids": "myuids", + "secrets-public": "secrets-public" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/private/system/flake.nix b/flakes/private/system/flake.nix new file mode 100644 index 0000000..04ebbc7 --- /dev/null +++ b/flakes/private/system/flake.nix @@ -0,0 +1,168 @@ +{ + inputs.environment.url = "path:../environment"; + inputs.secrets-public.url = "path:../../secrets"; + inputs.mypackages.url = "path:../../mypackages"; + inputs.myuids.url = "path:../../myuids"; + inputs.backports.url = "path:../../backports"; + outputs = { self, secrets-public, mypackages, backports, environment, myuids }: { + nixosModule = self.nixosModules.system; + nixosModules.system = { pkgs, lib, config, name, nodes, secrets, options, ... }: + { + imports = [ + secrets.nixosModules.users-config-common + environment.nixosModule + secrets-public.nixosModule + ]; + config = { + myEnv = import secrets.environment-file; + networking.hostName = name; + deployment.keys."vars.yml" = { + keyCommand = [ pkgs.stdenv.shell "-c" "cat ${secrets.vars-file}" ]; + user = "root"; + group = "root"; + permissions = "0400"; + }; + + networking.extraHosts = builtins.concatStringsSep "\n" + (lib.mapAttrsToList (n: v: "${lib.head 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 = [ + ./public_keys/Immae.pub + ]; + secrets.secretsVars = "/run/keys/vars.yml"; + + services.openssh.enable = true; + + nixpkgs.overlays = + builtins.attrValues mypackages.overlays ++ + builtins.attrValues backports.overlays ++ + [ + (self: super: { + postgresql = self.postgresql_pam; + mariadb = self.mariadb_106.overrideAttrs(old: { + passthru = old.passthru // { mysqlVersion = "5.7"; }; + }); + }) # 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.groups.acme.gid = myuids.lib.gids.acme; + users.users = + builtins.listToAttrs (map (x: lib.attrsets.nameValuePair x.name ({ + isNormalUser = true; + home = "/home/${x.name}"; + createHome = true; + linger = true; + # Enable in latest unstable homeMode = "755"; + } // x)) (config.hostEnv.users pkgs)) + // { + acme.uid = myuids.lib.uids.acme; + }; + environment.systemPackages = [ + pkgs.inetutils + pkgs.htop + pkgs.iftop + pkgs.bind.dnsutils + pkgs.httpie + pkgs.iotop + pkgs.whois + pkgs.ngrep + pkgs.tcpdump + pkgs.wireshark-cli + pkgs.tcpflow + pkgs.mitmproxy + pkgs.nmap + pkgs.p0f + pkgs.socat + pkgs.lsof + pkgs.psmisc + pkgs.openssl + pkgs.wget + + pkgs.pv + pkgs.smartmontools + + pkgs.git + pkgs.vim + pkgs.rsync + pkgs.strace + pkgs.sqlite + + pkgs.jq + pkgs.yq + ]; + + users.mutableUsers = lib.mkDefault false; + + systemd.services."vars.yml-key".enable = lib.mkForce false; + systemd.targets.maintenance = { + description = "Maintenance target with only sshd"; + after = [ "network-online.target" "sshd.service" ]; + requires = [ "network-online.target" "sshd.service" ]; + unitConfig.AllowIsolate = "yes"; + }; + + security.acme.acceptTerms = true; + security.acme.preliminarySelfsigned = true; + + security.acme.certs = { + "${name}" = { + domain = config.hostEnv.fqdn; + }; + }; + security.acme.defaults = { + email = "ismael@bouya.org"; + webroot = "/var/lib/acme/acme-challenges"; + postRun = builtins.concatStringsSep "\n" [ + (lib.optionalString config.services.nginx.enable "systemctl reload nginx.service") + ]; + extraLegoRenewFlags = [ "--reuse-key" ]; + keyType = lib.mkDefault "ec256"; # https://github.com/NixOS/nixpkgs/pull/83121 + #extraLegoRunFlags = [ "--reuse-key" "--preferred-chain" "ISRG Root X1"]; + #extraLegoRenewFlags = ["--preferred-chain" "ISRG Root X1"]; + }; + + services.nginx = { + recommendedTlsSettings = true; + virtualHosts = { + "${config.hostEnv.fqdn}" = { + acmeRoot = config.security.acme.defaults.webroot; + useACMEHost = name; + forceSSL = true; + }; + }; + }; + + services.fail2ban.jails.DEFAULT = { + settings.bantime = "12h"; + settings.findtime = "12h"; + }; + services.fail2ban = { + enable = true; + #findtime = "12h"; + #bantime = "12h"; + bantime-increment = { + enable = true; # Enable increment of bantime after each violation + formula = "ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)"; + #multipliers = "1 2 4 8 16 32 64"; + maxtime = "168h"; # Do not ban for more than 1 week + overalljails = true; # Calculate the bantime based on all the violations + }; + maxretry = 10; + ignoreIP = let + ip4s = lib.flatten (lib.mapAttrsToList (n: v: (lib.mapAttrsToList (n: v: v.ip4 or []) v.ips)) (config.myEnv.servers)); + ip6s = lib.flatten (lib.mapAttrsToList (n: v: (lib.mapAttrsToList (n: v: v.ip6 or []) v.ips)) (config.myEnv.servers)); + in + ip4s ++ ip6s; + }; + }; + }; + }; +} diff --git a/flakes/private/system/public_keys/Immae.pub b/flakes/private/system/public_keys/Immae.pub new file mode 100644 index 0000000..dd42b04 --- /dev/null +++ b/flakes/private/system/public_keys/Immae.pub @@ -0,0 +1,322 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFvwA+gBEADlchQGPyI2M9RNRUsk8wsL9XLc8qAFWTYlVp5p7177ucxTQf6S +rny9yRCF69UqtE0ugwt+432sAAsDPi7BRA/JE95bIRBiewOiY1jYiivccP5dR6Jr +58HJ3QOHYPekqZIQhxzCWjdD2nRhhCbbxeWFJsJyaG8idGBiLkgNKxEEmqE5LIat +tzMpQFwOpL2FoYZ7+e4ZTMc+x+yqpOnGcQD1qwouqx68okSCjrVBWo5S2tK5AzzU +X8esBLNpgkhpUEZVltiNc4bmj7GZPdy4+mvS33/HQTed8YpatCFVWzcK+/uK0SYE +P8Hj1mguT9idBhAf+kv7qbTycrFkTBliP3oDNUoARWDmfQdV4nlxqW03QxUY18mL +KPByduK3hEXAZnD+/8QfVzbNVVP+70/jdSB+ckF88Li2g4bv/9uqjaObKVJB9ocG +EWslm1h7tvdCLBRgIl8b2+Zl0fComRAMuwUr+LYlWLnfygAi8Uy9hl7UcRWAAj99 +PG4ba0+y8eD8k1J2IE8HpeIzMzRwYTLtvLyJBvrKiQHJb1PGM5cS8iry81wjUPZm +dO5p5rbC8z99w7UNMaiz6iqAFAaDyLLsBZ5gWD+1ps9XxCA0zf28Z/Tc/Gj4QKAf +kpMd7lQ+gprsFyRtzcRD4WhsOL2ogKYFHYi4LE0GYduspGdQPlK/YfrKQwARAQAB +tB9Jc21hZWwgQm91eWEgPGlzbWFlbEBib3V5YS5vcmc+iQJRBBMBCAA7AhsDBQsJ +CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvw +BU4CGQEACgkQyfztbKa3lFR/kA//cHVrb/RRTLQZy514vMkOBKgAk+dj+j0lrgvJ +yR0JK1KjodduSoccPq7qRFAU+KVa3FsXMn8yY/lWaCXYJoF0DT5iEHsEuzJRc7Cn +N4aq2h42DD7z8dJCXZvtvJs+vZ7G/rlLl322TjLb2OyIybBEoPOmJl0dVG0wKBFC +r7EJmOKl3ytUWUpEbuxs1U/pP4GKrPT2CK3QcLF8JHKIPkEO347RorseeHcHhMxs +Bz5JXojts1NyLJh7lErT42atgEdTGzSmkkGm8OifZVIH2rgmnRsPHnCqrXYsa7dE +yPsC01Ns3DPYk4C5FtbpfiNvATbnkOicEwb2U55OpYUZLsFCKo7Bl+duJVY0nPRN +WiLCALPcdJL+a6hbh1hSuqHt5eNGxyrDtRPowXRTS1D4nTCgAh6+wpH47xXWEwXZ +mEnkXqHLIjsW4CSIz2gc+Bza40+wkWz6NQDEb3ncytDZu9vKK1CYwl7RGW4RFkAO +j3FWZvZp8ETPLNRVy64BhZzHY3uOxbYreE+T6JfiIZux8X+Bh4cPJHizfhSMLLS5 +kwABzalaTD33XnjKn5wQ/DfGJ+fGbF54fMlGFjne5VTNwY1ju2ieXTgVrUyzfKPF +96zcvnxo/MWwqcQ8+dXFCZjldP76puo1eVATEBeOCQs8Vj7eL9eN/eo+BfzhS3S8 +CfFFYWeIXQQQEQIAHRYhBNw4R0hwnSYZ/yhnIW0Mr/3bHP6QBQJb8AgDAAoJEG0M +r/3bHP6Q/TsAnA6vTjmrX4nY3QnevNrKefWaQvf3AJ0TALTqXhTcVYVLxfzRt/Qd +u5W2/rQvSXNtYWVsIEJvdXlhIChXb3JrKSA8aXNtYWVsLmJvdXlhQGZyZXRsaW5r +LmNvbT6JAk4EEwEIADgWIQT4KAb9ob9bmhswFOfJ/O1spreUVAUCW/AFCwIbAwUL +CQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ/O1spreUVKlBD/sE/eDbJtL8UKc6 +CN7zmA038RSjxlcJrMRoBoThCFKOFtBsYLPebnIkzCDiUwQJaIMYe2RNBHKKz0p+ +2Kvzf7q+xq8W1e72aK1DRhsBTL8/LA1kQkvh3GwMS8z3SOcbXLWqKQuQ7ztYReQG +wsT2/S8reVM96eV67K9vMHKMDF3NyYZewahX0I44YIbQJfLVG5elCkBrfHjGSeIt +tSAv56BhN8J8ky+9nGx5jwWmxc/4Oquyfe9Lf0NMTCjw1xess7UoHlzSMp57yF3T +AaqDcqD2Jdgr2meN9Yo4/Yb9dEvHFy34ppXYanX1nrHGev7YaaQWLoKLVZc3f6gR ++D7sEJUJm3IxO041CR7DBwQ1CQkx3sa66mcHxe+wchOoXBZdsqyl5Ds+zqh6eMyO +UiixDcXDxZuimEY0/+7XjlFjtzhGVNKsjV/Azh+Hx3GZnGHMVpTw73qQFHkWeDrX +FPUbinjtEVTxw0fS9PkDZB5ysgAWlXs2cqoNDMcbdyJn2xszbV5+vjlmcofsQZTr +PiX+hB6P5RQP5ogtnotvbkPDSfPfqdUk5HjGFrGX08FoP4rCromHvSL6Un2lP4I2 +mJbbQzBU/bQUGzfz6U6VEbUHtOL+7woGuXuzTYsRZ/O7/fKohyi/+qsmOozQpLFN +k5xocbF1PgpFphrKYpHaSkf6DS2/F4hdBBARAgAdFiEE3DhHSHCdJhn/KGchbQyv +/dsc/pAFAlvwCAQACgkQbQyv/dsc/pDXWACeKMbL/Dtifpd466TqQP8isfWedtIA +n2xbEmlpxG8yk0w4HQ4djwgY4RbutCpJc21hZWwgQm91eWEgPGlzbWFlbC5ib3V5 +YUBub3JtYWxlc3VwLm9yZz6JAk4EEwEIADgWIQT4KAb9ob9bmhswFOfJ/O1spreU +VAUCW/AEawIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ/O1spreUVMGJ +EAC5hKt5NCanRxEl13nQUu4+n05tdRl9C3sTczR8EUZ30zhpBV4chKgeJSD0r1VA +zBSQHMNzroGawaQn38qxFtbcSmkGRDd+0y798x1HFHp+UFiYOdQDQJVsyDuwjq4k +RF7zV+FBj0ffjn5JBy6R3wLmWCFxz1mPmkImdyyS8GEeifwTftC+SSotqfg1lh0K +C+DSQGYtPk0jLvxVPRllnjltDOSPUt9xRE785I6E9oyYrCa5Om51e0eEMzwpkl4e +QschAYILb6SNrVyEMRD5E3lJHD2r6dPvIPFNcLxIQuK/Kdco2jNq7dCL6ukdGI40 +j/oZi7XRrlFCQW321BuipJZ/7t9JWOXOrrEndQv+hOb6PeWkwF1rigjbQq+IipdJ +DUXGBfiIzlpJM5tLhs7BGfLxYNn09rOpkotXrdBzRO62lYyRdQepKpD33v96bQV2 +0w64U44+CxuicjGDw/6no54LY4J7bM1lLGwqvHSeqgYoc+Zs9WH95TNNSmaAHGSf +An4LpzW5nOXbq2rsWVbZpvsVHz3VmC9qmpsYl5tT/ninkLta3tN6TrYUFHXcDWz9 +K+HW+/oARzEmN8eg3iMmWtOnV59YEr/x2vvOHndguUL0tUpRjwuTunH9KOGZE0Kb +uI3ovgLLO2kCSGk4SdXlntu/eLq9FPYqlOpjM9CtLf9JdIhdBBARAgAdFiEE3DhH +SHCdJhn/KGchbQyv/dsc/pAFAlvwCAQACgkQbQyv/dsc/pCHCQCfdPdGx0FmknAs +rPvjuUmuCj9Q8xUAn32dsgQYTlgfTdwLSxWGj4mTD2h6tClJc21hZWwgQm91eWEg +PGJvdXlhQHBoYXJlLm5vcm1hbGVzdXAub3JnPokCTgQTAQgAOBYhBPgoBv2hv1ua +GzAU58n87Wymt5RUBQJb8ASdAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ +EMn87Wymt5RU58QQALMGlOJzcQj/arHezum5H/PiYIpZ1yY+QMCzpSgPdwupwawW +VN88aQRfU6k9xwmsU+Ghjreja09AuqYi/D2+61TM/Tmqi/9HdU6NRYw0hvaZnwFc +vudFBII2XrxmU5k9PnSR6Sq4uLUGkXmvhJddV0q+cjtif+vDi5pl9mqbWBQY8d9S +5Q6ZFZPeEeASUK7Xt/tSq9iXpb1tQsmEJ94Czl5G+gNFJcqj7nlHQ1/c9XeNsvJT +GZVLGM/cAZNzB6AC8Kz+iWUypFuXifC2PYGpJDJ8klqTmDQikGQtM1HMHda6rnwU +L7JIfbuwGbMk65CtG2YE8QqB+/GIfkzWySenmIrldn9Vp5EKB0DD529TyOwQWgzz ++HuVP/4QfkNRxNquWxlAPXmcNfV1SV+/Xn1KwSspb7QlAjiXXOL13J2dwYFpV+21 +vsSW5XqJXfWUU8d4YVOdq1kUTwLjWnWyxwtt8j68KSuTOT4JTA8oNXg87r0B4Fzr +6AoxCM8ePywm5IW55gNAwViTKWBAcNrcwRTP647oNOM5+8D7NZIBpnKffNc/S2S5 +iI1tmaM0yXavmCm0Hb7lkFIsxM2Y2lxwHexPck2ftPXIrjhPYLcFVBdLVx2V2yXe +cFW2vMGZiasVobFqqp1g8htmAlTkN0cTDY7l96wDuirC6OeCbVomEgxQEd0MiF0E +EBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/92xz+kHsv +AJ4+zdfjTdO1FUWb42bWdPQfiFe9nACeMIRp1Iu3tNVJkfS9CGGqhrChpfu0LUlz +bWFlbCBCb3V5YSA8aXNtYWVsLmJvdXlhLjA2QG5vcm1hbGVzdXAub3JnPokCTgQT +AQgAOBYhBPgoBv2hv1uaGzAU58n87Wymt5RUBQJb8ASsAhsDBQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAAAoJEMn87Wymt5RUxa8P/i7zdQ9i5BfWITbdyCgXNoQYIcE3 +J6lIa15eLUcfDcL707zOrUSbhSkthLjeqZoNRCalqjeDOdgCQC1PNoISdkMGd9PO +VOwS3G7Pjt4FSjPVHyw9+Su57pwTcLXBhEyBAkv+tx/QrB/UBCFzPUnsl71QH51y +T8+bNdOiBxssdgn/9IrObn7tu8xDf+d/yGsA493x+mxalai+fhd/t0yzQcdcTrvD +EKRxAaU8wXe8oSwcW5cRmXIi+N4aEnLRO/so9YDGf4z2FQVSL0ktoZYMqZ1ZvIb0 +MNCNl2NgNXThhrAPk9Rhs+S5nRzazJ+tS+D2S728EPpRHpUE43+vewtCdu5c5NWd +Lz88o/jxLwcNwQa2iJoFMyqr15lHt+vM7OyD9X650IJwQw24n4tF6TijzH5GhWcN +SnB7RpLSkftQldpK/zK+tmFH4vVpv+bI3JKAfzRga+5Fu42kB5uHVzXF3qMwYgEO +sRNL5d4xV4SATce1mb8vFpsQmGOWnZAcCaQYhLKfMl7zR5ukytTjf3hRMRH0GAjh +06QAoBMJZhWosYehPi1odjTngIf6hFOqA5prz8Cu/AFe/8aftp9UorJOekAj2io0 +CENRv21qrN8R4bNo04aTMD6WrY+mBL8MteR0ooD3ENQEAZ6UUyZwTzUJk2UUl+5M +ch/HgJ+rQozmRGYeiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AI +BAAKCRBtDK/92xz+kPsmAJ4wGQ0Hly2eTVzsU8Ht4609Q5kf2wCdHGuu863a0GHv +uUdEokzQEsumYPG0OElzbWFlbCBCb3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVy +ZSkgPGlfYm91eWFAeWFob28uZnI+iQJOBBMBCAA4FiEE+CgG/aG/W5obMBTnyfzt +bKa3lFQFAlvwBMkCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQyfztbKa3 +lFQTlxAAjbuDy3prdEBNMYfi/870MO5eeDOCMtiDJDae4fQjj2NANjeuDGNP659B +/k9uS7o5nrWB7E6rdG4a1J+Qzj5I775xTP/zVbrNSchcLwSoHMMXBm2IdbIanCX0 +JX+dRg2YX6yX+6ZmL8UaWRVICQ84ZxGtYHZ8o8hMCFOuxFklNjYFEPciO9M9m+rv +fUEihQgcBF7+x9KVntlxad61Aa9AzUJLULgY3snaZK687tHUq3yYwXpF9s1CuJ81 +SfZxH32dKqy+2cpJqwQ38BZrTUwjBxxIMR5TRC7h/O9aRIBKQZKlpLcmxWPv18i7 +DwWlrJVb2Sd2WUh+TwPNa7VQc3NjlGtu74SfZqmirE0FyuB86fnsQaF8zhJnRsqE +lagnLoW24PCvc8A9TK95tj+0JO8DIeM49Gg+Br/NBtRB8q5q/ICJOREber6Ke+/I +p90q5VkZafIgeuO+EkyQ6Dq+58NRqC2qEs209xnKOd6exxT+2tEzx6Hy0PKwaay3 +h8WzUamJOTqRv1WG4GmlCeRUQGx8BtdIAEMdww26cN8rmxh5Foh5CH+V75bcybkv +yH+FBDoKFYSpEPg0axHM/e13/nujgLNnSTHuMf7ILvpwoNkkIcQwSpH17B5hZdgl +y0xD7aIS5XU9OoP9mKs1unzUKerWQWY6CxgYOqpssyDTUG+fohuIXQQQEQIAHRYh +BNw4R0hwnSYZ/yhnIW0Mr/3bHP6QBQJb8AgEAAoJEG0Mr/3bHP6QFPAAn3DbFqHo +hjznqQvg15QjlGFaPJaaAJ4ps0+VWG9BN7UBQPG+fcCRwqLaVLQ0SXNtYWVsIEJv +dXlhIChEb24ndCBjb250YWN0IG1lIHRoZXJlKSA8Ym91eWFAa3RoLnNlPokCTgQT +AQgAOBYhBPgoBv2hv1uaGzAU58n87Wymt5RUBQJb8ATfAhsDBQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAAAoJEMn87Wymt5RU2vAP/12b6S0yJdZ1rgNLj+ZohY36PhCm +30/amkGPQp7HCBylYIRv+y5m4IdiqynzJoap547cFMWNsCyfyU2VKbcy1Uy44FCI +PCUcBME95jD1JWviINDKqLhglciKlJnWUhupiolqFcr2ro+rJVc/fBMWJoBjM5fJ +9eq1ge2LxuYKbu9cpSEtopk7ZBeo69khhrFACdZEqfJtW4qp0hEC0pAKLjN8LhpQ +EEVcq4zejksB+1e1qkuJ6be3/Q2Sj+1ijaJBElJIVJ8qyYs9XSlTlUA1USfy3Yqu +jOkFrIaycxYgKooFgwYfYXCniuqXWZ2geCm2IE90lanQC2w7ZDN/JGwwVuAFVi4H +Mrx6x/yEreqy2AUMesB1eGxqQQG9cgssMLoMAN2IDDJ6FS+e0imWTTMZ6r3ou9W8 ++pFzSIT8LMnBNwp+RxrW3QzBs8sXDw5mS6WroiZMRlfJdA1sUPsrW0GV4/AFuEaK +PhCUvIvoh6zxYR0lA/gYqtszCHGzHeNLoczOhytUZM+KQpOtO3TSING/+o59HHuM +niD6k3mWcyk6MkSgIXquJRGUVGVFeLGlXXf7aWEkIOrXeqjBZpBchZUIxZfkg100 +xxmEgNVGG4vxB/UIGeVqV2S4JscJmCyDGs130nRp7Qp5YGfkaTLKyOdutssrqatP +m5Zcjl2VGr4Xt4uXiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AI +BAAKCRBtDK/92xz+kEViAJ9zBTPNNTYIxPxt8BEvb3pUDeZkiQCffsDGKi7kdlTj +oZ26K7yxdjexaYS0OUlzbWFlbCBCb3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVy +ZSkgPGJvdXlhQG1lY2gua3RoLnNlPokCTgQTAQgAOBYhBPgoBv2hv1uaGzAU58n8 +7Wymt5RUBQJb8ATwAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEMn87Wym +t5RUIzgP/0/7+y7UOgj4Yja6Lwa+Lm7ESRZnbVmR1ERSAa9RKKr8BbPT4KhgwN2R +x8c3CedFupS02sG1G57u+4qQbEeZylaMu6rusf/XyQ+esh06cRXfR7Vb2d14yFQg +xun9PgPR7jL0RiU2fsgvF6O+u9KwnGRmABZXILDBxzGZBXKBIkmqBM8+rBkXFVWc +gezZqD106KcuGewciuWM7bfyLj+2yV9GhvX8iRyptgkx9/CNEdOqQzKYEbXVTSkh +tUW4QUmNnIiTnD/pZ4kr3UsQV6y0GC1kf9G5EeQHbD+kVROFM0/sX6qGn99IeC+j +96MflMnKuXJeXjlxNFZIYPoolBAC7CvpRfdky5q0KB2xWh+x2jQbn3fPpa6lVZdQ +De14guXdcEsj1QVUMRL3wFCDwHIsi3gqOpCHdy5GmunFRNqUWmoGU+uHt3Kk031w +DJdQY4YP+8tFWLPG3vKoPSf5EcG2Mf0hZiWiiIAX8sVw13W+oDlAQ0HKah/uxV77 +gM2ScBiiiOr92JIf3ftq2AjMuzrGhpKME/wG2DdcOqmq7U+tcVbambSc7SVa5nTM +JXm8ZPOSH0Fax1PULPd3pyLLhfF0rnPiDLcVa6UzG1MaSJiGBurIf3D3OCHRjQQ6 +kVpF9VtXhWeziV8wkyt66HNcuqUs6HDBNkpxPTNacKcZmW8J/FlaiF0EEBECAB0W +IQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/92xz+kKOiAJ4shO9b +nZ2Nx9XzBBg4C0nUl05LyQCbBpk7t2NIPMKaNtjsPb+RV5HbiQa0O0lzbWFlbCBC +b3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVyZSkgPGlzbWFlbC5ib3V5YUBlbnMu +ZnI+iQJOBBMBCAA4FiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvwBZYCGwMFCwkI +BwIGFQoJCAsCBBYCAwECHgECF4AACgkQyfztbKa3lFRK1w//cqsweiuXGPepyn0t +AL/S/scM6r9IwcjD3HrZqmUNSDAqU6PJ0FFialOPuSQIyEvrpY1GL+TiVtnYyAit +sbotxNxNQFwiBvqchg6xd1ftpjJihuo7RysNdSNAnlOxFlEz9X+EGkRqq8rCTpoS +GA9+4uFyFKzfv9CDg7YUVX5GVsE3bsPWymfCW1boW0TQyL7xNrDPfzKpVRHFu7hi +5OghiTbHbifmIolj5Mo0hGuXxz26gFzrufCjgxK9ycW7LnHEnnK0zX8Qfueir8RV +EisuAXtKILgS5mmOj0ywsrva4Qtf5JW5SKymhgsKCWskfz0lq6S6ceIKaYBr4Syk +0MLI82M0zDfGlLuRP6yQ3DTiTC4lWfXHdjyd0w4SwcuAQPCWz34gtUEGfMTyrd6O +le6pYreL1NPzd/NakYsR1H1fsXVJkgpESktoDIkzooLmBV6Pjr+PEt4DvPZYqgKl +AyD+aZeZ5HlTZCLbN9O38nDttWdAvsGjq82qvNI8A/d2Vvz4L1ND6NT71+wtC2QT +a95epSBD64l/JtK99SW/HjLjyvV9O+Nu2p8ESTOEaQhyIudnWYU+er+Vwy7YtLvY +y8L9/Xu9KvlBMjHBXAAV047KwkIQNrNyoTla5yQFSpv57hFYbx5CKTprpsl9Ic4v +uPjC/GMgkAJ3yTwIgxa47hgUAtKIXQQQEQIAHRYhBNw4R0hwnSYZ/yhnIW0Mr/3b +HP6QBQJb8AgEAAoJEG0Mr/3bHP6QyCcAnRuTQIMOpwxbyzjj+t0C9GdNJYmGAJ9v +5c5kvNCFiJAFCbUD4OxJBNA28rQ9SXNtYWVsIEJvdXlhIChEb24ndCBjb250YWN0 +IG1lIHRoZXJlKSA8Ym91eWFAbWF0aC5qdXNzaWV1LmZyPokCTgQTAQgAOBYhBPgo +Bv2hv1uaGzAU58n87Wymt5RUBQJb8AW0AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4B +AheAAAoJEMn87Wymt5RUaT8P/2OvKAfgqu0zQX0JhKu/wd9AATVmLa8C48JPQMUn +5Z9dQyDcFyKKfKbGCz9B5jTOrzHNX0VJfpDujOTiPIk6ci0KqAJ3Fz0gdpxIcEoW +B2zg0nwDtGHsGMX8togpcbVgKqblp0XSsMAFV2FN5PsAnxkqdXPDmZ5iZSgs9roi +9nxHPavbcr1cSAjsiRoFxFudzo7Q0Z/KLRlTuTSAX6B+vRAeyRB4NcXThKYZlAi6 +cr+xXTvPFddiQZgVBT+ICZRQY0gwgHpQcj70fNx1w6tTHfThlxInojKGlreOZov9 +A4TVeex/QagVTsjRAQuZ9yLMkx7JxakAxBPZ/OHuv7/K1Qdx90AJ8zQZ6uOXpUNl +c2MDEBoTI/nbsgMeHI/Mj4ndxCBUMperZ1oCITl+AhaqEZ+LxTKyne41YJedlqjc +5xnUVigz4ajmZPYmbO6eRDxisx4fMG7hI2HnNWak2xBDVOp1z2aqZY0xsG7o697d +I9BeR9JxbIusx0Szq6GabwI5beEI1xLlT333Fe3XDtT0NIQQvW9byuYuyfp7H6Xm +hFj2ut7jVI9xG932sJ8ioRJGCK1UcGYEL0ei4YZRv+mVysEJFjki2nlxspnG4C/V +Q20jXnLAXOpKLiStkNJ15WsnzeoL4eq0AUOYMMmYKAquXXgpVs+xUDv6XathWA2v +oZkAiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/9 +2xz+kEBpAJ4x7hASmdnDcyFGTyuRHj6NwsDtNwCfRVfqoiRcGmvDRA8U25cPk5XT +ZYTRzlXOUwEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQEASABIAAD/2wBD +AAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcp +LDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy +MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACMAG4D +AREAAhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAABgcEBQACAwEI/8QAQhAAAQIE +BAIGBgYIBwEAAAAAAQIDAAQFEQYSITFBURMUImFxsQcjMoGRwUJDUmJjchUlNTaC +odHwFiYzc4OS4bL/xAAZAQADAQEBAAAAAAAAAAAAAAAAAQIDBAX/xAAgEQEBAAID +AQEBAQEBAAAAAAAAAQIRAyExQRJREyIy/9oADAMBAAIRAxEAPwB2JHaECEjiPGA4 +6GA3kMMgDy8AZAGQAp8XD/Nc5+VP/wAiJT9GeBv3e/5VQ4cEu8M3sAZAGQBFT7Qh +JSOUBt4DZYww8O0AeQB5cc4AgzNXk5dfRh1Dj1r9Ghab/wAzpE3KQFdiSotTGIph +4trQFpAFyDwtwjO8mqqYbHeByDQNCD61R0jTGyzcTrQmigyAMsYAyxgCtTNt5hqI +SUnrKOYgN06yjnCVtnWUc4BtyenmWGVuurSlttJUpR2AGpMGyKbEHpZm3ulapLSW +GTcIdWm6yOZ1sIj92q0Cf8UVp2Y6b9IOIVtZkkD366xOzkjujFc83mROKZcCjc9M +kE/1hbV+Yq1VhC3TkUEKvcWNxE6UY3o4xKpueVIuKGRaSoWO5GsXhdXSM59Nhucb +cbStJFlAEeEa7Q26yj7UPdJ71pv7Qhboedab+0Iexsu2p2ZuD0sJltZom5gkEuaQ +jldxMPkZuk0gW2E05cetgIvfSJihZY/RcvODKpXr0NntKA4HkCeHdEWrkLBc67fK +EoF+Khc/CEuMYZn5tYyMFwX0KQRbwtCtkXMbUk4eqBKgpC9eYN4n9xf+Vczh+fYv +maUoDUHlD/cF47EmlTz0hPtFalsrQsdoGxtx1hs7DpolaTO5JZl7sdHmZPNKbAjx +Fx7jFY34ys+rcl4/XGL0jbVQmODpgsG2JD/F1UVIVqmRKgcT8YbNcy8qOrqO/ZiL +6uRLTKAU8WGloF/A3WpgUqjTc8gjOy0Si+2bYQr1C9pAzM469NOuKdUpxxRN766x +LUXYWw6mYbEw+m9zpeMc8/kdPHh/THp9LaYQAlCR4CMvXRNLASSCbqSOUGha0ekW +ym2QW8INBRVbCkjUJJ1BbCHCLpcA1SeBiscrEZ4ygLD1XmaFXUNzCypcutSSgnTX +Q2jbf2OTLH5TvkHGpuVbfTey0hWpvvHRjdxzWdrJiXSraHRi1cZQlVjDhUFGqNgX +zDaCxAtpjgepRcHFMQvHxaNIzUoG30YF/Cl9JM0sYVW2nNZb6EqI5an5ROXgw9LX +DEiieniVpBCNLGMuTLUdPHNmzTpdEu2lKUgJHARzW9uqToQy1iBDhpRtaKJ4bFO0 +A+oTygLxKiXxS2WMSqWNFGyzaN8L/wAuXlnY9whWn2qX0SyS2k3bJ5co14/45uXX +pjYYnOvpcUdcpt/KNazxaVWotys8W1HWwMBX0s0yM8sWyDbTtCK2z0ZNBys0INPO +thwIsRmEQ0x8XLEzLimhBfazBNvaEJfwtMeU0PYXnCVIOSzicqrm4MK+Fj6XeBmg +3LuuH2s9o5+V2cRgsz7DashKlHiEi8YadMqwYr9NS4lourSs8FIMVoerxDzTiLg7 +xW4WkWZqkhK9mYm2m1HYKO8IIipyXmFXYeQsDkYiztW+iwxmwheJAyDYrQlV78yY +34/HNy+jOkUZCqQyEzLbRCbZSNY6OOfXHyW0Y4TXK0lp1ExNt3Uq4+EXU49K3Eja +ahVS/LTSMmQJhwspuhRc20nUz7dvGIDZmYbWq6ZtKtDteAK1AeW0XElwoG6glRA9 +8JfTkp7MhSOnGoI3MTlLpWNm44YdkhKiYlr3UHLE8zaObO7jswx1dLadROyqkplz +kSsi6xwiJZb231Z4i081l0zJnnAgIUOg49IL8deWusVlMNdFj/pvsZ0guO0txbg9 +Yi4FuNoz1dKvoPrM1WOtN9Tlm3hm7YNiUjgf75ReEx13U5/rf/MWtPdmzNOMvNhS +Uq7DgTa45wrZL0NWzsP4ukutYokg3bpFNpzC17gE8PCNuPxy8vq1ammGWg31lQt9 +wxvjLI5rd1IYdMySJdb7pG/RsqV8orsumrs0GHC286+2sbpUyoHygLcQQhpSkHKk +gnlFMqaOHZdkUI2Zb9k/RETV4+L2ntNijpSEJtk2AhxfwAzbTIdc9UjQn6IgjOg8 +ASlaW1fTQ352J1jhynseljd2X+ixltuYbGZIULcYjTqk6Y9KtMsKUEITpuBBelad +6SvNT1FI02EOeM/XPqMu+c/RpUR3awo0+OqZZtkWQkCFpNnSfhuiSk3PzFYdZSp6 +XXkaWe5JGngSfjHXwzp53PQfOPFM1Mg7dKoD4x0uQZejxZWzM34OfKFVYIGMr/pw +AH6seZhxOXoClnCpSQf71gSbmHf2D/CYmrx8XdO/Y6b75YIv4AZ0WcdP3j5xTOl7 +UOtMYkPS3U0U5m1HdQO49x090cvLjJt18Wdup/BfSpglsDhHNvT0ML0ytTWVlCm5 +hKXG1ZshTmze6FO7s8spEalVqeZQ+2uUzIOqFIQRvwsdovxHqdKz6lqz5wHL9pGX +KbRF3LtpLPE1+ZyIzngLxU7RnlqC7CssZfDDeY3W6OkV4nWO3jx1HmZ5fqlhU05a +g+k8XFecbRz0aejtIS3M2+2PKFkrBExgi9bB/DHmYIWfpdygs4k+ECThw5rQP4TC +q8fF1TtaQm/2YS/gAqH+o9+Y+cUyoWxNklaVIzJSi/WVoJ2Psgxjyzrpvw3vtrSZ +4XzZzkWNDyMcWUehhk7Lpk7Jzhf6wtTLlipIAKx/FBLNaaY49rlpMsWdVzpNtgtO +/wAItprP+xBNPmUTInFzDnQJUAlpdlFPffv5RGV+M8vfXs9N5gWxYlZypHO8XxY7 +sjDlz1jaaVDFsPsDk2PKO5wTwqKwgmpPH8Q+cWxo09HySG5m/wBseULJeCNjAE1Z +On0PmYIMi8ZFn0i0NmbeGz+oB+U+cTWmPi6p6gqlAjbLCXPC2xDPJpsnOTa05g1m +OUfSN9BDt0zk3dF+1XprF9BmGX5Zlhlp3MwpBJUVW1uT7o5+XPVjq4uP1UyFWXIu +dXfAQ6g+0rYjmIzuP67jWZfnqmXR6tIz8olsrvbTX+sYXCyujDOWLhFNkmLv5la8 +OkNoeulb0HazX2ULLSVZGxcbjwiphazyzkQKMtycfdnHgRlA6FJ5Hj746+HCTtwc +/JbdHNQ1ZqAyfwx5RpU4+FnUtZ5/T6xXnF7ZaGGBT6t8Wt2h5Qsl4oWK1XrOX8MH ++ZggsLmUN3UlXdDZG5hz9hC3IxFaY+Leln9Tp/LAv4RnpEqahUxIJPqkErcAO5US +Nfd5wqWE+oWFZNtmTYlEG6bE35m+scXLv9Xbv4pNPK9hhbt1JbVobpUOELDPR54b +DDTlTo7pBbK0g7jjGu8cmWssVpMY3qEzLpl0srFhYgA3I+EKYRV5MrHeh0KerlVQ +/UG1NSvtKSrQqHL3w8spjOk443K9iOj1aVqU3PBgpSQuyUfdT2QR3aCOnj6mnLyz +vZyUD93mf9sRVGPhbz6gZ18X+tV5xWmWxfgdeZDwtqFfKFkvFVYxWUV5JHFr5wQZ +eoLHo+m21AmbR/1/9hbT+aNqVTHKdTjLqWFGxFwIVVjNRS1fGdOwpTTJqUJufCbB +hs6A/ePDw3hKkIGqzj9QemZ15RW46orUfE/KBUTqDVxITjZevkvfSMuTj/U6bcef +5vZryjrM3LocQpK0LFwRqDHJZ/XXL9jSYpjDuvRI8csJSKaWhBu20gHnYQi1GPI6 +tJulBAWoGyu+KhXwmqa9N0esKbKih9lw5rbf2fIx3Y3fccOWPyvqHB861UsKyr7S +hZaMqkj6KhoR/fdFbZya6QH8DtPPrdM04CtRVaw4xX6R+FrQ6EmilwJeU4Fm/agt +2cx0gV3DT1WqImEzCUAIy2y34wbFxBLWO6iUlSsgA3JhaR+rVZW/SJVJ1gyss6WE +EWWtGi1DlfgPCE0k/oEecU4sklVz3wKQ7WcUyq2VYJT8x84DaS4DjRaX7aNP/YAJ +sK4lVRpoSk8SZN09le/Rq5+HMRjycf67nrbj5Pz1fDWllNzDCXEKStChdKkm4UOY +jm18rp3/AB4tnXQQtK2qag2S6G+65gKlJWQhzFs84kdkry+8C0dfF/5cvJ6JMO4w +qeHWnGpZ31CiFKbUnMkm1r24HbaNWFgrlPSS/NKQkvNt3PaJJ0hzSLL8HWHKoupv +qzPBxNgRlMOyQsbbe0bEdZnqbUQ1LrbyFN+2qx3hyDLLVJWamweyDoNkxC5jpXrW +V7QG4lRO1r84DR5hpbqUqSrK4ghST3/0gPTmhwOuIeQLH2VjlASUUh1JSRfXUQGn +UrGUzhR9ptbinZZau00o3FufcfD+cRlhMl48lxNuk12RrcqJiTdC08Qd0+Mc2WNl +1XVjlMpuK/EU+mlyz02QCVdlNzbW0TMbbpWVkm6S70+/1t0hpokqvmNySd47ccZJ +pw223bnKTU4mdbadc6Rp0ELSRsddRDSnq6RhwkXAuFAwGJsLYvn8NzqX2CHWFH1j +K9ljuPA98BWbG9dqTGJ52Vnqcq7a2LqSrQoObVJ74ueMMuqVSlG+u8Q6HNSiIA8J +SdYA8NucAQVlUrNlxKFKbXbOEi5B52hBKXMC3qknMRuRDCKqX6W/SDPffNxgDrTl +zNImumkHXGuYQsix7v6QrJfTls8XFYxBO10s9YASptOWw0BPFXjE44TGqz5LlNVT +mXGc+MWh6ZZKilRSCU8YA7FG45jSAMaJSgDkbQBd0SsPUxbuUZkKHsnnzh70jLHa +qHHxiVtV6JvDDjt8YA3ygI4wBrlGf3QBsEjLtAbLDlAG6QIQcrdpR5GGTpYWvAGx +FlECAPLa35QBooBPSW4C8ASZXVRvyhlX/9mJAk4EEwEIADgWIQT4KAb9ob9bmhsw +FOfJ/O1spreUVAUCW/AHrgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ +/O1spreUVJ4nD/9tGS8cg2eUSwd0ExCl0dWsJRdM0mUYh17mXyVNLcvbglIkSdma +v/Ty3ke533izRN/SkkU8vNthjKAohZmmXlaXrruEyHq2vfXcDg4+C7FJQ+O3PT2B +S5ft3Ht2GmRpD2lWpeUlJ9BXF2EF5pSnHPOrlTHRUfjBCDU4uuSeKgioSyoc2iWb +BBaSXyeQAUR+ppM1AYKUlCDxpLbe3nVCOUc+JgJzv+47EqwMyVODwzk7oFO4GMRm +KTKlctb1ym75oV1tiZi2fL/KA2uAab/RMO0rfxa9HVWnJGvUEDMPlTfs7222zuLB +55Fzllfx5rQlou+MLBQIV978HRZrDxZesQOOJ4/BwTPgQ42GREf+uf5/SG4Fn3Qh +NZsvoaePMLN/QQEjM7eqOUzRJRVcdJfRH+LinIFrAqcmbbcp1bvq8LV5lbmlFJLF +gimvW/shf/6Zu1YsfBhvLWInUCyoOPFa1tASF6qqi1hEOd8tQgNE/H/FSIehmTHT +74kYPNRm+DzlvrW2JPVl24Nf/SWbOG/IzGBY/pDActTwYqnpXKR7eUt/YcPpmrPi +kyIKX32U2vTBCE3yvCm0KRzrcSbTJGfVgmlxxqIuOtbeaBtf96m+o5z/xw9ro7Ek +VZbsx6fPuWuLY/MqeLXl1EuiU6X1sr+skDY8lJeeiRt+Uq5mCZuEgWdM1IhdBBAR +AgAdFiEE3DhHSHCdJhn/KGchbQyv/dsc/pAFAlvwCAQACgkQbQyv/dsc/pABQACf +YaUOqzlafrzeGdwHwDleootu0UcAn2adbaKJ79QBtDVPkR77zV801JlXuQINBFvw +A+gBEACt8AiUTMcyNXwN6kiOLPd+85IPlLwEVyofz8p2QBAxJsqKozlXXpnK7ahC +RSiHt02EK39WiyZpeY1/2dGmdvyI1vc7ld3814Dveh4nf1GRSpDZ427cxayaclh+ +wRQ8nDWFOQUsMB3He/Z+aO6l/ZNvdVdzRUHda1XvN41nwXUL9FQUn/TLYgHbxa7P +Yy18ZnNzH/xGSwDgRrqPEAZ8KOpbHEbNyYuYuv6IM8Xmbp8Q6bl2RyBNnrlphksJ +kLvO6RLHUvvw5uX5bt+u3umoZ+yHUkP13NtQHTyZ8VTCQimkB6OisisOTnV8OjLG +xtLEF/TjeGFAAoEnc8bQAPvrtONQL19rPkMB0gXYXPBbGw7eWYr3QpuOujUXcz9U +0JSSEov7cUepdTY8LEYFw8U5WimKY6f/uJUVx/ukNPtuAljJji0cjIGEOX2XGlBV +Ix/U3vywLBfUFW5hT+75z7UB3yG3Zexo0WSaQxxZ5PHxyPYBK1PvVkH0LvkbxJcr +rouJJQ66chjRglUbv4lf85/cG1ZLu3Ds0UbuD0gE9sAEwXtfdgDmp/HB7mxwJr1O +BRbTRv0Okx/lovWXkxt+hX+DXZ1u1qdZUW3zjmge8W7xag3epD21jIjFDODgUfDT +fgJi2FQq+szpagfPN5j5aIQKHCZf0DLbBD+ZWYQdld5JZs2V5QARAQABiQI2BBgB +CAAgFiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvwA+gCGwwACgkQyfztbKa3lFTa +yxAAxQo/9dvOO74J+9XznCYb5iO1B1ksnVegSGVuId45JKXkCkuWvDOkcU8+ma38 +wo3MBoPLpSMCXc/mKQ0p0ntO1tD/Wf4nBBCvseWcsR6RR5Su5jYorm0qZ89IOEPN +K2W2Z41X6DHyteB1dAyIyexOYoLKD7iWcQzga4/EoUPEwcr8BWWgGLBfRhXsYySz +F3fQPS7KaemDLGbJfTDZCSqmsZPnlksSvGxEBwUwfCjfY+QHxzWPRFPkuQJJR6YW +tiZ3z7jBRdRk/R5v2CJZJuGHcPPYQy6j2TYGONojm+ifaq1hz+A0aoy4P9qRW5Nl +mm6yiqEoJe07DrMLxn3H3ucuOo7DiNWmkkjW8DfhFSd+3pFMSvKGujOJWN27UDEp +ERWFX50gE15Sq4aPbMPNRejFQ1n75B4jfFQXg6WuwF3kwgHK3Y5T5vTEkbPgce9c +SyyFWU7EA4DJGnt7/FoaPDTKOWI9WSkmjOSABTBNSaUiMSFA3Wg/T0aS5pETpkv2 +S/GVVX022orAGK8zEY1vr2a24itOAKpQwFRuMjqDCBVgKAsMtlPu8jv3Zm/AMcYM +sRRnDWJh2TO8bqXXUG/o783fcTE3d1Ff7s4BfmBqpGHigZeehNvu+FshRDYaDrDN +IS0fTqbsX/JjaCXwU/o2E6G4aE79Ut/IMsCYzItTDh2UmcS5Ag0EW/G8wgEQALBi +2/A7Ev/92mYi4Gm//IJEKjm2Vc3NcX5LdSyPwdSLlHSRwvzZz7M0VeflcTYqssto +VPVf4maDtLGbQJn43CLqjvIW/C6jzjfvoZf0gbHpNfKY1ENs5xgE0wd3ZdsqpQC6 +W9Pu+kN31QS9+RUKwiG2bNBIREChL/omqiLhNu3hDbZnB+uSByOk901XVrNmKa8G +NzXSfJSCt0gP7XU6VpMqjxppA8Y2Vo7jnylbrgVJriTt6jtjDylBBQqmHSOXMT+q +9kIWDSocKhSFHBMO6LYnAwbMef2kqio5zaKzZAuwis0zjOqKHwW54xL2T7djFav9 +VlgcAYN105iMLUiIl39HLeZnS5pUESOXRUv/qLwiQRvBlWBPIep3+ycM2eK8r5a1 +5EwCgN2nSl3KYjzTOisCmK1nQs+gQ1RMraeBGYEG0uIUvDxfoONTuYkM3dhWq2Xx +V/OO6yUkfyOlBGUREe1PXAOsP0LtAFJha7kbh7Eg6GGU7gRYh2dG2Ln6Vmx1ldbS +F3woFYPGNMsQmgEKxwyjKaq0Qhd/sKHrTpPz8PXfGP4dHegExKegS7Yof1VrKBB+ +L8Q8o1Oi8JPCjRp47iga5OYS1Vn3h5a07ajzSAxPsmF0lmF4tYk2MFxSs403ShiE +BTjN4t6rjmnoQV/b+CuhpmvzxaYr736/jkY7s0I5ABEBAAGJBGwEGAEIACAWIQT4 +KAb9ob9bmhswFOfJ/O1spreUVAUCW/G8wgIbAgJACRDJ/O1spreUVMF0IAQZAQgA +HRYhBB2wOl45wX3kd77c+/0dTvV/qVkCBQJb8bzCAAoJEP0dTvV/qVkC3tUP/2rR +VDaSPj9+UYJtHGDfQmYCEqxROm5wGCJbNrUQspLeL8+XrsaUDh1ldNAQtoDqGjRp +kwjJAS0OZfvCv7pI052NK/KVGaK5Tj2+0lxTAcGbAKoH8E2HWPlERpU9CRLvzvDE +4GGxw2nw7aobNGbf9d98c9RpZuAul92BOClnpGEU4VzjKUk9IsSjZQVJnggQujxL +qWWiwfGwVsj2PdgPao/P48cYNl5CACBgY19AAh7WzgJVz/6je/5NLdAAV+E31qSE +EaZsvTBqrMOtH6iTn1GpJ73FsJ0BYVt9X99bRT0Vi0iWulBuhYfZG4PdCY6fv6uC +d+6pAC+Y/M9npaLbBHscSlJheTyvfuB7bzYBY+Q87VHSOMuNni7U08FuiILFoF+e +/ESU/v0Hde44ghiXKSaFO8djxc874KM9UlGWvw9UbmI8Z2uM0kDcrPZ/8tcjXOhp +PEBib54ab4tKCUCtOmsF9ZiT0hOqYdP9bXW+6OGfCignJ7ABhPpANfx2Sn/28L9l +PbF1nA5CkHdyo/ku1Z/lNq44yvrB8r0Ljq6s3KS69dUZqqrADeogOdi0/TrghtKU +DERWGmQagYSzMIvsXoAI56MxXFLriSObmpFLTWq7cr/+Ju3AcaSkrpDSYi3U6vLL +8NuXPhul1S/+yPwvX6Mk1Zkip9/Wg4SQeiT2R7xj8zMP/RJ8uKbnKpOftY89Kv0Y +FZ4hE3FeBR3UJvkuPdQYNLQRluzh63Bzc4ClSxB9Ma7fmAEiuFtgEi4HLTMBDOHO +uVMuWYcgubu9VBlAGLJ++gnKxCAJXEntuB49il8MjMsy+uv/cFCjPG9z/1pmWYrE +XBNA+vcaOrNTS2IykAbqybcPYbBcN47bm+A4i5yqiahk0q++j4LOW/nf88xXO7xI +V/4vQgemh7RHgHJOkKfzOPw/Kx3UjV1jA9gEUrusHE4R3Upxh0ZeQW19hUnVlao1 +TxxKEUryrRzckuRfc5ziMWNyJaZsPMkeBEhyY/CizDFPrsSXIAijfu8KFnxCsnaM +ylFBWOu5FwsKMDXxu0QdwqpL2CM8p+q12z1VruNjpIc8bAc0/YMndjYnxzsqQEMV +GQIDKWqh/m6v7sqbn65ZQcVAzSAriGcQxCOIoT/TA/J+/4BSk5c8TKlqT8NBT77B +Z70vMr41mZus1A/ciI8AxgbYwlhuvTehdm74k/c7NSzTxeG3OumTlBR1I18C4AIi +y4iM3O4H4jvEssWBUzpm3VJG0NvcN/M4YVZHX5yxWQuIFcghzb7sLYddmRvR9B0M +Xowot//r/sgn43xv54sIvwe9MkCCU6j7ePYUlOUnn+vQ5i7rFN/UPub3V3toI2gg +DRuKdymWEii1jA9KlmheLTFr +=r9L+ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/flakes/rsync_backup/flake.nix b/flakes/rsync_backup/flake.nix index 6d359e5..d81d176 100644 --- a/flakes/rsync_backup/flake.nix +++ b/flakes/rsync_backup/flake.nix @@ -183,7 +183,7 @@ if [ "$skip" != "$DEST" ]; then ''; backup_profile_tail = name: profile: '' - ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -i ${ssh_key} -p $PORT $DEST sh -c "date > .cache/last_backup" + ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -i ${ssh_key} -p $PORT $DEST sh -c "date > .cache/last_backup" || true fi # [ "$skip" != "$DEST" ] ##### End ${name} ##### ''; @@ -228,7 +228,7 @@ ]; programs.ssh.knownHosts = lib.attrsets.mapAttrs' (name: profile: lib.attrsets.nameValuePair name { - hostNames = [ profile.host ]; + extraHostNames = [ profile.host ]; publicKey = "${profile.host_key_type} ${profile.host_key}"; }) cfg.profiles; diff --git a/flakes/secrets/flake.nix b/flakes/secrets/flake.nix index ef74a30..7bf04a4 100644 --- a/flakes/secrets/flake.nix +++ b/flakes/secrets/flake.nix @@ -3,6 +3,8 @@ outputs = { self }: { nixosModule = { config, lib, pkgs, ... }: { + # Necessary for situations where flake gets included multiple times + key = builtins.hashString "sha256" (builtins.path { path = self.sourceInfo.outPath; name = "source"; }); options.secrets = with lib; { keys = mkOption { type = types.attrsOf (types.submodule { @@ -36,11 +38,38 @@ type = types.str; description = "Content of the entry"; }; + keyDependencies = mkOption { + default = []; + type = types.listOf (types.either types.path types.package); + description = '' + (public) system dependencies that needs to be + uploaded with the key. + + keyDependencies + ignoredKeyDependencies should + contain the exhaustive list of the text context. + + A warning will be thrown if there are remaning + dependencies from the text. + ''; + }; + ignoredKeyDependencies = mkOption { + default = []; + type = types.listOf (types.either types.path types.package); + description = '' + dependencies that must not be sent along with the key. + + keyDependencies + ignoredKeyDependencies should + contain the exhaustive list of the text context. + + A warning will be thrown if there are remaning + dependencies from the text. + ''; + }; }; }); default = {}; description = "Keys attrs to upload to the server"; - apply = lib.mapAttrsToList (dest: v: v // { inherit dest; }); + apply = builtins.mapAttrs (dest: v: v // { inherit dest; }); }; gpgKeys = mkOption { type = types.listOf types.path; @@ -74,8 +103,8 @@ # Read-only variables fullPaths = mkOption { type = types.attrsOf types.path; - default = builtins.listToAttrs - (map (v: { name = v.dest; value = "${config.secrets.location}/${v.dest}"; }) config.secrets.keys); + default = builtins.mapAttrs + (n: v: "${config.secrets.location}/${n}") config.secrets.keys; readOnly = true; description = "set of full paths to secrets"; }; @@ -83,7 +112,7 @@ config = let location = config.secrets.location; - keys = config.secrets.keys; + keys = builtins.attrValues config.secrets.keys; empty = pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out && touch $out/done"; fpath = v: "secrets/${v.dest}${lib.optionalString v.isTemplated ".gucci.tpl"}"; dumpKey = v: @@ -125,7 +154,24 @@ exclPath = builtins.concatStringsSep " -o " (map (d: " -path $TMP/${d.dest}") dirs); in lib.optionalString (builtins.length dirs > 0) " -not \\( ${exclPath} \\) "; + + checkKeyDependencies = key: + let + allDeps = builtins.map (n: if builtins.isPath n then "${n}" else n.drvPath) (key.keyDependencies ++ key.ignoredKeyDependencies); + context = builtins.attrNames (builtins.getContext key.text); + missing = builtins.foldl' (o: n: lib.remove n o) context allDeps; + in + lib.optional (!key.isDir && builtins.length missing > 0) + '' + Key ${key.dest} has non declared dependencies in its context: ${builtins.concatStringsSep " " missing} + Add them to ignoredKeyDependencies to ignore + ''; in lib.mkIf (builtins.length keys > 0) { + warnings = lib.concatMap checkKeyDependencies keys; + # FIXME: Use lib.concatMap (k: k.keyDependencies) keys in latest nixpkgs + system.extraDependencies = lib.concatMap (k: builtins.map (dep: + if builtins.isPath dep then pkgs.writeText "extra-dep" "${dep}" else dep + ) k.keyDependencies) keys; system.activationScripts.secrets = { deps = [ "users" "wrappers" ]; text = '' @@ -133,13 +179,11 @@ TMP=$(${pkgs.coreutils}/bin/mktemp -d) TMPWORK=$(${pkgs.coreutils}/bin/mktemp -d) chmod go-rwx $TMPWORK - if [ -n "$TMP" -a -n "$TMPWORK" ]; then + if [ -n "$TMP" -a -n "$TMPWORK" -a -f ${config.secrets.secretsVars} ]; then install -m0750 -o root -g keys -d $TMP ${pkgs.ssh-to-age}/bin/ssh-to-age -private-key -i ${config.secrets.decryptKey} -o $TMPWORK/keys.txt SOPS_AGE_KEY_FILE=$TMPWORK/keys.txt ${pkgs.sops}/bin/sops -d ${secrets} | ${pkgs.gnutar}/bin/tar --strip-components 1 -C $TMP -x - if [ -f ${config.secrets.secretsVars} ]; then - SOPS_AGE_KEY_FILE=$TMPWORK/keys.txt ${pkgs.sops}/bin/sops -d ${config.secrets.secretsVars} > $TMPWORK/vars.yml - fi + SOPS_AGE_KEY_FILE=$TMPWORK/keys.txt ${pkgs.sops}/bin/sops -d ${config.secrets.secretsVars} > $TMPWORK/vars.yml if [ -f $TMPWORK/vars.yml ]; then find $TMP -name "*.gucci.tpl" -exec \ /bin/sh -c 'f="{}"; ${pkgs.gucci}/bin/gucci -f '$TMPWORK'/vars.yml "$f" > "''${f%.gucci.tpl}"; touch --reference "$f" ''${f%.gucci.tpl} ; chmod --reference="$f" ''${f%.gucci.tpl} ; chown --reference="$f" ''${f%.gucci.tpl}' \; diff --git a/flakes/surfer/default.nix b/flakes/surfer/default.nix new file mode 100644 index 0000000..7a25199 --- /dev/null +++ b/flakes/surfer/default.nix @@ -0,0 +1,12 @@ +{ callPackage, nodeEnv, src }: +# built using node2nix -l package-lock.json +# and changing "./." to "src" +(callPackage ./node-packages.nix { + inherit src; + nodeEnv = callPackage nodeEnv {}; +}).package.overrideAttrs(old: { + postInstall = '' + mkdir -p $out/bin + ln -s ../cloudron-surfer/server.js $out/lib/node_modules/.bin/surfer-server + ''; +}) diff --git a/flakes/surfer/flake.lock b/flakes/surfer/flake.lock new file mode 100644 index 0000000..66bea60 --- /dev/null +++ b/flakes/surfer/flake.lock @@ -0,0 +1,149 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "mypackages": "mypackages", + "nixpkgs": "nixpkgs_2", + "surfer": "surfer" + } + }, + "surfer": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/surfer/flake.nix b/flakes/surfer/flake.nix new file mode 100644 index 0000000..996104c --- /dev/null +++ b/flakes/surfer/flake.nix @@ -0,0 +1,36 @@ +{ + description = "Surfer is a Simple static file server"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs = { + url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742"; + flake = false; + }; + inputs.surfer = { + url = "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git"; + type = "git"; + rev = "476177380452c9c7c5b1624805feedc824c5995e"; + flake = false; + }; + inputs.mypackages.url = "path:../mypackages"; + outputs = { self, nixpkgs, surfer, flake-utils, mypackages }: flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + nodeEnv = mypackages.mylibs.nodeEnv; + inherit (pkgs) callPackage; + in rec { + packages.surfer = callPackage ./. { inherit nodeEnv; src = surfer; }; + defaultPackage = packages.surfer; + legacyPackages.surfer = packages.surfer; + checks = { + build = defaultPackage; + }; + } + ) // rec { + overlays = { + surfer = final: prev: { + surfer = self.defaultPackage."${final.system}"; + }; + }; + overlay = overlays.surfer; + }; +} diff --git a/flakes/surfer/node-packages.nix b/flakes/surfer/node-packages.nix new file mode 100644 index 0000000..a1fb5ba --- /dev/null +++ b/flakes/surfer/node-packages.nix @@ -0,0 +1,2437 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, src, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = { + "accepts-1.3.4" = { + name = "accepts"; + packageName = "accepts"; + version = "1.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz"; + sha1 = "86246758c7dd6d21a6474ff084a4740ec05eb21f"; + }; + }; + "ajv-5.5.2" = { + name = "ajv"; + packageName = "ajv"; + version = "5.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz"; + sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965"; + }; + }; + "archiver-4.0.1" = { + name = "archiver"; + packageName = "archiver"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/archiver/-/archiver-4.0.1.tgz"; + sha512 = "/YV1pU4Nhpf/rJArM23W6GTUjT0l++VbjykrCRua1TSXrn+yM8Qs7XvtwSiRse0iCe49EPNf7ktXnPsWuSb91Q=="; + }; + }; + "archiver-utils-2.1.0" = { + name = "archiver-utils"; + packageName = "archiver-utils"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz"; + sha512 = "bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw=="; + }; + }; + "array-flatten-1.1.1" = { + name = "array-flatten"; + packageName = "array-flatten"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + }; + "array-union-1.0.2" = { + name = "array-union"; + packageName = "array-union"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"; + sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; + }; + }; + "array-uniq-1.0.3" = { + name = "array-uniq"; + packageName = "array-uniq"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + }; + "arrify-1.0.1" = { + name = "arrify"; + packageName = "arrify"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz"; + sha1 = "898508da2226f380df904728456849c1501a4b0d"; + }; + }; + "asn1-0.2.3" = { + name = "asn1"; + packageName = "asn1"; + version = "0.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz"; + sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86"; + }; + }; + "assert-plus-0.1.5" = { + name = "assert-plus"; + packageName = "assert-plus"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"; + sha1 = "ee74009413002d84cec7219c6ac811812e723160"; + }; + }; + "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"; + }; + }; + "async-1.5.2" = { + name = "async"; + packageName = "async"; + version = "1.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/async/-/async-1.5.2.tgz"; + sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a"; + }; + }; + "async-2.6.3" = { + name = "async"; + packageName = "async"; + version = "2.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/async/-/async-2.6.3.tgz"; + sha512 = "zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="; + }; + }; + "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.6.0" = { + name = "aws4"; + packageName = "aws4"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz"; + sha1 = "83ef5ca860b2b32e4a0deedee8c771b9db57471e"; + }; + }; + "backoff-2.5.0" = { + name = "backoff"; + packageName = "backoff"; + version = "2.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz"; + sha1 = "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"; + }; + }; + "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"; + }; + }; + "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=="; + }; + }; + "basic-auth-2.0.1" = { + name = "basic-auth"; + packageName = "basic-auth"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"; + sha512 = "NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="; + }; + }; + "batch-0.6.1" = { + name = "batch"; + packageName = "batch"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz"; + sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; + }; + }; + "bcrypt-pbkdf-1.0.1" = { + name = "bcrypt-pbkdf"; + packageName = "bcrypt-pbkdf"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz"; + sha1 = "63bc5dcb61331b92bc05fd528953c33462a06f8d"; + }; + }; + "bcryptjs-2.4.3" = { + name = "bcryptjs"; + packageName = "bcryptjs"; + version = "2.4.3"; + src = fetchurl { + url = "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz"; + sha1 = "9ab5627b93e60621ff7cdac5da9733027df1d0cb"; + }; + }; + "bl-4.0.2" = { + name = "bl"; + packageName = "bl"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz"; + sha512 = "j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ=="; + }; + }; + "body-parser-1.18.2" = { + name = "body-parser"; + packageName = "body-parser"; + version = "1.18.2"; + src = fetchurl { + url = "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz"; + sha1 = "87678a19d84b47d859b83199bd59bce222b10454"; + }; + }; + "boom-4.3.1" = { + name = "boom"; + packageName = "boom"; + version = "4.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz"; + sha1 = "4f8a3005cb4a7e3889f749030fd25b96e01d2e31"; + }; + }; + "boom-5.2.0" = { + name = "boom"; + packageName = "boom"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz"; + sha512 = "Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw=="; + }; + }; + "brace-expansion-1.1.8" = { + name = "brace-expansion"; + packageName = "brace-expansion"; + version = "1.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"; + sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292"; + }; + }; + "buffer-5.6.0" = { + name = "buffer"; + packageName = "buffer"; + version = "5.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz"; + sha512 = "/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw=="; + }; + }; + "buffer-crc32-0.2.13" = { + name = "buffer-crc32"; + packageName = "buffer-crc32"; + version = "0.2.13"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz"; + sha1 = "0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"; + }; + }; + "bunyan-1.8.12" = { + name = "bunyan"; + packageName = "bunyan"; + version = "1.8.12"; + src = fetchurl { + url = "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz"; + sha1 = "f150f0f6748abdd72aeae84f04403be2ef113797"; + }; + }; + "bytes-3.0.0" = { + name = "bytes"; + packageName = "bytes"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + }; + "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"; + }; + }; + "co-4.6.0" = { + name = "co"; + packageName = "co"; + version = "4.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz"; + sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; + }; + }; + "colors-1.1.2" = { + name = "colors"; + packageName = "colors"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz"; + sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; + }; + }; + "combined-stream-1.0.5" = { + name = "combined-stream"; + packageName = "combined-stream"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz"; + sha1 = "938370a57b4a51dea2c77c15d5c5fdf895164009"; + }; + }; + "combined-stream-1.0.6" = { + name = "combined-stream"; + packageName = "combined-stream"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz"; + sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818"; + }; + }; + "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.14.1" = { + name = "commander"; + packageName = "commander"; + version = "2.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz"; + sha512 = "+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="; + }; + }; + "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=="; + }; + }; + "compress-commons-3.0.0" = { + name = "compress-commons"; + packageName = "compress-commons"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz"; + sha512 = "FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg=="; + }; + }; + "compressible-2.0.13" = { + name = "compressible"; + packageName = "compressible"; + version = "2.0.13"; + src = fetchurl { + url = "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz"; + sha1 = "0d1020ab924b2fdb4d6279875c7d6daba6baa7a9"; + }; + }; + "compression-1.7.2" = { + name = "compression"; + packageName = "compression"; + version = "1.7.2"; + src = fetchurl { + url = "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz"; + sha1 = "aaffbcd6aaf854b44ebb280353d5ad1651f59a69"; + }; + }; + "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"; + }; + }; + "connect-lastmile-1.2.2" = { + name = "connect-lastmile"; + packageName = "connect-lastmile"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/connect-lastmile/-/connect-lastmile-1.2.2.tgz"; + sha512 = "laKBrYAoYNuUYAsJQVUdmCqzi825A0GJ7YuiT8zWP0wU6s0Cv9h1eSdHvXh0DgxaVe0dQaYFufcL1htzPCJIpQ=="; + }; + }; + "connect-timeout-1.9.0" = { + name = "connect-timeout"; + packageName = "connect-timeout"; + version = "1.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.9.0.tgz"; + sha1 = "bc27326b122103714bebfa0d958bab33f6522e3a"; + }; + }; + "content-disposition-0.5.2" = { + name = "content-disposition"; + packageName = "content-disposition"; + version = "0.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz"; + sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"; + }; + }; + "content-type-1.0.4" = { + name = "content-type"; + packageName = "content-type"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"; + sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="; + }; + }; + "cookie-0.3.1" = { + name = "cookie"; + packageName = "cookie"; + version = "0.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz"; + sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; + }; + }; + "cookie-parser-1.4.3" = { + name = "cookie-parser"; + packageName = "cookie-parser"; + version = "1.4.3"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz"; + sha1 = "0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5"; + }; + }; + "cookie-signature-1.0.6" = { + name = "cookie-signature"; + packageName = "cookie-signature"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + }; + "cookiejar-2.1.2" = { + name = "cookiejar"; + packageName = "cookiejar"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz"; + sha512 = "Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="; + }; + }; + "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"; + }; + }; + "crc-3.4.4" = { + name = "crc"; + packageName = "crc"; + version = "3.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz"; + sha1 = "9da1e980e3bd44fc5c93bf5ab3da3378d85e466b"; + }; + }; + "crc32-stream-3.0.1" = { + name = "crc32-stream"; + packageName = "crc32-stream"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz"; + sha512 = "mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w=="; + }; + }; + "cryptiles-3.1.2" = { + name = "cryptiles"; + packageName = "cryptiles"; + version = "3.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz"; + sha1 = "a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"; + }; + }; + "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"; + }; + }; + "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=="; + }; + }; + "del-2.2.2" = { + name = "del"; + packageName = "del"; + version = "2.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/del/-/del-2.2.2.tgz"; + sha1 = "c12c981d067846c84bcaf862cff930d907ffd1a8"; + }; + }; + "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.0" = { + name = "depd"; + packageName = "depd"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz"; + sha1 = "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"; + }; + }; + "depd-1.1.1" = { + name = "depd"; + packageName = "depd"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz"; + sha1 = "5783b4e1c459f06fa5ca27f991f3d06e7a310359"; + }; + }; + "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"; + }; + }; + "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"; + }; + }; + "dtrace-provider-0.8.7" = { + name = "dtrace-provider"; + packageName = "dtrace-provider"; + version = "0.8.7"; + src = fetchurl { + url = "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz"; + sha1 = "dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04"; + }; + }; + "ecc-jsbn-0.1.1" = { + name = "ecc-jsbn"; + packageName = "ecc-jsbn"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz"; + sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505"; + }; + }; + "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"; + }; + }; + "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"; + }; + }; + "end-of-stream-1.4.4" = { + name = "end-of-stream"; + packageName = "end-of-stream"; + version = "1.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"; + sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="; + }; + }; + "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"; + }; + }; + "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"; + }; + }; + "express-4.16.2" = { + name = "express"; + packageName = "express"; + version = "4.16.2"; + src = fetchurl { + url = "https://registry.npmjs.org/express/-/express-4.16.2.tgz"; + sha1 = "e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"; + }; + }; + "express-session-1.15.6" = { + name = "express-session"; + packageName = "express-session"; + version = "1.15.6"; + src = fetchurl { + url = "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz"; + sha512 = "r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA=="; + }; + }; + "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=="; + }; + }; + "extsprintf-1.2.0" = { + name = "extsprintf"; + packageName = "extsprintf"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz"; + sha1 = "5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529"; + }; + }; + "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-1.0.0" = { + name = "fast-deep-equal"; + packageName = "fast-deep-equal"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz"; + sha1 = "96256a3bc975595eb36d82e9929d060d893439ff"; + }; + }; + "fast-json-stable-stringify-2.0.0" = { + name = "fast-json-stable-stringify"; + packageName = "fast-json-stable-stringify"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; + sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; + }; + }; + "fast-safe-stringify-2.0.7" = { + name = "fast-safe-stringify"; + packageName = "fast-safe-stringify"; + version = "2.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz"; + sha512 = "Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="; + }; + }; + "fd-slicer-1.0.1" = { + name = "fd-slicer"; + packageName = "fd-slicer"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz"; + sha1 = "8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"; + }; + }; + "finalhandler-1.1.0" = { + name = "finalhandler"; + packageName = "finalhandler"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz"; + sha1 = "ce0b6855b45853e791b2fcc680046d88253dd7f5"; + }; + }; + "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.2" = { + name = "form-data"; + packageName = "form-data"; + version = "2.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz"; + sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099"; + }; + }; + "form-data-3.0.0" = { + name = "form-data"; + packageName = "form-data"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz"; + sha512 = "CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg=="; + }; + }; + "formidable-1.2.1" = { + name = "formidable"; + packageName = "formidable"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz"; + sha512 = "Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="; + }; + }; + "forwarded-0.1.2" = { + name = "forwarded"; + packageName = "forwarded"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + }; + "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-constants-1.0.0" = { + name = "fs-constants"; + packageName = "fs-constants"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz"; + sha512 = "y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="; + }; + }; + "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"; + }; + }; + "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-6.0.4" = { + name = "glob"; + packageName = "glob"; + version = "6.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz"; + sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"; + }; + }; + "glob-7.1.2" = { + name = "glob"; + packageName = "glob"; + version = "7.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"; + sha1 = "c19c9df9a028702d678612384a6552404c636d15"; + }; + }; + "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=="; + }; + }; + "globby-5.0.0" = { + name = "globby"; + packageName = "globby"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz"; + sha1 = "ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"; + }; + }; + "graceful-fs-4.2.4" = { + name = "graceful-fs"; + packageName = "graceful-fs"; + version = "4.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz"; + sha512 = "WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="; + }; + }; + "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.0.3" = { + name = "har-validator"; + packageName = "har-validator"; + version = "5.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz"; + sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd"; + }; + }; + "hawk-6.0.2" = { + name = "hawk"; + packageName = "hawk"; + version = "6.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz"; + sha512 = "miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ=="; + }; + }; + "hoek-4.2.1" = { + name = "hoek"; + packageName = "hoek"; + version = "4.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz"; + sha512 = "QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="; + }; + }; + "http-errors-1.6.1" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz"; + sha1 = "5f8b8ed98aca545656bf572997387f904a722257"; + }; + }; + "http-errors-1.6.2" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz"; + sha1 = "0a002cc85707192a7e7946ceedc11155f60ec736"; + }; + }; + "http-errors-1.6.3" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + }; + "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"; + }; + }; + "iconv-lite-0.4.19" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.4.19"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz"; + sha512 = "oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="; + }; + }; + "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=="; + }; + }; + "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.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=="; + }; + }; + "ipaddr.js-1.5.2" = { + name = "ipaddr.js"; + packageName = "ipaddr.js"; + version = "1.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz"; + sha1 = "d4b505bde9946987ccf0fc58d9010ff9607e3fa0"; + }; + }; + "is-path-cwd-1.0.0" = { + name = "is-path-cwd"; + packageName = "is-path-cwd"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; + sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; + }; + }; + "is-path-in-cwd-1.0.0" = { + name = "is-path-in-cwd"; + packageName = "is-path-in-cwd"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz"; + sha1 = "6477582b8214d602346094567003be8a9eac04dc"; + }; + }; + "is-path-inside-1.0.0" = { + name = "is-path-inside"; + packageName = "is-path-inside"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz"; + sha1 = "fc06e5a1683fbda13de667aff717bbc10a48f37f"; + }; + }; + "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"; + }; + }; + "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"; + }; + }; + "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"; + }; + }; + "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-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.3.1" = { + name = "json-schema-traverse"; + packageName = "json-schema-traverse"; + version = "0.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz"; + sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340"; + }; + }; + "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"; + }; + }; + "lazystream-1.0.0" = { + name = "lazystream"; + packageName = "lazystream"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz"; + sha1 = "f6995fe0f820392f61396be89462407bb77168e4"; + }; + }; + "ldap-filter-0.2.2" = { + name = "ldap-filter"; + packageName = "ldap-filter"; + version = "0.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz"; + sha1 = "f2b842be0b86da3352798505b31ebcae590d77d0"; + }; + }; + "ldapjs-1.0.2" = { + name = "ldapjs"; + packageName = "ldapjs"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz"; + sha1 = "544ff7032b7b83c68f0701328d9297aa694340f9"; + }; + }; + "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.defaults-4.2.0" = { + name = "lodash.defaults"; + packageName = "lodash.defaults"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz"; + sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c"; + }; + }; + "lodash.difference-4.5.0" = { + name = "lodash.difference"; + packageName = "lodash.difference"; + version = "4.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz"; + sha1 = "9ccb4e505d486b91651345772885a2df27fd017c"; + }; + }; + "lodash.flatten-4.4.0" = { + name = "lodash.flatten"; + packageName = "lodash.flatten"; + version = "4.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz"; + sha1 = "f31c22225a9632d2bbf8e4addbef240aa765a61f"; + }; + }; + "lodash.isplainobject-4.0.6" = { + name = "lodash.isplainobject"; + packageName = "lodash.isplainobject"; + version = "4.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz"; + sha1 = "7c526a52d89b45c45cc690b88163be0497f550cb"; + }; + }; + "lodash.union-4.6.0" = { + name = "lodash.union"; + packageName = "lodash.union"; + version = "4.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz"; + sha1 = "48bb5088409f16f1821666641c44dd1aaae3cd88"; + }; + }; + "media-typer-0.3.0" = { + name = "media-typer"; + packageName = "media-typer"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + }; + "merge-descriptors-1.0.1" = { + name = "merge-descriptors"; + packageName = "merge-descriptors"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + }; + "methods-1.1.2" = { + name = "methods"; + packageName = "methods"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + }; + "mime-1.4.1" = { + name = "mime"; + packageName = "mime"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz"; + sha512 = "KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="; + }; + }; + "mime-2.4.4" = { + name = "mime"; + packageName = "mime"; + version = "2.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz"; + sha512 = "LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="; + }; + }; + "mime-db-1.27.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.27.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz"; + sha1 = "820f572296bbd20ec25ed55e5b5de869e5436eb1"; + }; + }; + "mime-db-1.33.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.33.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz"; + sha512 = "BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="; + }; + }; + "mime-db-1.38.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.38.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz"; + sha512 = "bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg=="; + }; + }; + "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.15" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.15"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz"; + sha1 = "a4ebf5064094569237b8cf70046776d09fc92aed"; + }; + }; + "mime-types-2.1.18" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.18"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz"; + sha512 = "lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ=="; + }; + }; + "mime-types-2.1.22" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.22"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz"; + sha512 = "aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog=="; + }; + }; + "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=="; + }; + }; + "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"; + sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; + }; + }; + "minimist-0.0.8" = { + name = "minimist"; + packageName = "minimist"; + version = "0.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"; + sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; + }; + }; + "mkdirp-0.5.1" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "0.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"; + sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; + }; + }; + "moment-2.24.0" = { + name = "moment"; + packageName = "moment"; + version = "2.24.0"; + src = fetchurl { + url = "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz"; + sha512 = "bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="; + }; + }; + "morgan-1.9.1" = { + name = "morgan"; + packageName = "morgan"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz"; + sha512 = "HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA=="; + }; + }; + "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.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=="; + }; + }; + "multiparty-4.1.3" = { + name = "multiparty"; + packageName = "multiparty"; + version = "4.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/multiparty/-/multiparty-4.1.3.tgz"; + sha1 = "3c43c7fcb1896e17460436a9dd0b6ef1668e4f94"; + }; + }; + "mv-2.1.1" = { + name = "mv"; + packageName = "mv"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz"; + sha1 = "ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2"; + }; + }; + "nan-2.12.1" = { + name = "nan"; + packageName = "nan"; + version = "2.12.1"; + src = fetchurl { + url = "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz"; + sha512 = "JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="; + }; + }; + "ncp-2.0.0" = { + name = "ncp"; + packageName = "ncp"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz"; + sha1 = "195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"; + }; + }; + "negotiator-0.6.1" = { + name = "negotiator"; + packageName = "negotiator"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz"; + sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; + }; + }; + "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=="; + }; + }; + "oauth-sign-0.8.2" = { + name = "oauth-sign"; + packageName = "oauth-sign"; + version = "0.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz"; + sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"; + }; + }; + "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"; + }; + }; + "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"; + }; + }; + "on-headers-1.0.1" = { + name = "on-headers"; + packageName = "on-headers"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz"; + sha1 = "928f5d0f470d49342651ea6794b0857c100693f7"; + }; + }; + "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"; + }; + }; + "parseurl-1.3.2" = { + name = "parseurl"; + packageName = "parseurl"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz"; + sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; + }; + }; + "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-is-inside-1.0.2" = { + name = "path-is-inside"; + packageName = "path-is-inside"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"; + sha1 = "365417dede44430d1c11af61027facf074bdfc53"; + }; + }; + "path-to-regexp-0.1.7" = { + name = "path-to-regexp"; + packageName = "path-to-regexp"; + version = "0.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + }; + "pend-1.2.0" = { + name = "pend"; + packageName = "pend"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz"; + sha1 = "7a57eb550a6783f9115331fcf4663d5c8e007a50"; + }; + }; + "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"; + }; + }; + "pify-2.3.0" = { + name = "pify"; + packageName = "pify"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + }; + "pinkie-2.0.4" = { + name = "pinkie"; + packageName = "pinkie"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + }; + "pinkie-promise-2.0.1" = { + name = "pinkie-promise"; + packageName = "pinkie-promise"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + }; + "precond-0.2.3" = { + name = "precond"; + packageName = "precond"; + version = "0.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz"; + sha1 = "aa9591bcaa24923f1e0f4849d240f47efc1075ac"; + }; + }; + "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=="; + }; + }; + "proxy-addr-2.0.2" = { + name = "proxy-addr"; + packageName = "proxy-addr"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz"; + sha1 = "6571504f47bb988ec8180253f85dd7e14952bdec"; + }; + }; + "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"; + }; + }; + "qs-6.5.1" = { + name = "qs"; + packageName = "qs"; + version = "6.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz"; + sha512 = "eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="; + }; + }; + "qs-6.9.1" = { + name = "qs"; + packageName = "qs"; + version = "6.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz"; + sha512 = "Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="; + }; + }; + "random-bytes-1.0.0" = { + name = "random-bytes"; + packageName = "random-bytes"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz"; + sha1 = "4f68a1dc0ae58bd3fb95848c30324db75d64360b"; + }; + }; + "range-parser-1.2.0" = { + name = "range-parser"; + packageName = "range-parser"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz"; + sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e"; + }; + }; + "raw-body-2.3.2" = { + name = "raw-body"; + packageName = "raw-body"; + version = "2.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz"; + sha1 = "bcd60c77d3eb93cde0050295c3f379389bc88f89"; + }; + }; + "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.4.0" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "3.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz"; + sha512 = "jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ=="; + }; + }; + "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=="; + }; + }; + "readline-sync-1.4.9" = { + name = "readline-sync"; + packageName = "readline-sync"; + version = "1.4.9"; + src = fetchurl { + url = "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz"; + sha1 = "3eda8e65f23cd2a17e61301b1f0003396af5ecda"; + }; + }; + "request-2.83.0" = { + name = "request"; + packageName = "request"; + version = "2.83.0"; + src = fetchurl { + url = "https://registry.npmjs.org/request/-/request-2.83.0.tgz"; + sha512 = "lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw=="; + }; + }; + "rimraf-2.4.5" = { + name = "rimraf"; + packageName = "rimraf"; + version = "2.4.5"; + src = fetchurl { + url = "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz"; + sha1 = "ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"; + }; + }; + "rimraf-2.6.1" = { + name = "rimraf"; + packageName = "rimraf"; + version = "2.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz"; + sha1 = "c2338ec643df7a1b7fe5c54fa86f57428a55f33d"; + }; + }; + "safe-buffer-5.1.1" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"; + sha512 = "kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="; + }; + }; + "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.0" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz"; + sha512 = "fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="; + }; + }; + "safe-json-stringify-1.2.0" = { + name = "safe-json-stringify"; + packageName = "safe-json-stringify"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz"; + sha512 = "gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg=="; + }; + }; + "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=="; + }; + }; + "safetydance-0.1.1" = { + name = "safetydance"; + packageName = "safetydance"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/safetydance/-/safetydance-0.1.1.tgz"; + sha1 = "1588c69133a7c69cddfd6a2d1d334381d0b7b2f7"; + }; + }; + "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=="; + }; + }; + "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=="; + }; + }; + "send-0.16.1" = { + name = "send"; + packageName = "send"; + version = "0.16.1"; + src = fetchurl { + url = "https://registry.npmjs.org/send/-/send-0.16.1.tgz"; + sha512 = "ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A=="; + }; + }; + "serve-index-1.9.1" = { + name = "serve-index"; + packageName = "serve-index"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz"; + sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; + }; + }; + "serve-static-1.13.1" = { + name = "serve-static"; + packageName = "serve-static"; + version = "1.13.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz"; + sha512 = "hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ=="; + }; + }; + "setprototypeof-1.0.3" = { + name = "setprototypeof"; + packageName = "setprototypeof"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz"; + sha1 = "66567e37043eeb4f04d91bd658c0cbefb55b8e04"; + }; + }; + "setprototypeof-1.1.0" = { + name = "setprototypeof"; + packageName = "setprototypeof"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha512 = "BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="; + }; + }; + "sntp-2.1.0" = { + name = "sntp"; + packageName = "sntp"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz"; + sha512 = "FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg=="; + }; + }; + "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=="; + }; + }; + "statuses-1.3.1" = { + name = "statuses"; + packageName = "statuses"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz"; + sha1 = "faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"; + }; + }; + "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"; + }; + }; + "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=="; + }; + }; + "stringstream-0.0.6" = { + name = "stringstream"; + packageName = "stringstream"; + version = "0.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz"; + sha512 = "87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="; + }; + }; + "superagent-5.1.3" = { + name = "superagent"; + packageName = "superagent"; + version = "5.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/superagent/-/superagent-5.1.3.tgz"; + sha512 = "2bno1Nb4uvZPECTJ7NDYlae6Q8LLQoZZZ9Vumd346jU1UGVkNC/lQI42jHwtrqVoepyt0QxNKFty01IRKgD4CA=="; + }; + }; + "tar-stream-2.1.2" = { + name = "tar-stream"; + packageName = "tar-stream"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz"; + sha512 = "UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q=="; + }; + }; + "tough-cookie-2.3.3" = { + name = "tough-cookie"; + packageName = "tough-cookie"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz"; + sha1 = "0b618a5565b6dea90bf3425d04d55edc475a7561"; + }; + }; + "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-is-1.6.16" = { + name = "type-is"; + packageName = "type-is"; + version = "1.6.16"; + src = fetchurl { + url = "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz"; + sha512 = "HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q=="; + }; + }; + "uid-safe-2.1.5" = { + name = "uid-safe"; + packageName = "uid-safe"; + version = "2.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz"; + sha512 = "KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA=="; + }; + }; + "underscore-1.8.3" = { + name = "underscore"; + packageName = "underscore"; + version = "1.8.3"; + src = fetchurl { + url = "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"; + sha1 = "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"; + }; + }; + "underscore-1.9.1" = { + name = "underscore"; + packageName = "underscore"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz"; + sha512 = "5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="; + }; + }; + "unpipe-1.0.0" = { + name = "unpipe"; + packageName = "unpipe"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + }; + "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"; + }; + }; + "utils-merge-1.0.1" = { + name = "utils-merge"; + packageName = "utils-merge"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + }; + "uuid-3.2.1" = { + name = "uuid"; + packageName = "uuid"; + version = "3.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz"; + sha512 = "jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="; + }; + }; + "vary-1.1.2" = { + name = "vary"; + packageName = "vary"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + }; + "vasync-1.6.4" = { + name = "vasync"; + packageName = "vasync"; + version = "1.6.4"; + src = fetchurl { + url = "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz"; + sha1 = "dfe93616ad0e7ae801b332a9d88bfc5cdc8e1d1f"; + }; + }; + "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"; + }; + }; + "verror-1.6.0" = { + name = "verror"; + packageName = "verror"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz"; + sha1 = "7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5"; + }; + }; + "webdav-server-2.4.6" = { + name = "webdav-server"; + packageName = "webdav-server"; + version = "2.4.6"; + src = fetchurl { + url = "https://registry.npmjs.org/webdav-server/-/webdav-server-2.4.6.tgz"; + sha512 = "YhqjqlQdD4H55UEnRgk99a9epTuulKMW05m6KBTtG6fBXcc4/2H87F2DRJHH7a33PibNn3jWv8u9AgcMHLGUrw=="; + }; + }; + "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"; + }; + }; + "xml-js-1.6.11" = { + name = "xml-js"; + packageName = "xml-js"; + version = "1.6.11"; + src = fetchurl { + url = "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz"; + sha512 = "7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="; + }; + }; + "xml-js-builder-1.0.3" = { + name = "xml-js-builder"; + packageName = "xml-js-builder"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/xml-js-builder/-/xml-js-builder-1.0.3.tgz"; + sha512 = "BoLgG/glT45M0jK5PGh9h+iGrQxa8jJk9ofR63GroRifl2tbGB3/yYiVY3wQWHrZgWWfl9+7fhEB/VoD9mWnSg=="; + }; + }; + "zip-stream-3.0.1" = { + name = "zip-stream"; + packageName = "zip-stream"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz"; + sha512 = "r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ=="; + }; + }; + }; + args = { + name = "cloudron-surfer"; + packageName = "cloudron-surfer"; + version = "5.10.0"; + inherit src; + dependencies = [ + (sources."accepts-1.3.4" // { + dependencies = [ + sources."mime-db-1.33.0" + sources."mime-types-2.1.18" + ]; + }) + sources."ajv-5.5.2" + (sources."archiver-4.0.1" // { + dependencies = [ + sources."async-2.6.3" + sources."glob-7.1.6" + sources."readable-stream-3.6.0" + ]; + }) + (sources."archiver-utils-2.1.0" // { + dependencies = [ + sources."glob-7.1.6" + sources."readable-stream-2.3.7" + sources."string_decoder-1.1.1" + ]; + }) + sources."array-flatten-1.1.1" + sources."array-union-1.0.2" + sources."array-uniq-1.0.3" + sources."arrify-1.0.1" + sources."asn1-0.2.3" + sources."assert-plus-1.0.0" + sources."async-1.5.2" + sources."asynckit-0.4.0" + sources."aws-sign2-0.7.0" + sources."aws4-1.6.0" + sources."backoff-2.5.0" + sources."balanced-match-1.0.0" + sources."base64-js-1.3.1" + (sources."basic-auth-2.0.1" // { + dependencies = [ + sources."safe-buffer-5.1.2" + ]; + }) + sources."batch-0.6.1" + sources."bcrypt-pbkdf-1.0.1" + sources."bcryptjs-2.4.3" + (sources."bl-4.0.2" // { + dependencies = [ + sources."inherits-2.0.4" + ]; + }) + (sources."body-parser-1.18.2" // { + dependencies = [ + sources."depd-1.1.2" + (sources."http-errors-1.6.2" // { + dependencies = [ + sources."depd-1.1.1" + ]; + }) + ]; + }) + sources."boom-4.3.1" + sources."brace-expansion-1.1.8" + sources."buffer-5.6.0" + sources."buffer-crc32-0.2.13" + sources."bunyan-1.8.12" + sources."bytes-3.0.0" + sources."caseless-0.12.0" + sources."co-4.6.0" + sources."colors-1.1.2" + sources."combined-stream-1.0.5" + sources."commander-2.14.1" + sources."component-emitter-1.3.0" + (sources."compress-commons-3.0.0" // { + dependencies = [ + sources."readable-stream-2.3.7" + sources."string_decoder-1.1.1" + ]; + }) + (sources."compressible-2.0.13" // { + dependencies = [ + sources."mime-db-1.33.0" + ]; + }) + sources."compression-1.7.2" + sources."concat-map-0.0.1" + (sources."connect-lastmile-1.2.2" // { + dependencies = [ + sources."debug-4.1.1" + sources."ms-2.1.2" + sources."underscore-1.9.1" + ]; + }) + sources."connect-timeout-1.9.0" + sources."content-disposition-0.5.2" + sources."content-type-1.0.4" + sources."cookie-0.3.1" + sources."cookie-parser-1.4.3" + sources."cookie-signature-1.0.6" + sources."cookiejar-2.1.2" + sources."core-util-is-1.0.2" + sources."crc-3.4.4" + sources."crc32-stream-3.0.1" + (sources."cryptiles-3.1.2" // { + dependencies = [ + sources."boom-5.2.0" + ]; + }) + (sources."dashdash-1.14.1" // { + dependencies = [ + sources."assert-plus-1.0.0" + ]; + }) + sources."debug-2.6.9" + sources."del-2.2.2" + sources."delayed-stream-1.0.0" + sources."depd-1.1.0" + sources."destroy-1.0.4" + sources."dtrace-provider-0.8.7" + sources."ecc-jsbn-0.1.1" + sources."ee-first-1.1.1" + sources."encodeurl-1.0.2" + sources."end-of-stream-1.4.4" + sources."escape-html-1.0.3" + sources."etag-1.8.1" + (sources."express-4.16.2" // { + dependencies = [ + sources."depd-1.1.2" + sources."setprototypeof-1.1.0" + ]; + }) + (sources."express-session-1.15.6" // { + dependencies = [ + sources."depd-1.1.2" + ]; + }) + sources."extend-3.0.2" + sources."extsprintf-1.2.0" + sources."fast-deep-equal-1.0.0" + sources."fast-json-stable-stringify-2.0.0" + sources."fast-safe-stringify-2.0.7" + sources."fd-slicer-1.0.1" + sources."finalhandler-1.1.0" + sources."forever-agent-0.6.1" + (sources."form-data-2.3.2" // { + dependencies = [ + sources."combined-stream-1.0.6" + ]; + }) + sources."formidable-1.2.1" + sources."forwarded-0.1.2" + sources."fresh-0.5.2" + sources."fs-constants-1.0.0" + sources."fs.realpath-1.0.0" + (sources."getpass-0.1.7" // { + dependencies = [ + sources."assert-plus-1.0.0" + ]; + }) + sources."glob-7.1.2" + sources."globby-5.0.0" + sources."graceful-fs-4.2.4" + sources."har-schema-2.0.0" + sources."har-validator-5.0.3" + sources."hawk-6.0.2" + sources."hoek-4.2.1" + sources."http-errors-1.6.1" + (sources."http-signature-1.2.0" // { + dependencies = [ + sources."assert-plus-1.0.0" + sources."extsprintf-1.3.0" + sources."json-schema-0.2.3" + sources."jsprim-1.4.1" + sources."verror-1.10.0" + ]; + }) + sources."iconv-lite-0.4.19" + sources."ieee754-1.1.13" + sources."inflight-1.0.6" + sources."inherits-2.0.3" + sources."ipaddr.js-1.5.2" + sources."is-path-cwd-1.0.0" + sources."is-path-in-cwd-1.0.0" + sources."is-path-inside-1.0.0" + sources."is-typedarray-1.0.0" + sources."isarray-1.0.0" + sources."isstream-0.1.2" + sources."jsbn-0.1.1" + sources."json-schema-traverse-0.3.1" + sources."json-stringify-safe-5.0.1" + (sources."lazystream-1.0.0" // { + dependencies = [ + sources."readable-stream-2.3.7" + sources."string_decoder-1.1.1" + ]; + }) + (sources."ldap-filter-0.2.2" // { + dependencies = [ + sources."assert-plus-0.1.5" + ]; + }) + sources."ldapjs-1.0.2" + sources."lodash-4.17.15" + sources."lodash.defaults-4.2.0" + sources."lodash.difference-4.5.0" + sources."lodash.flatten-4.4.0" + sources."lodash.isplainobject-4.0.6" + sources."lodash.union-4.6.0" + sources."media-typer-0.3.0" + sources."merge-descriptors-1.0.1" + sources."methods-1.1.2" + sources."mime-2.4.4" + sources."mime-db-1.27.0" + sources."mime-types-2.1.15" + sources."minimatch-3.0.4" + sources."minimist-0.0.8" + sources."mkdirp-0.5.1" + sources."moment-2.24.0" + (sources."morgan-1.9.1" // { + dependencies = [ + sources."depd-1.1.2" + ]; + }) + sources."ms-2.0.0" + sources."multiparty-4.1.3" + (sources."mv-2.1.1" // { + dependencies = [ + sources."glob-6.0.4" + sources."rimraf-2.4.5" + ]; + }) + sources."nan-2.12.1" + sources."ncp-2.0.0" + sources."negotiator-0.6.1" + sources."normalize-path-3.0.0" + sources."oauth-sign-0.8.2" + sources."object-assign-4.1.1" + sources."on-finished-2.3.0" + sources."on-headers-1.0.1" + sources."once-1.4.0" + sources."parseurl-1.3.2" + sources."path-is-absolute-1.0.1" + sources."path-is-inside-1.0.2" + sources."path-to-regexp-0.1.7" + sources."pend-1.2.0" + sources."performance-now-2.1.0" + sources."pify-2.3.0" + sources."pinkie-2.0.4" + sources."pinkie-promise-2.0.1" + sources."precond-0.2.3" + sources."process-nextick-args-2.0.1" + sources."proxy-addr-2.0.2" + sources."punycode-1.4.1" + sources."qs-6.5.1" + sources."random-bytes-1.0.0" + sources."range-parser-1.2.0" + (sources."raw-body-2.3.2" // { + dependencies = [ + sources."depd-1.1.1" + sources."http-errors-1.6.2" + ]; + }) + sources."readable-stream-3.4.0" + sources."readline-sync-1.4.9" + (sources."request-2.83.0" // { + dependencies = [ + sources."mime-db-1.33.0" + sources."mime-types-2.1.18" + ]; + }) + sources."rimraf-2.6.1" + sources."safe-buffer-5.1.1" + sources."safe-json-stringify-1.2.0" + sources."safer-buffer-2.1.2" + sources."safetydance-0.1.1" + (sources."send-0.16.1" // { + dependencies = [ + sources."depd-1.1.2" + (sources."http-errors-1.6.2" // { + dependencies = [ + sources."depd-1.1.1" + ]; + }) + sources."mime-1.4.1" + ]; + }) + (sources."serve-index-1.9.1" // { + dependencies = [ + sources."depd-1.1.2" + sources."http-errors-1.6.3" + sources."mime-db-1.44.0" + sources."mime-types-2.1.27" + sources."setprototypeof-1.1.0" + sources."statuses-1.5.0" + ]; + }) + sources."serve-static-1.13.1" + sources."setprototypeof-1.0.3" + sources."sntp-2.1.0" + sources."sshpk-1.16.1" + sources."statuses-1.3.1" + (sources."string_decoder-1.3.0" // { + dependencies = [ + sources."safe-buffer-5.2.0" + ]; + }) + sources."stringstream-0.0.6" + (sources."superagent-5.1.3" // { + dependencies = [ + sources."combined-stream-1.0.8" + sources."debug-4.1.1" + sources."form-data-3.0.0" + sources."ms-2.1.2" + sources."qs-6.9.1" + sources."semver-6.3.0" + ]; + }) + sources."tar-stream-2.1.2" + sources."tough-cookie-2.3.3" + sources."tunnel-agent-0.6.0" + sources."tweetnacl-0.14.5" + (sources."type-is-1.6.16" // { + dependencies = [ + sources."mime-db-1.33.0" + sources."mime-types-2.1.18" + ]; + }) + sources."uid-safe-2.1.5" + sources."underscore-1.8.3" + sources."unpipe-1.0.0" + sources."util-deprecate-1.0.2" + sources."utils-merge-1.0.1" + sources."uuid-3.2.1" + sources."vary-1.1.2" + (sources."vasync-1.6.4" // { + dependencies = [ + sources."verror-1.6.0" + ]; + }) + sources."verror-1.10.0" + (sources."webdav-server-2.4.6" // { + dependencies = [ + sources."mime-db-1.38.0" + sources."mime-types-2.1.22" + ]; + }) + sources."wrappy-1.0.2" + (sources."xml-js-1.6.11" // { + dependencies = [ + sources."sax-1.2.4" + ]; + }) + sources."xml-js-builder-1.0.3" + (sources."zip-stream-3.0.1" // { + dependencies = [ + sources."readable-stream-3.6.0" + ]; + }) + ]; + buildInputs = globalBuildInputs; + meta = { + description = "Simple file server"; + license = "MIT"; + }; + 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/flakes/taskwarrior-web/Gemfile.lock b/flakes/taskwarrior-web/Gemfile.lock new file mode 100644 index 0000000..1b2f5ba --- /dev/null +++ b/flakes/taskwarrior-web/Gemfile.lock @@ -0,0 +1,139 @@ +PATH + remote: . + specs: + taskwarrior-web (1.1.12) + activesupport (~> 3) + json (~> 1.8) + parseconfig + rack-flash3 + rinku + sinatra + sinatra-simple-navigation + vegas + versionomy + +GEM + remote: http://rubygems.org/ + specs: + activesupport (3.2.22.5) + i18n (~> 0.6, >= 0.6.4) + multi_json (~> 1.0) + blockenspiel (0.5.0) + coderay (1.1.2) + concurrent-ruby (1.1.4) + daemons (1.3.1) + diff-lcs (1.3) + docile (1.3.1) + eventmachine (1.2.7) + ffi (1.10.0) + formatador (0.2.5) + growl (1.0.3) + guard (2.15.0) + formatador (>= 0.2.4) + listen (>= 2.7, < 4.0) + lumberjack (>= 1.0.12, < 2.0) + nenv (~> 0.1) + notiffany (~> 0.0) + pry (>= 0.9.12) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-bundler (2.2.1) + bundler (>= 1.3.0, < 3) + guard (~> 2.2) + guard-compat (~> 1.1) + guard-compat (1.2.1) + guard-rspec (4.7.3) + guard (~> 2.1) + guard-compat (~> 1.1) + rspec (>= 2.99.0, < 4.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + json (1.8.6) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + lumberjack (1.0.13) + method_source (0.9.2) + mini_portile2 (2.4.0) + multi_json (1.13.1) + mustermann (1.0.3) + nenv (0.3.0) + nokogiri (1.10.1) + mini_portile2 (~> 2.4.0) + notiffany (0.1.1) + nenv (~> 0.1) + shellany (~> 0.0) + parseconfig (1.0.8) + pry (0.12.2) + coderay (~> 1.1.0) + method_source (~> 0.9.0) + rack (2.0.6) + rack-flash3 (1.0.5) + rack + rack-protection (2.0.5) + rack + rack-test (1.1.0) + rack (>= 1.0, < 3) + rake (10.5.0) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) + rinku (2.0.5) + rspec (2.99.0) + rspec-core (~> 2.99.0) + rspec-expectations (~> 2.99.0) + rspec-mocks (~> 2.99.0) + rspec-core (2.99.2) + rspec-expectations (2.99.2) + diff-lcs (>= 1.1.3, < 2.0) + rspec-html-matchers (0.5.0) + nokogiri (~> 1) + rspec (~> 2, >= 2.11.0) + rspec-mocks (2.99.4) + ruby_dep (1.5.0) + shellany (0.0.1) + simple-navigation (4.0.5) + activesupport (>= 2.3.2) + simplecov (0.16.1) + docile (~> 1.1) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.2) + sinatra (2.0.5) + mustermann (~> 1.0) + rack (~> 2.0) + rack-protection (= 2.0.5) + tilt (~> 2.0) + sinatra-simple-navigation (4.1.0) + simple-navigation (~> 4.0) + sinatra (>= 1.0, < 3.0) + thin (1.7.2) + daemons (~> 1.0, >= 1.0.9) + eventmachine (~> 1.0, >= 1.0.4) + rack (>= 1, < 3) + thor (0.20.3) + tilt (2.0.9) + vegas (0.1.11) + rack (>= 1.0.0) + versionomy (0.5.0) + blockenspiel (~> 0.5) + +PLATFORMS + ruby + +DEPENDENCIES + growl + guard-bundler + guard-rspec + rack-test + rake (< 11) + rb-fsevent + rspec (~> 2) + rspec-html-matchers + simplecov + taskwarrior-web! + thin + +BUNDLED WITH + 1.16.2 diff --git a/flakes/taskwarrior-web/default.nix b/flakes/taskwarrior-web/default.nix new file mode 100644 index 0000000..7678b3c --- /dev/null +++ b/flakes/taskwarrior-web/default.nix @@ -0,0 +1,25 @@ +{ ruby_2_6, bundlerEnv, src, stdenv }: +let + gems = bundlerEnv { + name = "taskwarrior-web-env"; + ruby = ruby_2_6; + pname = "taskwarrior-web"; + gemset = ./gemset.nix; + gemdir = package.out; + groups = [ "default" "local" "development" ]; + }; + package = stdenv.mkDerivation { + pname = "taskwarrior-web"; + version = src.shortRev; + inherit src; + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; + patches = [ ./fixes.patch ./thin.patch ]; + installPhase = '' + cp -a . $out + cp ${./Gemfile.lock} $out/Gemfile.lock + ''; + passthru = { + inherit gems; + }; + }; +in package diff --git a/flakes/taskwarrior-web/fixes.patch b/flakes/taskwarrior-web/fixes.patch new file mode 100644 index 0000000..c4cea34 --- /dev/null +++ b/flakes/taskwarrior-web/fixes.patch @@ -0,0 +1,113 @@ +diff --git a/lib/taskwarrior-web/helpers.rb b/lib/taskwarrior-web/helpers.rb +index 212aed7..94c57df 100644 +--- a/lib/taskwarrior-web/helpers.rb ++++ b/lib/taskwarrior-web/helpers.rb +@@ -1,6 +1,8 @@ + require 'active_support/core_ext/date/calculations' + + module TaskwarriorWeb::App::Helpers ++ include ERB::Util ++ + def format_date(timestamp) + format = TaskwarriorWeb::Config.dateformat || '%-m/%-d/%Y' + Time.parse(timestamp).localtime.strftime(format) +diff --git a/lib/taskwarrior-web/model/task.rb b/lib/taskwarrior-web/model/task.rb +index 212aed7..94c57df 100644 +--- a/lib/taskwarrior-web/model/task.rb ++++ b/lib/taskwarrior-web/model/task.rb +@@ -15,8 +15,14 @@ + + def initialize(attributes = {}) + attributes.each do |attr, value| ++ if attr == "uuid" ++ next ++ end + send("#{attr}=", value) if respond_to?(attr.to_sym) + end ++ if attributes.has_key? "uuid" ++ send("uuid=", attributes["uuid"]) ++ end + + @_errors = [] + @tags = [] if @tags.nil? +diff --git a/lib/taskwarrior-web/services/builder/base.rb b/lib/taskwarrior-web/services/builder/base.rb +index 58d246e..8f716ac 100644 +--- a/lib/taskwarrior-web/services/builder/base.rb ++++ b/lib/taskwarrior-web/services/builder/base.rb +@@ -10,7 +10,7 @@ module TaskwarriorWeb::CommandBuilder::Base + :complete => ':id done', + :annotate => ':id annotate', + :denotate => ':id denotate', +- :projects => '_projects', ++ :projects => '_unique project', + :tags => '_tags', + :sync => 'sync' + } +@@ -21,7 +21,7 @@ + substitute_parts if @command_string =~ /:id/ + end + parse_params +- @built = "#{@command_string}#{@params}" ++ @built = "#{@params}#{@command_string}" + end + + def task_command +@@ -43,23 +43,23 @@ + + def parse_params + string = '' +- string << %( #{@params.delete(:description).shellescape}) if @params.has_key?(:description) ++ string << %(#{@params.delete(:description).shellescape} ) if @params.has_key?(:description) + + if tags = @params.delete(:tags) + tag_indicator = TaskwarriorWeb::Config.property('tag.indicator') || '+' +- tags.each { |tag| string << %( #{tag_indicator}#{tag.to_s.shellescape}) } ++ tags.each { |tag| string << %(#{tag_indicator}#{tag.to_s.shellescape} ) } + end + + if tags = @params.delete(:remove_tags) +- tags.each { |tag| string << %( -#{tag.to_s.shellescape}) } ++ tags.each { |tag| string << %(-#{tag.to_s.shellescape} ) } + end + + @params.each do |attr, value| + if @command != :update or attr != :uuid + if value.respond_to? :each +- value.each { |val| string << %( #{attr.to_s}:\\"#{val.to_s.shellescape}\\") } ++ value.each { |val| string << %(#{attr.to_s}:\\"#{val.to_s.shellescape}\\" ) } + else +- string << %( #{attr.to_s}:\\"#{value.to_s.shellescape}\\") ++ string << %(#{attr.to_s}:\\"#{value.to_s.shellescape}\\" ) + end + end + end +diff --git a/lib/taskwarrior-web/views/tasks/_form.erb b/lib/taskwarrior-web/views/tasks/_form.erb +index 789e7a1..fa08698 100644 +--- a/lib/taskwarrior-web/views/tasks/_form.erb ++++ b/lib/taskwarrior-web/views/tasks/_form.erb +@@ -1,14 +1,14 @@ +
    + +
    +- ++ +
    +
    + +
    + +
    +- ++ +
    +
    + +@@ -45,7 +45,7 @@ +
    + +
    +- ++ + Enter tags separated by commas or spaces (e.g. each, word will,be a tag) +
    +
    diff --git a/flakes/taskwarrior-web/flake.lock b/flakes/taskwarrior-web/flake.lock new file mode 100644 index 0000000..ce87931 --- /dev/null +++ b/flakes/taskwarrior-web/flake.lock @@ -0,0 +1,62 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "taskwarrior-web": "taskwarrior-web" + } + }, + "taskwarrior-web": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/taskwarrior-web/flake.nix b/flakes/taskwarrior-web/flake.nix new file mode 100644 index 0000000..b08290a --- /dev/null +++ b/flakes/taskwarrior-web/flake.nix @@ -0,0 +1,33 @@ +{ + description = "A web interface for the Taskwarrior todo application. Because being a neckbeard is only fun sometimes."; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixpkgs = { + url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742"; + flake = false; + }; + inputs.taskwarrior-web = { + url = "github:theunraveler/taskwarrior-web/a79cfe2b42791b62364118e58b21b892fff6ded8"; + flake = false; + }; + + outputs = { self, nixpkgs, taskwarrior-web, flake-utils }: flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + pkgs = import nixpkgs { inherit system; overlays = []; }; + inherit (pkgs) callPackage; + in rec { + packages.taskwarrior-web = callPackage ./. { src = taskwarrior-web; }; + defaultPackage = packages.taskwarrior-web; + legacyPackages.taskwarrior-web = packages.taskwarrior-web; + checks = { + build = defaultPackage; + }; + } + ) // rec { + overlays = { + taskwarrior-web = final: prev: { + taskwarrior-web = self.defaultPackage."${final.system}"; + }; + }; + overlay = overlays.taskwarrior-web; + }; +} diff --git a/flakes/taskwarrior-web/gemset.nix b/flakes/taskwarrior-web/gemset.nix new file mode 100644 index 0000000..35d13c6 --- /dev/null +++ b/flakes/taskwarrior-web/gemset.nix @@ -0,0 +1,567 @@ +{ + activesupport = { + dependencies = ["i18n" "multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0fyxqkkws4px4lzkbcqzp0bwai7nn7jk4p0bgfy0dny9cwm0qc9r"; + type = "gem"; + }; + version = "3.2.22.5"; + }; + blockenspiel = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1h701s45n5qprvcpc7fnr45n88p56x07pznkxqnhz1dbdbhb7xx8"; + type = "gem"; + }; + version = "0.5.0"; + }; + coderay = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + concurrent-ruby = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1"; + type = "gem"; + }; + version = "1.1.4"; + }; + daemons = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w"; + type = "gem"; + }; + version = "1.3.1"; + }; + diff-lcs = { + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; + type = "gem"; + }; + version = "1.3.1"; + }; + eventmachine = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"; + type = "gem"; + }; + version = "1.2.7"; + }; + ffi = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p"; + type = "gem"; + }; + version = "1.10.0"; + }; + formatador = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + growl = { + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0s0y7maljnalpbv2q1j5j5hvb4wcc31y9af0n7x1q2l0fzxgc9n9"; + type = "gem"; + }; + version = "1.0.3"; + }; + guard = { + dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; + type = "gem"; + }; + version = "2.15.0"; + }; + guard-bundler = { + dependencies = ["guard" "guard-compat"]; + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0lji8f8w7y4prmpr2lqmlljvkqgkgnlsiwqgwvq7b1y3sxlsvy62"; + type = "gem"; + }; + version = "2.2.1"; + }; + guard-compat = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; + type = "gem"; + }; + version = "1.2.1"; + }; + guard-rspec = { + dependencies = ["guard" "guard-compat" "rspec"]; + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; + type = "gem"; + }; + version = "4.7.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3"; + type = "gem"; + }; + version = "0.9.5"; + }; + json = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5"; + type = "gem"; + }; + version = "1.8.6"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; + type = "gem"; + }; + version = "3.1.5"; + }; + lumberjack = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; + type = "gem"; + }; + version = "1.0.13"; + }; + method_source = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + mini_portile2 = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"; + type = "gem"; + }; + version = "2.4.0"; + }; + multi_json = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + mustermann = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1"; + type = "gem"; + }; + version = "1.0.3"; + }; + nenv = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; + type = "gem"; + }; + version = "0.3.0"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "09zll7c6j7xr6wyvh5mm5ncj6pkryp70ybcsxdbw1nyphx5dh184"; + type = "gem"; + }; + version = "1.10.1"; + }; + notiffany = { + dependencies = ["nenv" "shellany"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; + type = "gem"; + }; + version = "0.1.1"; + }; + parseconfig = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0br2g9k6zc4ygah52aa8cwvpnnkszia29bnvnr8bhpk3rdzi2vmq"; + type = "gem"; + }; + version = "1.0.8"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + rack = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-flash3 = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0rim9afrns6s8zc4apiymncysyvijpdg18k57kdpz66p55jf4mqz"; + type = "gem"; + }; + version = "1.0.5"; + }; + rack-protection = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk"; + type = "gem"; + }; + version = "2.0.5"; + }; + rack-test = { + dependencies = ["rack"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rake = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b"; + type = "gem"; + }; + version = "10.5.0"; + }; + rb-fsevent = { + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4"; + type = "gem"; + }; + version = "0.10.0"; + }; + rinku = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1smkk299v18brk98gqbdnqrfwm3143kikl30scidqb5j3pzlbz91"; + type = "gem"; + }; + version = "2.0.5"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + groups = ["development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "14q3hxvngk4ks8h41yw50d5fqbf2dhzwi9rz5ccxvh5a53ak2as3"; + type = "gem"; + }; + version = "2.99.0"; + }; + rspec-core = { + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1wwz21lcz2lwd2jcp2pvq7n1677v23acf7wxsyszp8msb47mw38i"; + type = "gem"; + }; + version = "2.99.2"; + }; + rspec-expectations = { + dependencies = ["diff-lcs"]; + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "11a5pph3anp4xr591dnlcy8xfkdf54qi2lvg4ykpqhxk37si1py3"; + type = "gem"; + }; + version = "2.99.2"; + }; + rspec-html-matchers = { + dependencies = ["nokogiri" "rspec"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "148grzvk0cvh24avhl0shjzz7ldhj138svf48pc5h1fdsb0pnqcv"; + type = "gem"; + }; + version = "0.5.0"; + }; + rspec-mocks = { + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0bzhqahbiswq41nqi6y2dka1k42n0hl14jb6bldb206zp4hikz8r"; + type = "gem"; + }; + version = "2.99.4"; + }; + ruby_dep = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; + type = "gem"; + }; + version = "1.5.0"; + }; + shellany = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; + type = "gem"; + }; + version = "0.0.1"; + }; + simple-navigation = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "08a2s18an3br3xj5j86r33q0hrkai0y157xg67h1khdskb08yylk"; + type = "gem"; + }; + version = "4.0.5"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sinatra = { + dependencies = ["mustermann" "rack" "rack-protection" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1gasgn5f15myv08k10i16p326pchxjsy37pgqfw0xm66kcc5d7ry"; + type = "gem"; + }; + version = "2.0.5"; + }; + sinatra-simple-navigation = { + dependencies = ["simple-navigation" "sinatra"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1gishxd23qw6bwsk7fkagkfc7ihqyvvvb98j9bmwc6wwpsfs4prs"; + type = "gem"; + }; + version = "4.1.0"; + }; + taskwarrior-web = { + dependencies = ["activesupport" "json" "parseconfig" "rack-flash3" "rinku" "sinatra" "sinatra-simple-navigation" "vegas" "versionomy"]; + groups = ["default"]; + platforms = []; + bundledByPath = true; + path = ./.; + source = { + path = ./.; + type = "path"; + }; + version = "1.1.12"; + }; + thin = { + dependencies = ["daemons" "eventmachine" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f"; + type = "gem"; + }; + version = "1.7.2"; + }; + thor = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29"; + type = "gem"; + }; + version = "0.20.3"; + }; + tilt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz"; + type = "gem"; + }; + version = "2.0.9"; + }; + vegas = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0kzv0v1zb8vvm188q4pqwahb6468bmiamn6wpsbiq6r5i69s1bs5"; + type = "gem"; + }; + version = "0.1.11"; + }; + versionomy = { + dependencies = ["blockenspiel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0i0l4pzrl1vyp4lpg2cxhgkk56spki3lld943d6h7168fj8qyv33"; + type = "gem"; + }; + version = "0.5.0"; + }; +} diff --git a/flakes/taskwarrior-web/thin.patch b/flakes/taskwarrior-web/thin.patch new file mode 100644 index 0000000..a7df3e3 --- /dev/null +++ b/flakes/taskwarrior-web/thin.patch @@ -0,0 +1,23 @@ +diff --git a/Gemfile b/Gemfile +index 8544e15..9c4279c 100644 +--- a/Gemfile ++++ b/Gemfile +@@ -3,6 +3,8 @@ source "http://rubygems.org" + # Specify your gem's dependencies in taskwarrior-web.gemspec + gemspec + ++gem 'thin' ++ + group :local do + gem 'rb-fsevent', :require => false + gem 'growl', :require => false +diff --git a/config.ru b/config.ru +index c3050c6..52387d8 100644 +--- a/config.ru ++++ b/config.ru +@@ -1,5 +1,4 @@ + require File.join(File.dirname(__FILE__), 'lib', 'taskwarrior-web') + +-disable :run + TaskwarriorWeb::App.set({ :environment => :production }) + run TaskwarriorWeb::App diff --git a/lib/default.nix b/lib/default.nix deleted file mode 100644 index 7b392f1..0000000 --- a/lib/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ pkgs }: -with pkgs; -rec { - flakeCompat = import ./flake-compat.nix; - nodeEnv = import ./node-env.nix; - - fetchedGithub = path: - let - json = lib.importJSON path; - in rec { - version = json.tag; - pname = json.meta.name; - name = "${pname}-${version}"; - src = fetchFromGitHub json.github; - }; -} // (if builtins.pathExists ./private then callPackage ./private {} else {}) diff --git a/lib/flake-compat-patched.nix b/lib/flake-compat-patched.nix deleted file mode 100644 index 217a99f..0000000 --- a/lib/flake-compat-patched.nix +++ /dev/null @@ -1,190 +0,0 @@ -# Compatibility function to allow flakes to be used by -# non-flake-enabled Nix versions. Given a source tree containing a -# 'flake.nix' and 'flake.lock' file, it fetches the flake inputs and -# calls the flake's 'outputs' function. It then returns an attrset -# containing 'defaultNix' (to be used in 'default.nix'), 'shellNix' -# (to be used in 'shell.nix'). - -{ src, system ? builtins.currentSystem or "unknown-system" }: - -let - - lockFilePath = src + "/flake.lock"; - - lockFile = builtins.fromJSON (builtins.readFile lockFilePath); - - fetchTree = - info: - if info.type == "github" then - { outPath = fetchTarball "https://api.${info.host or "github.com"}/repos/${info.owner}/${info.repo}/tarball/${info.rev}"; - rev = info.rev; - shortRev = builtins.substring 0 7 info.rev; - lastModified = info.lastModified; - lastModifiedDate = formatSecondsSinceEpoch info.lastModified; - narHash = info.narHash; - } - else if info.type == "git" then - { outPath = - builtins.fetchGit - ({ url = info.url; } - // (if info ? rev then { inherit (info) rev; } else {}) - // (if info ? ref then { inherit (info) ref; } else {}) - ); - lastModified = info.lastModified; - lastModifiedDate = formatSecondsSinceEpoch info.lastModified; - narHash = info.narHash; - } // (if info ? rev then { - rev = info.rev; - shortRev = builtins.substring 0 7 info.rev; - } else { - }) - else if info.type == "path" then - { outPath = builtins.path { path = - if builtins.substring 0 1 info.path == "." - then builtins.toString src + "/" + info.path - else info.path; - }; - narHash = info.narHash; - } - else if info.type == "tarball" then - { outPath = fetchTarball info.url; - narHash = info.narHash; - } - else if info.type == "gitlab" then - { inherit (info) rev narHash lastModified; - outPath = fetchTarball "https://${info.host or "gitlab.com"}/api/v4/projects/${info.owner}%2F${info.repo}/repository/archive.tar.gz?sha=${info.rev}"; - shortRev = builtins.substring 0 7 info.rev; - } - else - # FIXME: add Mercurial, tarball inputs. - throw "flake input has unsupported input type '${info.type}'"; - - callFlake4 = flakeSrc: locks: - let - flake = import (flakeSrc + "/flake.nix"); - - inputs = builtins.mapAttrs (n: v: - if v.flake or true - then callFlake4 (fetchTree (v.locked // v.info)) v.inputs - else fetchTree (v.locked // v.info)) locks; - - outputs = flakeSrc // (flake.outputs (inputs // {self = outputs;})); - in - assert flake.edition == 201909; - outputs; - - callLocklessFlake = flakeSrc: - let - flake = import (flakeSrc + "/flake.nix"); - outputs = flakeSrc // (flake.outputs ({ self = outputs; })); - in outputs; - - rootSrc = let - # Try to clean the source tree by using fetchGit, if this source - # tree is a valid git repository. - tryFetchGit = src: - if isGit && !isShallow - then - let res = builtins.fetchGit src; - in if res.rev == "0000000000000000000000000000000000000000" then removeAttrs res ["rev" "shortRev"] else res - else { outPath = src; }; - # NB git worktrees have a file for .git, so we don't check the type of .git - isGit = builtins.pathExists (src + "/.git"); - isShallow = builtins.pathExists (src + "/.git/shallow"); - - in - { lastModified = 0; lastModifiedDate = formatSecondsSinceEpoch 0; } - // (if src ? outPath then src else tryFetchGit src); - - # Format number of seconds in the Unix epoch as %Y%m%d%H%M%S. - formatSecondsSinceEpoch = t: - let - rem = x: y: x - x / y * y; - days = t / 86400; - secondsInDay = rem t 86400; - hours = secondsInDay / 3600; - minutes = (rem secondsInDay 3600) / 60; - seconds = rem t 60; - - # Courtesy of https://stackoverflow.com/a/32158604. - z = days + 719468; - era = (if z >= 0 then z else z - 146096) / 146097; - doe = z - era * 146097; - yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; - y = yoe + era * 400; - doy = doe - (365 * yoe + yoe / 4 - yoe / 100); - mp = (5 * doy + 2) / 153; - d = doy - (153 * mp + 2) / 5 + 1; - m = mp + (if mp < 10 then 3 else -9); - y' = y + (if m <= 2 then 1 else 0); - - pad = s: if builtins.stringLength s < 2 then "0" + s else s; - in "${toString y'}${pad (toString m)}${pad (toString d)}${pad (toString hours)}${pad (toString minutes)}${pad (toString seconds)}"; - - allNodes = - builtins.mapAttrs - (key: node: - let - sourceInfo = - if key == lockFile.root - then rootSrc - else fetchTree (node.info or {} // removeAttrs node.locked ["dir"]); - - subdir = if key == lockFile.root then "" else node.locked.dir or ""; - - flake = import (sourceInfo + (if subdir != "" then "/" else "") + subdir + "/flake.nix"); - - inputs = builtins.mapAttrs - (inputName: inputSpec: allNodes.${resolveInput inputSpec}) - (node.inputs or {}); - - # Resolve a input spec into a node name. An input spec is - # either a node name, or a 'follows' path from the root - # node. - resolveInput = inputSpec: - if builtins.isList inputSpec - then getInputByPath lockFile.root inputSpec - else inputSpec; - - # Follow an input path (e.g. ["dwarffs" "nixpkgs"]) from the - # root node, returning the final node. - getInputByPath = nodeName: path: - if path == [] - then nodeName - else - getInputByPath - # Since this could be a 'follows' input, call resolveInput. - (resolveInput lockFile.nodes.${nodeName}.inputs.${builtins.head path}) - (builtins.tail path); - - outputs = flake.outputs (inputs // { self = result; }); - - result = outputs // sourceInfo // { inherit inputs; inherit outputs; inherit sourceInfo; }; - in - if node.flake or true then - assert builtins.isFunction flake.outputs; - result - else - sourceInfo - ) - lockFile.nodes; - - result = - if !(builtins.pathExists lockFilePath) - then callLocklessFlake rootSrc - else if lockFile.version == 4 - then callFlake4 rootSrc (lockFile.inputs) - else if lockFile.version >= 5 && lockFile.version <= 7 - then allNodes.${lockFile.root} - else throw "lock file '${lockFilePath}' has unsupported version ${toString lockFile.version}"; - -in - rec { - defaultNix = - result - // (if result ? defaultPackage.${system} then { default = result.defaultPackage.${system}; } else {}); - - shellNix = - defaultNix - // (if result ? devShell.${system} then { default = result.devShell.${system}; } else {}); - } diff --git a/lib/flake-compat.nix b/lib/flake-compat.nix deleted file mode 100644 index d3daa10..0000000 --- a/lib/flake-compat.nix +++ /dev/null @@ -1,8 +0,0 @@ -src: -(import ./flake-compat-patched.nix { inherit src; }).defaultNix -# Until https://github.com/edolstra/flake-compat/pull/18 is accepted -# (import ( -# fetchTarball { -# url = "https://github.com/edolstra/flake-compat/archive/99f1c2157fba4bfe6211a321fd0ee43199025dbf.tar.gz"; -# sha256 = "0x2jn3vrawwv9xp15674wjz9pixwjyj3j771izayl962zziivbx2"; -# }) { inherit src; }).defaultNix diff --git a/lib/node-env.nix b/lib/node-env.nix deleted file mode 100644 index 720e0cc..0000000 --- a/lib/node-env.nix +++ /dev/null @@ -1,542 +0,0 @@ -# This file originates from node2nix - -{stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}: - -let - python = if nodejs ? python then nodejs.python else python2; - - # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise - tarWrapper = runCommand "tarWrapper" {} '' - mkdir -p $out/bin - - cat > $out/bin/tar <> $out/nix-support/hydra-build-products - ''; - }; - - includeDependencies = {dependencies}: - stdenv.lib.optionalString (dependencies != []) - (stdenv.lib.concatMapStrings (dependency: - '' - # Bundle the dependencies of the package - mkdir -p node_modules - cd node_modules - - # Only include dependencies if they don't exist. They may also be bundled in the package. - if [ ! -e "${dependency.name}" ] - then - ${composePackage dependency} - fi - - cd .. - '' - ) dependencies); - - # Recursively composes the dependencies of a package - composePackage = { name, packageName, src, dependencies ? [], ... }@args: - '' - DIR=$(pwd) - cd $TMPDIR - - unpackFile ${src} - - # Make the base dir in which the target dependency resides first - mkdir -p "$(dirname "$DIR/${packageName}")" - - if [ -f "${src}" ] - then - # Figure out what directory has been unpacked - packageDir="$(find . -maxdepth 1 -type d | tail -1)" - - # Restore write permissions to make building work - find "$packageDir" -type d -print0 | xargs -0 chmod u+x - chmod -R u+w "$packageDir" - - # Move the extracted tarball into the output folder - mv "$packageDir" "$DIR/${packageName}" - elif [ -d "${src}" ] - then - # Get a stripped name (without hash) of the source directory. - # On old nixpkgs it's already set internally. - if [ -z "$strippedName" ] - then - strippedName="$(stripHash ${src})" - fi - - # Restore write permissions to make building work - chmod -R u+w "$strippedName" - - # Move the extracted directory into the output folder - mv "$strippedName" "$DIR/${packageName}" - fi - - # Unset the stripped name to not confuse the next unpack step - unset strippedName - - # Include the dependencies of the package - cd "$DIR/${packageName}" - ${includeDependencies { inherit dependencies; }} - cd .. - ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} - ''; - - pinpointDependencies = {dependencies, production}: - let - pinpointDependenciesFromPackageJSON = writeTextFile { - name = "pinpointDependencies.js"; - text = '' - var fs = require('fs'); - var path = require('path'); - - function resolveDependencyVersion(location, name) { - if(location == process.env['NIX_STORE']) { - return null; - } else { - var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json"); - - if(fs.existsSync(dependencyPackageJSON)) { - var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON)); - - if(dependencyPackageObj.name == name) { - return dependencyPackageObj.version; - } - } else { - return resolveDependencyVersion(path.resolve(location, ".."), name); - } - } - } - - function replaceDependencies(dependencies) { - if(typeof dependencies == "object" && dependencies !== null) { - for(var dependency in dependencies) { - var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency); - - if(resolvedVersion === null) { - process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n"); - } else { - dependencies[dependency] = resolvedVersion; - } - } - } - } - - /* Read the package.json configuration */ - var packageObj = JSON.parse(fs.readFileSync('./package.json')); - - /* Pinpoint all dependencies */ - replaceDependencies(packageObj.dependencies); - if(process.argv[2] == "development") { - replaceDependencies(packageObj.devDependencies); - } - replaceDependencies(packageObj.optionalDependencies); - - /* Write the fixed package.json file */ - fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2)); - ''; - }; - in - '' - node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"} - - ${stdenv.lib.optionalString (dependencies != []) - '' - if [ -d node_modules ] - then - cd node_modules - ${stdenv.lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies} - cd .. - fi - ''} - ''; - - # Recursively traverses all dependencies of a package and pinpoints all - # dependencies in the package.json file to the versions that are actually - # being used. - - pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args: - '' - if [ -d "${packageName}" ] - then - cd "${packageName}" - ${pinpointDependencies { inherit dependencies production; }} - cd .. - ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} - fi - ''; - - # Extract the Node.js source code which is used to compile packages with - # native bindings - nodeSources = runCommand "node-sources" {} '' - tar --no-same-owner --no-same-permissions -xf ${nodejs.src} - mv node-* $out - ''; - - # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty) - addIntegrityFieldsScript = writeTextFile { - name = "addintegrityfields.js"; - text = '' - var fs = require('fs'); - var path = require('path'); - - function augmentDependencies(baseDir, dependencies) { - for(var dependencyName in dependencies) { - var dependency = dependencies[dependencyName]; - - // Open package.json and augment metadata fields - var packageJSONDir = path.join(baseDir, "node_modules", dependencyName); - var packageJSONPath = path.join(packageJSONDir, "package.json"); - - if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored - console.log("Adding metadata fields to: "+packageJSONPath); - var packageObj = JSON.parse(fs.readFileSync(packageJSONPath)); - - if(dependency.integrity) { - packageObj["_integrity"] = dependency.integrity; - } else { - packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads. - } - - packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories. - fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2)); - } - - // Augment transitive dependencies - if(dependency.dependencies !== undefined) { - augmentDependencies(packageJSONDir, dependency.dependencies); - } - } - } - - if(fs.existsSync("./package-lock.json")) { - var packageLock = JSON.parse(fs.readFileSync("./package-lock.json")); - - if(packageLock.lockfileVersion !== 1) { - process.stderr.write("Sorry, I only understand lock file version 1!\n"); - process.exit(1); - } - - if(packageLock.dependencies !== undefined) { - augmentDependencies(".", packageLock.dependencies); - } - } - ''; - }; - - # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes - reconstructPackageLock = writeTextFile { - name = "addintegrityfields.js"; - text = '' - var fs = require('fs'); - var path = require('path'); - - var packageObj = JSON.parse(fs.readFileSync("package.json")); - - var lockObj = { - name: packageObj.name, - version: packageObj.version, - lockfileVersion: 1, - requires: true, - dependencies: {} - }; - - function augmentPackageJSON(filePath, dependencies) { - var packageJSON = path.join(filePath, "package.json"); - if(fs.existsSync(packageJSON)) { - var packageObj = JSON.parse(fs.readFileSync(packageJSON)); - dependencies[packageObj.name] = { - version: packageObj.version, - integrity: "sha1-000000000000000000000000000=", - dependencies: {} - }; - processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies); - } - } - - function processDependencies(dir, dependencies) { - if(fs.existsSync(dir)) { - var files = fs.readdirSync(dir); - - files.forEach(function(entry) { - var filePath = path.join(dir, entry); - var stats = fs.statSync(filePath); - - if(stats.isDirectory()) { - if(entry.substr(0, 1) == "@") { - // When we encounter a namespace folder, augment all packages belonging to the scope - var pkgFiles = fs.readdirSync(filePath); - - pkgFiles.forEach(function(entry) { - if(stats.isDirectory()) { - var pkgFilePath = path.join(filePath, entry); - augmentPackageJSON(pkgFilePath, dependencies); - } - }); - } else { - augmentPackageJSON(filePath, dependencies); - } - } - }); - } - } - - processDependencies("node_modules", lockObj.dependencies); - - fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2)); - ''; - }; - - # Builds and composes an NPM package including all its dependencies - buildNodePackage = - { name - , packageName - , version - , dependencies ? [] - , buildInputs ? [] - , production ? true - , npmFlags ? "" - , dontNpmInstall ? false - , bypassCache ? false - , preRebuild ? "" - , dontStrip ? true - , unpackPhase ? "true" - , buildPhase ? "true" - , ... }@args: - - let - forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; - extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ]; - in - stdenv.mkDerivation ({ - name = "node-${name}-${version}"; - buildInputs = [ tarWrapper python nodejs ] - ++ stdenv.lib.optional (stdenv.isLinux) utillinux - ++ stdenv.lib.optional (stdenv.isDarwin) libtool - ++ buildInputs; - - inherit dontStrip; # Stripping may fail a build for some package deployments - inherit dontNpmInstall preRebuild unpackPhase buildPhase; - - compositionScript = composePackage args; - pinpointDependenciesScript = pinpointDependenciesOfPackage args; - - passAsFile = [ "compositionScript" "pinpointDependenciesScript" ]; - - installPhase = '' - # Create and enter a root node_modules/ folder - mkdir -p $out/lib/node_modules - cd $out/lib/node_modules - - # Compose the package and all its dependencies - source $compositionScriptPath - - # Pinpoint the versions of all dependencies to the ones that are actually being used - echo "pinpointing versions of dependencies..." - source $pinpointDependenciesScriptPath - - # Patch the shebangs of the bundled modules to prevent them from - # calling executables outside the Nix store as much as possible - patchShebangs . - - # Deploy the Node.js package by running npm install. Since the - # dependencies have been provided already by ourselves, it should not - # attempt to install them again, which is good, because we want to make - # it Nix's responsibility. If it needs to install any dependencies - # anyway (e.g. because the dependency parameters are - # incomplete/incorrect), it fails. - # - # The other responsibilities of NPM are kept -- version checks, build - # steps, postprocessing etc. - - export HOME=$TMPDIR - cd "${packageName}" - runHook preRebuild - - ${stdenv.lib.optionalString bypassCache '' - if [ ! -f package-lock.json ] - then - echo "No package-lock.json file found, reconstructing..." - node ${reconstructPackageLock} - fi - - node ${addIntegrityFieldsScript} - ''} - - npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild - - if [ "$dontNpmInstall" != "1" ] - then - # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. - rm -f npm-shrinkwrap.json - - npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install - fi - - # Create symlink to the deployed executable folder, if applicable - if [ -d "$out/lib/node_modules/.bin" ] - then - ln -s $out/lib/node_modules/.bin $out/bin - fi - - # Create symlinks to the deployed manual page folders, if applicable - if [ -d "$out/lib/node_modules/${packageName}/man" ] - then - mkdir -p $out/share - for dir in "$out/lib/node_modules/${packageName}/man/"* - do - mkdir -p $out/share/man/$(basename "$dir") - for page in "$dir"/* - do - ln -s $page $out/share/man/$(basename "$dir") - done - done - fi - - # Run post install hook, if provided - runHook postInstall - ''; - } // extraArgs); - - # Builds a development shell - buildNodeShell = - { name - , packageName - , version - , src - , dependencies ? [] - , buildInputs ? [] - , production ? true - , npmFlags ? "" - , dontNpmInstall ? false - , bypassCache ? false - , dontStrip ? true - , unpackPhase ? "true" - , buildPhase ? "true" - , ... }@args: - - let - forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; - - extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ]; - - nodeDependencies = stdenv.mkDerivation ({ - name = "node-dependencies-${name}-${version}"; - - buildInputs = [ tarWrapper python nodejs ] - ++ stdenv.lib.optional (stdenv.isLinux) utillinux - ++ stdenv.lib.optional (stdenv.isDarwin) libtool - ++ buildInputs; - - inherit dontStrip; # Stripping may fail a build for some package deployments - inherit dontNpmInstall unpackPhase buildPhase; - - includeScript = includeDependencies { inherit dependencies; }; - pinpointDependenciesScript = pinpointDependenciesOfPackage args; - - passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; - - installPhase = '' - mkdir -p $out/${packageName} - cd $out/${packageName} - - source $includeScriptPath - - # Create fake package.json to make the npm commands work properly - cp ${src}/package.json . - chmod 644 package.json - ${stdenv.lib.optionalString bypassCache '' - if [ -f ${src}/package-lock.json ] - then - cp ${src}/package-lock.json . - fi - ''} - - # Pinpoint the versions of all dependencies to the ones that are actually being used - echo "pinpointing versions of dependencies..." - cd .. - ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} - - source $pinpointDependenciesScriptPath - cd ${packageName} - - # Patch the shebangs of the bundled modules to prevent them from - # calling executables outside the Nix store as much as possible - patchShebangs . - - export HOME=$PWD - - ${stdenv.lib.optionalString bypassCache '' - if [ ! -f package-lock.json ] - then - echo "No package-lock.json file found, reconstructing..." - node ${reconstructPackageLock} - fi - - node ${addIntegrityFieldsScript} - ''} - - npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild - - ${stdenv.lib.optionalString (!dontNpmInstall) '' - # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. - rm -f npm-shrinkwrap.json - - npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install - ''} - - cd .. - ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} - - mv ${packageName} lib - ln -s $out/lib/node_modules/.bin $out/bin - ''; - } // extraArgs); - in - stdenv.mkDerivation { - name = "node-shell-${name}-${version}"; - - buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ buildInputs; - buildCommand = '' - mkdir -p $out/bin - cat > $out/bin/shell <> ${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" "/" "<title>"]; - _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" "/" "<title>"]; - _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" "/" "<title" ]; - - _webstatus_name = "I Learned website"; - _webstatus_url = "https://ilearned.eu.org/"; - }) - (serviceTemplate { - service_description = "I Learned gitea is up and running"; - check_command = [ "check_https" "git.ilearned.eu.org" "/" "<title" ]; - - _webstatus_name = "I Learned Git"; - _webstatus_url = "https://git.ilearned.eu.org/"; - }) - ]; -} diff --git a/modules/private/monitoring/objects_eldiron.nix b/modules/private/monitoring/objects_eldiron.nix deleted file mode 100644 index 75e7b0e..0000000 --- a/modules/private/monitoring/objects_eldiron.nix +++ /dev/null @@ -1,38 +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; - }; -in -{ - activatedPlugins = [ "emails" "postgresql" "zfs" ]; - service = [ - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; }; - service_description = "Postgresql replication for backup-2 is up to date"; - use = "local-service"; - check_command = ["check_postgresql_replication" "backup-2" "/run/postgresql" "5432"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "No ZFS pool is degraded"; - use = "local-service"; - check_command = ["check_zfs"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-email"; }; - service_description = "mailq is empty"; - use = "local-service"; - check_command = ["check_mailq"]; - } - (emailCheck "eldiron" hostFQDN // { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-email"; freshness_threshold = "1350"; }; - }) - ]; -} diff --git a/modules/private/monitoring/objects_master.nix b/modules/private/monitoring/objects_master.nix deleted file mode 100644 index 30bfe73..0000000 --- a/modules/private/monitoring/objects_master.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ config, ... }: -{ - contact = { - immae = config.myEnv.monitoring.contacts.immae // { - use = "generic-contact"; - contactgroups = "admins"; - host_notification_commands = "notify-host-by-email,notify-by-slack!$USER206$!$USER207$"; - service_notification_commands = "notify-service-by-email,notify-by-slack!$USER206$!$USER207$"; - }; - }; - command = { - check_passive = "$USER1$/check_dummy 3 \"Service result are stale\""; - }; - templates = { - service = { - external-passive-service = { - active_checks_enabled = "0"; - check_freshness = "1"; - 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 = "1"; - passive_checks_enabled = "1"; - process_perf_data = "1"; - retain_nonstatus_information = "1"; - retain_status_information = "1"; - retry_interval = "2"; - check_command = "check_passive"; - _webstatus_namespace = "immae"; - }; - }; - }; -} diff --git a/modules/private/monitoring/objects_monitoring-1.nix b/modules/private/monitoring/objects_monitoring-1.nix deleted file mode 100644 index 563be16..0000000 --- a/modules/private/monitoring/objects_monitoring-1.nix +++ /dev/null @@ -1,714 +0,0 @@ -{ config, pkgs, nodes, hostFQDN, emailCheck, lib, ... }: -{ - activatedPlugins = [ "dns" "ftp" "git" "http" "imap" "ovh" "tcp" ]; - host = { - # Dummy host for testing - # "dummy-host" = { - # alias = "dummy.host"; - # address = "dummy.host"; - # use = "linux-server"; - # check_command = "check_ok"; - # }; - }; - service = [ - # Dummy service for testing - # { - # service_description = "Dummy failing test"; - # host_name = "dummy-host"; - # use = "local-service"; - # check_interval = "0.3"; - # max_check_attempts = "1"; - # flap_detection_enabled = "0"; - # notification_interval = "0.1"; - # check_command = "check_critical"; - # } - - (emailCheck "monitoring-1" hostFQDN) - - { - service_description = "ftp has access to database for authentication"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_ftp_database"; - - servicegroups = "webstatus-remote-services"; - _webstatus_name = "FTP"; - _webstatus_url = "ftp.immae.eu"; - } - - { - service_description = "gitolite is working"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = "check_git"; - - servicegroups = "webstatus-remote-services"; - _webstatus_name = "Git"; - _webstatus_url = "git.immae.eu"; - } - - { - service_description = "postfix SSL is up to date"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_smtp"; - - servicegroups = "webstatus-ssl"; - _webstatus_name = "SMTP"; - _webstatus_url = "smtp.immae.eu"; - } - - { - service_description = "imap SSL is up to date"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = ["check_tcp_ssl" "993"]; - - servicegroups = "webstatus-ssl"; - _webstatus_name = "IMAP"; - _webstatus_url = "imap.immae.eu"; - } - - { - service_description = "imap connection works"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_imap_connection"; - - servicegroups = "webstatus-remote-services,webstatus-email"; - _webstatus_name = "IMAP"; - _webstatus_url = "imap.immae.eu"; - } - - # Third party services - { - service_description = "OVH account has enough sms"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_ovh_sms"; - - check_interval = "120"; - notification_interval = "1440"; - } - - # Backup services - # { - # service_description = "eriomem backup is up and not full"; - # host_name = "eldiron.immae.eu"; - # use = "external-service"; - # check_command = "check_backup_eriomem"; - - # check_interval = "120"; - # notification_interval = "1440"; - - # servicegroups = "webstatus-backup"; - # } - { - service_description = "ovh backup is up and not full"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_ok"; - - check_interval = "120"; - notification_interval = "1440"; - - servicegroups = "webstatus-backup"; - } - - # DNS services - { - service_description = "eldiron dns is active and authoritative for aten.pro"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "aten.pro" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "aten.pro"; - } - - { - service_description = "eldiron dns is active and authoritative for bouya.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "bouya.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "bouya.org"; - } - - { - service_description = "eldiron dns is active and authoritative for filedesreves.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "filedesreves.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "filedesreves.fr"; - } - - { - service_description = "eldiron dns is active and authoritative for ludivinecassal.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "ludivinecassal.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "ludivinecassal.com"; - } - - { - service_description = "eldiron dns is active and authoritative for icommandeur.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "icommandeur.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "icommandeur.org"; - } - - { - service_description = "eldiron dns is active and authoritative for immae.eu"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "immae.eu" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.eu"; - } - - { - service_description = "eldiron dns is active and authoritative for immae.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "immae.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.fr"; - } - - { - service_description = "eldiron dns is active and authoritative for piedsjaloux.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "piedsjaloux.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "piedsjaloux.fr"; - } - - { - service_description = "eldiron dns is active and authoritative for saison-photo.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "saison-photo.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "saison-photo.org"; - } - - { - service_description = "eldiron dns is active and authoritative for tellesflorian.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "tellesflorian.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "tellesflorian.com"; - } - - { - service_description = "eldiron dns is active and authoritative for capitaines.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "capitaines.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "capitaines.fr"; - } - - { - service_description = "cloudns dns is active and authoritative for aten.pro"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "aten.pro" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "aten.pro (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for bouya.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "bouya.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "bouya.org (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for filedesreves.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "filedesreves.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "filedesreves.fr (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for ludivinecassal.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "ludivinecassal.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "ludivinecassal.com (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for icommandeur.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "icommandeur.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "icommandeur.org (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for immae.eu"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "immae.eu" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.eu (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for immae.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "immae.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.fr (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for piedsjaloux.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "piedsjaloux.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "piedsjaloux.fr (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for tellesflorian.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "tellesflorian.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "tellesflorian.com (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for saison-photo.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "saison-photo.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "saison-photo.org (Secondary DNS ClouDNS)"; - } - - #### Web scenarios - { - service_description = "blog website is running on immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.immae.eu" "/blog/" "egrep -ri TODO /etc"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "Immae’s Blog"; - _webstatus_url = "https://www.immae.eu/blog"; - } - - { - service_description = "owncloud website is running on cloud.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "cloud.immae.eu" "/" "a safe home for all your data"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Nextcloud"; - _webstatus_url = "https://cloud.immae.eu"; - } - - { - service_description = "nextcloud website is running on nextcloud.4c.salle-s.org"; - host_name = "quatresaisons.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "nextcloud.4c.salle-s.org" "/" "a safe home for all your data"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Nextcloud"; - _webstatus_url = "https://nextcloud.4c.salle-s.org"; - } - - { - service_description = "davical website is running on dav.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "dav.immae.eu" "/davical/" "Log On Please"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Davical"; - _webstatus_url = "https://dav.immae.eu/davical"; - } - - { - service_description = "adminer website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https_auth" "tools.immae.eu" "/adminer/" "www.adminer.org"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Adminer"; - _webstatus_url = "https://tools.immae.eu/adminer/"; - } - - { - service_description = "ttrss website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/ttrss/" "<title>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/" "<title>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/" "<title>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/" "<title>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/" "<title>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/" "<title>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/" "<title>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" "<title>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/" "<title>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" "<title>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/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>.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" "/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>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" "/" "<title>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 <warnlevel> -c <critlevel>" - 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 <josef@friedrich.rocks> -# -# 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 <josef@friedrich.rocks> - -$SHORT_DESCRIPTION - - -Usage: check_zfs_snapshot <options> - -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 <dataset>" >&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/(?<ndpath>.*)".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='''<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> -<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>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 - - - -
    - Discourse capitaines -

    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 - - - -
    - 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

    -
    - - - - -
    - -
    - - - - 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 - - - - -
    -
    -
    - Anonymize - - -
    - -
    - -

    DMARC Reports

    -

    - No information could be fetched. If in non-anonymous mode you need to be logged-in -

    - - - - - - - - - - - - - - - -
    Start DateEnd DateDomainReporting OrganizationReport IDMessages
    -
    - - - - - - 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 - - - - - - -
    -
    -

    Password Change Page

    -'; - changePassword($_POST['username'],$_POST['oldPassword'],$_POST['newPassword1'],$_POST['newPassword2']); - global $message_css; - if ($message_css == "yes") { - echo '
    '; - } else { - echo '
    '; - $message[] = "Your password was not changed."; - } - foreach ( $message as $one ) { echo "

    $one

    "; } - ?>
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - - 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

    - -
    - -
    - - -

    Clés enregistrées avec succès.

    - - -
    - - - $sshKey) : - ?> - - - - - - - - - - - - - - - - - - - -
    Description
    >
    - - - -
    - - -
    - - -
    -

    Login

    - - -

    - - - - - - - - - -
    - -
    - - - - 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

    -
      -
    • Choisir une ip : 2001:aaaa:b:cccc:d::xxxx:yyyy/96 (le préfixe 2001:aaaa:b:cccc:d est imposé). Choix uniquement sur le yyyy (n'importe quel nombre entre 1 et ffff), le xxxx est dépendant du domaine
    • -
    • M'envoyer le choix de l'ip
    • - -
    • Si on veut éviter de passer systématiquement par le serveur immae.eu (Par - défaut linux préfère l'ipv6 dès qu'il en a possibilité), modifier le fichier - /etc/gai.conf. Quelques lignes à décommenter, tout est déjà dans le fichier : -
      -(...)
      -#
      -precedence  ::1/128       50
      -precedence  ::/0          40
      -precedence  2002::/16     30
      -precedence ::/96          20
      -#precedence ::ffff:0:0/96  10
      -#
      -#    For sites which prefer IPv4 connections change the last line to
      -#
      -precedence ::ffff:0:0/96  100
      -(...)
      -
      -
    • -
    -
    - - 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 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 - 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"; - }; - }; - }; -} diff --git a/nix/README.md b/nix/README.md deleted file mode 100644 index 7bf996c..0000000 --- a/nix/README.md +++ /dev/null @@ -1,2 +0,0 @@ -This directory is handled by niv, but it prefers to have a directory -named "nix" diff --git a/nix/sources.json b/nix/sources.json deleted file mode 100644 index 1a1cf5a..0000000 --- a/nix/sources.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "buildbot-cours-deps": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Cours", - "rev": "33f139f2e2ea0a16b8ed813c5436e5a5bb506f6d", - "type": "git" - }, - "buildbot-cours-nixpkgs": { - "branch": "nixos-unstable", - "description": "Frozen nixpkgs snapshot for texlive", - "homepage": "https://github.com/NixOS/nixpkgs", - "owner": "NixOS", - "repo": "nixpkgs-channels", - "rev": "fce7562cf46727fdaf801b232116bc9ce0512049", - "sha256": "14rvi69ji61x3z88vbn17rg5vxrnw2wbnanxb7y0qzyqrj7spapx", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/fce7562cf46727fdaf801b232116bc9ce0512049.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "buildbot-denise-aventuriers-nixpkgs": { - "branch": "nixos-unstable", - "description": "Frozen nixpkgs snapshot for texlive", - "homepage": "https://github.com/NixOS/nixpkgs", - "owner": "NixOS", - "repo": "nixpkgs-channels", - "rev": "8e2b14aceb1d40c7e8b84c03a7c78955359872bb", - "sha256": "0zzjpd9smr7rxzrdf6raw9kbj42fbvafxb5bz36lcxgv290pgsm8", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/8e2b14aceb1d40c7e8b84c03a7c78955359872bb.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "buildbot-history-deps": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/History", - "rev": "5f2aae4f9c92107accfc6fb6db6cb3c1f97ed9dc", - "type": "git" - }, - "buildbot-normalesup-deps": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Projets/Sites/Normalesup", - "rev": "de294da4027e80a7b8bf7ec8c393ca0b60218575", - "type": "git" - }, - "buildbot-normalesup-nixpkgs": { - "description": "Frozen nixpkgs snapshot for texlive", - "revision": "173017.85f820d6e41", - "sha256": "0fs390gvz8d3n7v4zj538gf3n1b14sikbf0ijrxgxib5i0704mdb", - "type": "tarball", - "url": "https://releases.nixos.org/nixos/19.03/nixos-19.03.173017.85f820d6e41/nixexprs.tar.xz", - "url_template": "https://releases.nixos.org/nixos//nixos-./nixexprs.tar.xz", - "version": "19.03" - }, - "buildbot-plugin-buildslist": { - "ref": "master", - "repo": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist", - "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", - "type": "git", - "version": "f1d42ba-master" - }, - "home-manager": { - "branch": "master", - "description": "Manage a user environment using Nix", - "homepage": "https://rycee.gitlab.io/home-manager/", - "owner": "rycee", - "repo": "home-manager", - "rev": "6cf6b587b575493e7718bf08b209013d7dcf4d58", - "sha256": "0666ayxazbphjn5xcrczv8m7k2q62k224fvf0kz1lx9qjn93wkvr", - "type": "tarball", - "url": "https://github.com/rycee/home-manager/archive/6cf6b587b575493e7718bf08b209013d7dcf4d58.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "niv": { - "branch": "master", - "description": "Easy dependency management for Nix projects", - "homepage": "https://github.com/nmattia/niv", - "owner": "nmattia", - "repo": "niv", - "rev": "372f96bff217a7a019de27667d04118cffa9841b", - "sha256": "1l0z6162zw60pdcdj03aq64qgf1vyzmf24i9pxca64i4sprl1b7p", - "type": "tarball", - "url": "https://github.com/nmattia/niv/archive/372f96bff217a7a019de27667d04118cffa9841b.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "nixpkgs": { - "branch": "nixos-unstable", - "description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", - "homepage": "https://github.com/NixOS/nixpkgs", - "owner": "NixOS", - "repo": "nixpkgs-channels", - "rev": "fce7562cf46727fdaf801b232116bc9ce0512049", - "sha256": "14rvi69ji61x3z88vbn17rg5vxrnw2wbnanxb7y0qzyqrj7spapx", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/fce7562cf46727fdaf801b232116bc9ce0512049.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "nixpkgs-home-manager": { - "branch": "nixos-unstable", - "description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", - "homepage": "https://github.com/NixOS/nixpkgs", - "owner": "NixOS", - "repo": "nixpkgs-channels", - "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", - "sha256": "1ak7jqx94fjhc68xh1lh35kh3w3ndbadprrb762qgvcfb8351x8v", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "nixpkgs-nix": { - "branch": "nixos-unstable", - "description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", - "homepage": "https://github.com/NixOS/nixpkgs", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "891f607d5301d6730cb1f9dcf3618bcb1ab7f10e", - "sha256": "1cr39f0sbr0h5d83dv1q34mcpwnkwwbdk5fqlyqp2mnxghzwssng", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/891f607d5301d6730cb1f9dcf3618bcb1ab7f10e.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "nixpkgs-nixops": { - "branch": "nixos-unstable", - "description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", - "homepage": "https://github.com/NixOS/nixpkgs", - "owner": "NixOS", - "repo": "nixpkgs-channels", - "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", - "sha256": "14q3kvnmgz19pgwyq52gxx0cs90ddf24pnplmq33pdddbb6c51zn", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/840c782d507d60aaa49aa9e3f6d0b0e780912742.tar.gz", - "url_template": "https://github.com///archive/.tar.gz" - }, - "webapps-landing": { - "ref": "gitolite_local/local_changes", - "repo": "https://git.immae.eu/github/bastienwirtz/homer.git", - "rev": "bb60c5b869931f305f15c5bfa9cdb3f68702f01f", - "type": "git", - "version": "e0a72b7-local" - }, - "webapps-surfer": { - "ref": "master", - "repo": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git", - "rev": "476177380452c9c7c5b1624805feedc824c5995e", - "type": "git", - "version": "4761773-master" - }, - "webapps-ttrss": { - "ref": "master", - "repo": "https://git.tt-rss.org/fox/tt-rss.git", - "rev": "986ca251f995f7754a0470d3e0c44538a545081f", - "type": "git", - "version": "986ca25-master" - }, - "websites-chloe-app": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Chloe", - "rev": "882f166999a59081ad896f26318e6a04db9f9f43", - "type": "git", - "version": "882f166-master" - }, - "websites-connexionswing-app": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Projets/Connexionswing", - "rev": "ed5874396d35766e0810a6d4e78e1a8f6b170835", - "type": "git", - "version": "ed58743-master" - }, - "websites-florian-app": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/florian_telles/stabilo", - "rev": "1793d5c7912d1b20ad1df1ac59be9d7f1220e919", - "type": "git", - "version": "1793d5c-master" - }, - "websites-isabelle-aten": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Aten", - "rev": "b99537fdad41291afb4f1bb8b2e2aa4081c71fae", - "type": "git", - "version": "b99537f-master" - }, - "websites-isabelle-iridologie": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Iridologie", - "rev": "2f2ec6b003f4de97e9f8651db540c9114ac877c2", - "type": "git", - "version": "2f2ec6b-master" - }, - "websites-ludivine-app": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Ludivine", - "rev": "eae633b7c5e92184b24141ebf267d51dbc5d2acc", - "type": "git", - "version": "0dacc32-master" - }, - "websites-piedsjaloux-app": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/Pieds_jaloux/NewSite", - "rev": "2b67b9897180af3d34f87648362337dbf3981158", - "type": "git", - "version": "2b67b98-master" - }, - "websites-richie-app": { - "ref": "master", - "repo": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Richie", - "rev": "2a09e29dd9fc4f6abc5add82744bedf1978a35d5", - "type": "git", - "version": "2a09e29-master" - } -} diff --git a/nix/sources.nix b/nix/sources.nix deleted file mode 100644 index 45c97d1..0000000 --- a/nix/sources.nix +++ /dev/null @@ -1,135 +0,0 @@ -# This file has been generated by Niv. - -let - - # - # The fetchers. fetch_ fetches specs of type . - # - - fetch_file = pkgs: spec: - if spec.builtin or true then - builtins_fetchurl { inherit (spec) url sha256; } - else - pkgs.fetchurl { inherit (spec) url sha256; }; - - fetch_tarball = pkgs: name: spec: - let - ok = str: ! builtins.isNull (builtins.match "[a-zA-Z0-9+-._?=]" str); - # sanitize the name, though nix will still fail if name starts with period - name' = stringAsChars (x: if ! ok x then "-" else x) "${name}-src"; - in - if spec.builtin or true then - builtins_fetchTarball { name = name'; inherit (spec) url sha256; } - else - pkgs.fetchzip { name = name'; inherit (spec) url sha256; }; - - fetch_git = spec: - builtins.fetchGit { url = spec.repo; inherit (spec) rev ref; }; - - fetch_builtin-tarball = name: throw - ''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. - $ niv modify ${name} -a type=tarball -a builtin=true''; - - fetch_builtin-url = name: throw - ''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. - $ niv modify ${name} -a type=file -a builtin=true''; - - # - # Various helpers - # - - # The set of packages used when specs are fetched using non-builtins. - mkPkgs = sources: - let - sourcesNixpkgs = - import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) {}; - hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; - hasThisAsNixpkgsPath = == ./.; - in - if builtins.hasAttr "nixpkgs" sources - then sourcesNixpkgs - else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then - import {} - else - abort - '' - Please specify either (through -I or NIX_PATH=nixpkgs=...) or - add a package called "nixpkgs" to your sources.json. - ''; - - # The actual fetching function. - fetch = pkgs: name: spec: - - if ! builtins.hasAttr "type" spec then - abort "ERROR: niv spec ${name} does not have a 'type' attribute" - else if spec.type == "file" then fetch_file pkgs spec - else if spec.type == "tarball" then fetch_tarball pkgs name spec - else if spec.type == "git" then fetch_git spec - else if spec.type == "builtin-tarball" then fetch_builtin-tarball name - else if spec.type == "builtin-url" then fetch_builtin-url name - else - abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; - - # Ports of functions for older nix versions - - # a Nix version of mapAttrs if the built-in doesn't exist - mapAttrs = builtins.mapAttrs or ( - f: set: with builtins; - listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) - ); - - # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 - range = first: last: if first > last then [] else builtins.genList (n: first + n) (last - first + 1); - - # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 - stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); - - # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269 - stringAsChars = f: s: concatStrings (map f (stringToCharacters s)); - concatStrings = builtins.concatStringsSep ""; - - # fetchTarball version that is compatible between all the versions of Nix - builtins_fetchTarball = { url, name, sha256 }@attrs: - let - inherit (builtins) lessThan nixVersion fetchTarball; - in - if lessThan nixVersion "1.12" then - fetchTarball { inherit name url; } - else - fetchTarball attrs; - - # fetchurl version that is compatible between all the versions of Nix - builtins_fetchurl = { url, sha256 }@attrs: - let - inherit (builtins) lessThan nixVersion fetchurl; - in - if lessThan nixVersion "1.12" then - fetchurl { inherit url; } - else - fetchurl attrs; - - # Create the final "sources" from the config - mkSources = config: - mapAttrs ( - name: spec: - if builtins.hasAttr "outPath" spec - then abort - "The values in sources.json should not have an 'outPath' attribute" - else - spec // { outPath = fetch config.pkgs name spec; } - ) config.sources; - - # The "config" used by the fetchers - mkConfig = - { sourcesFile ? ./sources.json - , sources ? builtins.fromJSON (builtins.readFile sourcesFile) - , pkgs ? mkPkgs sources - }: rec { - # The sources, i.e. the attribute set of spec name to spec - inherit sources; - - # The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers - inherit pkgs; - }; -in -mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); } diff --git a/nixops/.gitignore b/nixops/.gitignore deleted file mode 100644 index 2ea467b..0000000 --- a/nixops/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/state diff --git a/nixops/.sops.yaml b/nixops/.sops.yaml deleted file mode 100644 index 04826a2..0000000 --- a/nixops/.sops.yaml +++ /dev/null @@ -1,19 +0,0 @@ -keys: - - &Immae F82806FDA1BF5B9A1B3014E7C9FCED6CA6B79454 - # obtained with: ssh-keyscan eldiron | nix-shell -p ssh-to-age --run ssh-to-age - - &eldiron age1dxr5lhvtnjssfaqpnf6qx80h8gfwkxg3tdf35m6n9wljmk7wadfs3kmahj - - &monitoring-1 age1dn4lzhgxusqrpjjnzm7w8ml39ptf326htuzmpqdqs2gg3wq7cqzqxuvx8k - - &backup-2 age1kk3nr27qu42j28mcfdag5lhq0zu2pky7gfanvne8l4z2ctevjpgskmw0sr - - &dilion age1x49n6qa0arkdpq8530s7umgm0gqkq90exv4jep97q30rfnzknpaqate06a - - &quatresaisons age1yz8u6xvh2fltvyp96ep8crce3qx4tuceyhun6pwddfe0uvcrkarscxl7e7 -creation_rules: - - path_regex: vars.yml - key_groups: - - pgp: - - *Immae - age: - - *eldiron - - *monitoring-1 - - *backup-2 - - *dilion - - *quatresaisons diff --git a/nixops/Makefile b/nixops/Makefile deleted file mode 100644 index fb9da4c..0000000 --- a/nixops/Makefile +++ /dev/null @@ -1,102 +0,0 @@ -ifndef NIXOPS_ENV_LOADED - $(error "Please load environment with direnv") -endif - -###### Current channel information -nix-info: - @version=$$(nix eval --raw nixpkgs.lib.version) && \ - mainversion=$$(echo $$version | cut -d"." -f -2) && \ - echo "https://releases.nixos.org/nixos/$$mainversion/nixos-$$version/nixexprs.tar.xz" && \ - nix-instantiate --find-file nixpkgs -.PHONY: nix-info - -###### Initial setup -setup: - ./scripts/setup -.PHONY: setup - -###### Morph regular tasks -PROFILE=/nix/var/nix/profiles/per-user/immae/morph/immaeEu -TARGET ?= -MORPH_ARGS ?= -ifdef TARGET - # multiple targets: --on="{machine1,machine2}" (works with * glob too) - override MORPH_ARGS +=--on=$(TARGET) -endif -SSH_ARGS ?= - -edit_env: - $(EDITOR) secrets/environment.nix || true - git -C secrets add environment.nix || true - git -C secrets commit -m "Edit environment.nix" environment.nix || true - -edit_vars: - sops secrets/vars.yml || true - git -C secrets add vars.yml || true - git -C secrets commit -m "Edit password for vars.yml using sops." vars.yml || true - -ssh-eldiron: - ./scripts/with_env bash -c 'ssh -i $$SSH_IDENTITY_FILE root@eldiron $(SSH_ARGS)' - -ssh-dilion: - ./scripts/with_env bash -c 'ssh -i $$SSH_IDENTITY_FILE root@dilion $(SSH_ARGS)' - -ssh-backup-2: - ./scripts/with_env bash -c 'ssh -i $$SSH_IDENTITY_FILE root@backup-2 $(SSH_ARGS)' - -ssh-monitoring-1: - ./scripts/with_env bash -c 'ssh -i $$SSH_IDENTITY_FILE root@monitoring-1 $(SSH_ARGS)' - -ssh-4c: - ./scripts/with_env bash -c 'ssh -i $$SSH_IDENTITY_FILE root@quatresaisons $(SSH_ARGS)' - -debug: - ./scripts/with_env morph build --show-trace default.nix $(MORPH_ARGS) - -build: - ./scripts/with_env morph build default.nix $(MORPH_ARGS) - -dry-run: - ./scripts/with_env morph build --dry-run default.nix $(MORPH_ARGS) - -upload: - ./scripts/with_env morph push default.nix $(MORPH_ARGS) - -deploy: - ./scripts/with_env morph deploy default.nix switch --keep-result --upload-secrets $(MORPH_ARGS) - nix-env -p $(PROFILE) --set .gcroots/default.nix - -next-boot: - ./scripts/with_env morph deploy default.nix boot --keep-result --upload-secrets $(MORPH_ARGS) - nix-env -p $(PROFILE) --set .gcroots/default.nix - -deploy-reboot: - ./scripts/with_env morph deploy default.nix boot --reboot --upload-secrets $(MORPH_ARGS) - -.PHONY: ssh-eldiron ssh-dilion ssh-monitoring-1 ssh-backup-2 debug build upload deploy deploy-reboot - -###### Cleanup generations and garbage collection -GEN ?= "+3" - -list-generations: - nix-env -p $(PROFILE) --list-generations - $(MAKE) ssh-eldiron SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --list-generations" -.PHONY: list-generations - -delete-generations: - @echo "making sure that a complete build is done before cleaning up" - $(MAKE) build MORPH_ARGS=--keep-result - nix-env -p $(PROFILE) --delete-generations $(GEN) - $(MAKE) ssh-eldiron SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --delete-generations $(GEN)" - $(MAKE) ssh-dilion SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --delete-generations $(GEN)" - $(MAKE) ssh-backup-2 SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --delete-generations $(GEN)" - $(MAKE) ssh-monitoring-1 SSH_ARGS="nix-env -p /nix/var/nix/profiles/system --delete-generations $(GEN)" -.PHONY: delete-generations - -cleanup: delete-generations - nix-store --gc - $(MAKE) ssh-eldiron SSH_ARGS="nix-store --gc" - $(MAKE) ssh-dilion SSH_ARGS="nix-store --gc" - $(MAKE) ssh-backup-2 SSH_ARGS="nix-store --gc" - $(MAKE) ssh-monitoring-1 SSH_ARGS="nix-store --gc" -.PHONY: cleanup diff --git a/nixops/default.nix b/nixops/default.nix deleted file mode 100644 index 1241443..0000000 --- a/nixops/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - dilion = import ../modules/private/system/dilion.nix; - eldiron = import ../modules/private/system/eldiron.nix; - backup-2 = import ../modules/private/system/backup-2.nix; - monitoring-1 = import ../modules/private/system/monitoring-1.nix; - - quatresaisons = import ../modules/private/system/quatresaisons.nix; -} diff --git a/nixops/public_keys/Immae.pub b/nixops/public_keys/Immae.pub deleted file mode 100644 index dd42b04..0000000 --- a/nixops/public_keys/Immae.pub +++ /dev/null @@ -1,322 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBFvwA+gBEADlchQGPyI2M9RNRUsk8wsL9XLc8qAFWTYlVp5p7177ucxTQf6S -rny9yRCF69UqtE0ugwt+432sAAsDPi7BRA/JE95bIRBiewOiY1jYiivccP5dR6Jr -58HJ3QOHYPekqZIQhxzCWjdD2nRhhCbbxeWFJsJyaG8idGBiLkgNKxEEmqE5LIat -tzMpQFwOpL2FoYZ7+e4ZTMc+x+yqpOnGcQD1qwouqx68okSCjrVBWo5S2tK5AzzU -X8esBLNpgkhpUEZVltiNc4bmj7GZPdy4+mvS33/HQTed8YpatCFVWzcK+/uK0SYE -P8Hj1mguT9idBhAf+kv7qbTycrFkTBliP3oDNUoARWDmfQdV4nlxqW03QxUY18mL -KPByduK3hEXAZnD+/8QfVzbNVVP+70/jdSB+ckF88Li2g4bv/9uqjaObKVJB9ocG -EWslm1h7tvdCLBRgIl8b2+Zl0fComRAMuwUr+LYlWLnfygAi8Uy9hl7UcRWAAj99 -PG4ba0+y8eD8k1J2IE8HpeIzMzRwYTLtvLyJBvrKiQHJb1PGM5cS8iry81wjUPZm -dO5p5rbC8z99w7UNMaiz6iqAFAaDyLLsBZ5gWD+1ps9XxCA0zf28Z/Tc/Gj4QKAf -kpMd7lQ+gprsFyRtzcRD4WhsOL2ogKYFHYi4LE0GYduspGdQPlK/YfrKQwARAQAB -tB9Jc21hZWwgQm91eWEgPGlzbWFlbEBib3V5YS5vcmc+iQJRBBMBCAA7AhsDBQsJ -CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvw -BU4CGQEACgkQyfztbKa3lFR/kA//cHVrb/RRTLQZy514vMkOBKgAk+dj+j0lrgvJ -yR0JK1KjodduSoccPq7qRFAU+KVa3FsXMn8yY/lWaCXYJoF0DT5iEHsEuzJRc7Cn -N4aq2h42DD7z8dJCXZvtvJs+vZ7G/rlLl322TjLb2OyIybBEoPOmJl0dVG0wKBFC -r7EJmOKl3ytUWUpEbuxs1U/pP4GKrPT2CK3QcLF8JHKIPkEO347RorseeHcHhMxs -Bz5JXojts1NyLJh7lErT42atgEdTGzSmkkGm8OifZVIH2rgmnRsPHnCqrXYsa7dE -yPsC01Ns3DPYk4C5FtbpfiNvATbnkOicEwb2U55OpYUZLsFCKo7Bl+duJVY0nPRN -WiLCALPcdJL+a6hbh1hSuqHt5eNGxyrDtRPowXRTS1D4nTCgAh6+wpH47xXWEwXZ -mEnkXqHLIjsW4CSIz2gc+Bza40+wkWz6NQDEb3ncytDZu9vKK1CYwl7RGW4RFkAO -j3FWZvZp8ETPLNRVy64BhZzHY3uOxbYreE+T6JfiIZux8X+Bh4cPJHizfhSMLLS5 -kwABzalaTD33XnjKn5wQ/DfGJ+fGbF54fMlGFjne5VTNwY1ju2ieXTgVrUyzfKPF -96zcvnxo/MWwqcQ8+dXFCZjldP76puo1eVATEBeOCQs8Vj7eL9eN/eo+BfzhS3S8 -CfFFYWeIXQQQEQIAHRYhBNw4R0hwnSYZ/yhnIW0Mr/3bHP6QBQJb8AgDAAoJEG0M -r/3bHP6Q/TsAnA6vTjmrX4nY3QnevNrKefWaQvf3AJ0TALTqXhTcVYVLxfzRt/Qd -u5W2/rQvSXNtYWVsIEJvdXlhIChXb3JrKSA8aXNtYWVsLmJvdXlhQGZyZXRsaW5r -LmNvbT6JAk4EEwEIADgWIQT4KAb9ob9bmhswFOfJ/O1spreUVAUCW/AFCwIbAwUL -CQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ/O1spreUVKlBD/sE/eDbJtL8UKc6 -CN7zmA038RSjxlcJrMRoBoThCFKOFtBsYLPebnIkzCDiUwQJaIMYe2RNBHKKz0p+ -2Kvzf7q+xq8W1e72aK1DRhsBTL8/LA1kQkvh3GwMS8z3SOcbXLWqKQuQ7ztYReQG -wsT2/S8reVM96eV67K9vMHKMDF3NyYZewahX0I44YIbQJfLVG5elCkBrfHjGSeIt -tSAv56BhN8J8ky+9nGx5jwWmxc/4Oquyfe9Lf0NMTCjw1xess7UoHlzSMp57yF3T -AaqDcqD2Jdgr2meN9Yo4/Yb9dEvHFy34ppXYanX1nrHGev7YaaQWLoKLVZc3f6gR -+D7sEJUJm3IxO041CR7DBwQ1CQkx3sa66mcHxe+wchOoXBZdsqyl5Ds+zqh6eMyO -UiixDcXDxZuimEY0/+7XjlFjtzhGVNKsjV/Azh+Hx3GZnGHMVpTw73qQFHkWeDrX -FPUbinjtEVTxw0fS9PkDZB5ysgAWlXs2cqoNDMcbdyJn2xszbV5+vjlmcofsQZTr -PiX+hB6P5RQP5ogtnotvbkPDSfPfqdUk5HjGFrGX08FoP4rCromHvSL6Un2lP4I2 -mJbbQzBU/bQUGzfz6U6VEbUHtOL+7woGuXuzTYsRZ/O7/fKohyi/+qsmOozQpLFN -k5xocbF1PgpFphrKYpHaSkf6DS2/F4hdBBARAgAdFiEE3DhHSHCdJhn/KGchbQyv -/dsc/pAFAlvwCAQACgkQbQyv/dsc/pDXWACeKMbL/Dtifpd466TqQP8isfWedtIA -n2xbEmlpxG8yk0w4HQ4djwgY4RbutCpJc21hZWwgQm91eWEgPGlzbWFlbC5ib3V5 -YUBub3JtYWxlc3VwLm9yZz6JAk4EEwEIADgWIQT4KAb9ob9bmhswFOfJ/O1spreU -VAUCW/AEawIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ/O1spreUVMGJ -EAC5hKt5NCanRxEl13nQUu4+n05tdRl9C3sTczR8EUZ30zhpBV4chKgeJSD0r1VA -zBSQHMNzroGawaQn38qxFtbcSmkGRDd+0y798x1HFHp+UFiYOdQDQJVsyDuwjq4k -RF7zV+FBj0ffjn5JBy6R3wLmWCFxz1mPmkImdyyS8GEeifwTftC+SSotqfg1lh0K -C+DSQGYtPk0jLvxVPRllnjltDOSPUt9xRE785I6E9oyYrCa5Om51e0eEMzwpkl4e -QschAYILb6SNrVyEMRD5E3lJHD2r6dPvIPFNcLxIQuK/Kdco2jNq7dCL6ukdGI40 -j/oZi7XRrlFCQW321BuipJZ/7t9JWOXOrrEndQv+hOb6PeWkwF1rigjbQq+IipdJ -DUXGBfiIzlpJM5tLhs7BGfLxYNn09rOpkotXrdBzRO62lYyRdQepKpD33v96bQV2 -0w64U44+CxuicjGDw/6no54LY4J7bM1lLGwqvHSeqgYoc+Zs9WH95TNNSmaAHGSf -An4LpzW5nOXbq2rsWVbZpvsVHz3VmC9qmpsYl5tT/ninkLta3tN6TrYUFHXcDWz9 -K+HW+/oARzEmN8eg3iMmWtOnV59YEr/x2vvOHndguUL0tUpRjwuTunH9KOGZE0Kb -uI3ovgLLO2kCSGk4SdXlntu/eLq9FPYqlOpjM9CtLf9JdIhdBBARAgAdFiEE3DhH -SHCdJhn/KGchbQyv/dsc/pAFAlvwCAQACgkQbQyv/dsc/pCHCQCfdPdGx0FmknAs -rPvjuUmuCj9Q8xUAn32dsgQYTlgfTdwLSxWGj4mTD2h6tClJc21hZWwgQm91eWEg -PGJvdXlhQHBoYXJlLm5vcm1hbGVzdXAub3JnPokCTgQTAQgAOBYhBPgoBv2hv1ua -GzAU58n87Wymt5RUBQJb8ASdAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ -EMn87Wymt5RU58QQALMGlOJzcQj/arHezum5H/PiYIpZ1yY+QMCzpSgPdwupwawW -VN88aQRfU6k9xwmsU+Ghjreja09AuqYi/D2+61TM/Tmqi/9HdU6NRYw0hvaZnwFc -vudFBII2XrxmU5k9PnSR6Sq4uLUGkXmvhJddV0q+cjtif+vDi5pl9mqbWBQY8d9S -5Q6ZFZPeEeASUK7Xt/tSq9iXpb1tQsmEJ94Czl5G+gNFJcqj7nlHQ1/c9XeNsvJT -GZVLGM/cAZNzB6AC8Kz+iWUypFuXifC2PYGpJDJ8klqTmDQikGQtM1HMHda6rnwU -L7JIfbuwGbMk65CtG2YE8QqB+/GIfkzWySenmIrldn9Vp5EKB0DD529TyOwQWgzz -+HuVP/4QfkNRxNquWxlAPXmcNfV1SV+/Xn1KwSspb7QlAjiXXOL13J2dwYFpV+21 -vsSW5XqJXfWUU8d4YVOdq1kUTwLjWnWyxwtt8j68KSuTOT4JTA8oNXg87r0B4Fzr -6AoxCM8ePywm5IW55gNAwViTKWBAcNrcwRTP647oNOM5+8D7NZIBpnKffNc/S2S5 -iI1tmaM0yXavmCm0Hb7lkFIsxM2Y2lxwHexPck2ftPXIrjhPYLcFVBdLVx2V2yXe -cFW2vMGZiasVobFqqp1g8htmAlTkN0cTDY7l96wDuirC6OeCbVomEgxQEd0MiF0E -EBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/92xz+kHsv -AJ4+zdfjTdO1FUWb42bWdPQfiFe9nACeMIRp1Iu3tNVJkfS9CGGqhrChpfu0LUlz -bWFlbCBCb3V5YSA8aXNtYWVsLmJvdXlhLjA2QG5vcm1hbGVzdXAub3JnPokCTgQT -AQgAOBYhBPgoBv2hv1uaGzAU58n87Wymt5RUBQJb8ASsAhsDBQsJCAcCBhUKCQgL -AgQWAgMBAh4BAheAAAoJEMn87Wymt5RUxa8P/i7zdQ9i5BfWITbdyCgXNoQYIcE3 -J6lIa15eLUcfDcL707zOrUSbhSkthLjeqZoNRCalqjeDOdgCQC1PNoISdkMGd9PO -VOwS3G7Pjt4FSjPVHyw9+Su57pwTcLXBhEyBAkv+tx/QrB/UBCFzPUnsl71QH51y -T8+bNdOiBxssdgn/9IrObn7tu8xDf+d/yGsA493x+mxalai+fhd/t0yzQcdcTrvD -EKRxAaU8wXe8oSwcW5cRmXIi+N4aEnLRO/so9YDGf4z2FQVSL0ktoZYMqZ1ZvIb0 -MNCNl2NgNXThhrAPk9Rhs+S5nRzazJ+tS+D2S728EPpRHpUE43+vewtCdu5c5NWd -Lz88o/jxLwcNwQa2iJoFMyqr15lHt+vM7OyD9X650IJwQw24n4tF6TijzH5GhWcN -SnB7RpLSkftQldpK/zK+tmFH4vVpv+bI3JKAfzRga+5Fu42kB5uHVzXF3qMwYgEO -sRNL5d4xV4SATce1mb8vFpsQmGOWnZAcCaQYhLKfMl7zR5ukytTjf3hRMRH0GAjh -06QAoBMJZhWosYehPi1odjTngIf6hFOqA5prz8Cu/AFe/8aftp9UorJOekAj2io0 -CENRv21qrN8R4bNo04aTMD6WrY+mBL8MteR0ooD3ENQEAZ6UUyZwTzUJk2UUl+5M -ch/HgJ+rQozmRGYeiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AI -BAAKCRBtDK/92xz+kPsmAJ4wGQ0Hly2eTVzsU8Ht4609Q5kf2wCdHGuu863a0GHv -uUdEokzQEsumYPG0OElzbWFlbCBCb3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVy -ZSkgPGlfYm91eWFAeWFob28uZnI+iQJOBBMBCAA4FiEE+CgG/aG/W5obMBTnyfzt -bKa3lFQFAlvwBMkCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQyfztbKa3 -lFQTlxAAjbuDy3prdEBNMYfi/870MO5eeDOCMtiDJDae4fQjj2NANjeuDGNP659B -/k9uS7o5nrWB7E6rdG4a1J+Qzj5I775xTP/zVbrNSchcLwSoHMMXBm2IdbIanCX0 -JX+dRg2YX6yX+6ZmL8UaWRVICQ84ZxGtYHZ8o8hMCFOuxFklNjYFEPciO9M9m+rv -fUEihQgcBF7+x9KVntlxad61Aa9AzUJLULgY3snaZK687tHUq3yYwXpF9s1CuJ81 -SfZxH32dKqy+2cpJqwQ38BZrTUwjBxxIMR5TRC7h/O9aRIBKQZKlpLcmxWPv18i7 -DwWlrJVb2Sd2WUh+TwPNa7VQc3NjlGtu74SfZqmirE0FyuB86fnsQaF8zhJnRsqE -lagnLoW24PCvc8A9TK95tj+0JO8DIeM49Gg+Br/NBtRB8q5q/ICJOREber6Ke+/I -p90q5VkZafIgeuO+EkyQ6Dq+58NRqC2qEs209xnKOd6exxT+2tEzx6Hy0PKwaay3 -h8WzUamJOTqRv1WG4GmlCeRUQGx8BtdIAEMdww26cN8rmxh5Foh5CH+V75bcybkv -yH+FBDoKFYSpEPg0axHM/e13/nujgLNnSTHuMf7ILvpwoNkkIcQwSpH17B5hZdgl -y0xD7aIS5XU9OoP9mKs1unzUKerWQWY6CxgYOqpssyDTUG+fohuIXQQQEQIAHRYh -BNw4R0hwnSYZ/yhnIW0Mr/3bHP6QBQJb8AgEAAoJEG0Mr/3bHP6QFPAAn3DbFqHo -hjznqQvg15QjlGFaPJaaAJ4ps0+VWG9BN7UBQPG+fcCRwqLaVLQ0SXNtYWVsIEJv -dXlhIChEb24ndCBjb250YWN0IG1lIHRoZXJlKSA8Ym91eWFAa3RoLnNlPokCTgQT -AQgAOBYhBPgoBv2hv1uaGzAU58n87Wymt5RUBQJb8ATfAhsDBQsJCAcCBhUKCQgL -AgQWAgMBAh4BAheAAAoJEMn87Wymt5RU2vAP/12b6S0yJdZ1rgNLj+ZohY36PhCm -30/amkGPQp7HCBylYIRv+y5m4IdiqynzJoap547cFMWNsCyfyU2VKbcy1Uy44FCI -PCUcBME95jD1JWviINDKqLhglciKlJnWUhupiolqFcr2ro+rJVc/fBMWJoBjM5fJ -9eq1ge2LxuYKbu9cpSEtopk7ZBeo69khhrFACdZEqfJtW4qp0hEC0pAKLjN8LhpQ -EEVcq4zejksB+1e1qkuJ6be3/Q2Sj+1ijaJBElJIVJ8qyYs9XSlTlUA1USfy3Yqu -jOkFrIaycxYgKooFgwYfYXCniuqXWZ2geCm2IE90lanQC2w7ZDN/JGwwVuAFVi4H -Mrx6x/yEreqy2AUMesB1eGxqQQG9cgssMLoMAN2IDDJ6FS+e0imWTTMZ6r3ou9W8 -+pFzSIT8LMnBNwp+RxrW3QzBs8sXDw5mS6WroiZMRlfJdA1sUPsrW0GV4/AFuEaK -PhCUvIvoh6zxYR0lA/gYqtszCHGzHeNLoczOhytUZM+KQpOtO3TSING/+o59HHuM -niD6k3mWcyk6MkSgIXquJRGUVGVFeLGlXXf7aWEkIOrXeqjBZpBchZUIxZfkg100 -xxmEgNVGG4vxB/UIGeVqV2S4JscJmCyDGs130nRp7Qp5YGfkaTLKyOdutssrqatP -m5Zcjl2VGr4Xt4uXiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AI -BAAKCRBtDK/92xz+kEViAJ9zBTPNNTYIxPxt8BEvb3pUDeZkiQCffsDGKi7kdlTj -oZ26K7yxdjexaYS0OUlzbWFlbCBCb3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVy -ZSkgPGJvdXlhQG1lY2gua3RoLnNlPokCTgQTAQgAOBYhBPgoBv2hv1uaGzAU58n8 -7Wymt5RUBQJb8ATwAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEMn87Wym -t5RUIzgP/0/7+y7UOgj4Yja6Lwa+Lm7ESRZnbVmR1ERSAa9RKKr8BbPT4KhgwN2R -x8c3CedFupS02sG1G57u+4qQbEeZylaMu6rusf/XyQ+esh06cRXfR7Vb2d14yFQg -xun9PgPR7jL0RiU2fsgvF6O+u9KwnGRmABZXILDBxzGZBXKBIkmqBM8+rBkXFVWc -gezZqD106KcuGewciuWM7bfyLj+2yV9GhvX8iRyptgkx9/CNEdOqQzKYEbXVTSkh -tUW4QUmNnIiTnD/pZ4kr3UsQV6y0GC1kf9G5EeQHbD+kVROFM0/sX6qGn99IeC+j -96MflMnKuXJeXjlxNFZIYPoolBAC7CvpRfdky5q0KB2xWh+x2jQbn3fPpa6lVZdQ -De14guXdcEsj1QVUMRL3wFCDwHIsi3gqOpCHdy5GmunFRNqUWmoGU+uHt3Kk031w -DJdQY4YP+8tFWLPG3vKoPSf5EcG2Mf0hZiWiiIAX8sVw13W+oDlAQ0HKah/uxV77 -gM2ScBiiiOr92JIf3ftq2AjMuzrGhpKME/wG2DdcOqmq7U+tcVbambSc7SVa5nTM -JXm8ZPOSH0Fax1PULPd3pyLLhfF0rnPiDLcVa6UzG1MaSJiGBurIf3D3OCHRjQQ6 -kVpF9VtXhWeziV8wkyt66HNcuqUs6HDBNkpxPTNacKcZmW8J/FlaiF0EEBECAB0W -IQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/92xz+kKOiAJ4shO9b -nZ2Nx9XzBBg4C0nUl05LyQCbBpk7t2NIPMKaNtjsPb+RV5HbiQa0O0lzbWFlbCBC -b3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVyZSkgPGlzbWFlbC5ib3V5YUBlbnMu -ZnI+iQJOBBMBCAA4FiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvwBZYCGwMFCwkI -BwIGFQoJCAsCBBYCAwECHgECF4AACgkQyfztbKa3lFRK1w//cqsweiuXGPepyn0t -AL/S/scM6r9IwcjD3HrZqmUNSDAqU6PJ0FFialOPuSQIyEvrpY1GL+TiVtnYyAit -sbotxNxNQFwiBvqchg6xd1ftpjJihuo7RysNdSNAnlOxFlEz9X+EGkRqq8rCTpoS -GA9+4uFyFKzfv9CDg7YUVX5GVsE3bsPWymfCW1boW0TQyL7xNrDPfzKpVRHFu7hi -5OghiTbHbifmIolj5Mo0hGuXxz26gFzrufCjgxK9ycW7LnHEnnK0zX8Qfueir8RV -EisuAXtKILgS5mmOj0ywsrva4Qtf5JW5SKymhgsKCWskfz0lq6S6ceIKaYBr4Syk -0MLI82M0zDfGlLuRP6yQ3DTiTC4lWfXHdjyd0w4SwcuAQPCWz34gtUEGfMTyrd6O -le6pYreL1NPzd/NakYsR1H1fsXVJkgpESktoDIkzooLmBV6Pjr+PEt4DvPZYqgKl -AyD+aZeZ5HlTZCLbN9O38nDttWdAvsGjq82qvNI8A/d2Vvz4L1ND6NT71+wtC2QT -a95epSBD64l/JtK99SW/HjLjyvV9O+Nu2p8ESTOEaQhyIudnWYU+er+Vwy7YtLvY -y8L9/Xu9KvlBMjHBXAAV047KwkIQNrNyoTla5yQFSpv57hFYbx5CKTprpsl9Ic4v -uPjC/GMgkAJ3yTwIgxa47hgUAtKIXQQQEQIAHRYhBNw4R0hwnSYZ/yhnIW0Mr/3b -HP6QBQJb8AgEAAoJEG0Mr/3bHP6QyCcAnRuTQIMOpwxbyzjj+t0C9GdNJYmGAJ9v -5c5kvNCFiJAFCbUD4OxJBNA28rQ9SXNtYWVsIEJvdXlhIChEb24ndCBjb250YWN0 -IG1lIHRoZXJlKSA8Ym91eWFAbWF0aC5qdXNzaWV1LmZyPokCTgQTAQgAOBYhBPgo -Bv2hv1uaGzAU58n87Wymt5RUBQJb8AW0AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4B -AheAAAoJEMn87Wymt5RUaT8P/2OvKAfgqu0zQX0JhKu/wd9AATVmLa8C48JPQMUn -5Z9dQyDcFyKKfKbGCz9B5jTOrzHNX0VJfpDujOTiPIk6ci0KqAJ3Fz0gdpxIcEoW -B2zg0nwDtGHsGMX8togpcbVgKqblp0XSsMAFV2FN5PsAnxkqdXPDmZ5iZSgs9roi -9nxHPavbcr1cSAjsiRoFxFudzo7Q0Z/KLRlTuTSAX6B+vRAeyRB4NcXThKYZlAi6 -cr+xXTvPFddiQZgVBT+ICZRQY0gwgHpQcj70fNx1w6tTHfThlxInojKGlreOZov9 -A4TVeex/QagVTsjRAQuZ9yLMkx7JxakAxBPZ/OHuv7/K1Qdx90AJ8zQZ6uOXpUNl -c2MDEBoTI/nbsgMeHI/Mj4ndxCBUMperZ1oCITl+AhaqEZ+LxTKyne41YJedlqjc -5xnUVigz4ajmZPYmbO6eRDxisx4fMG7hI2HnNWak2xBDVOp1z2aqZY0xsG7o697d -I9BeR9JxbIusx0Szq6GabwI5beEI1xLlT333Fe3XDtT0NIQQvW9byuYuyfp7H6Xm -hFj2ut7jVI9xG932sJ8ioRJGCK1UcGYEL0ei4YZRv+mVysEJFjki2nlxspnG4C/V -Q20jXnLAXOpKLiStkNJ15WsnzeoL4eq0AUOYMMmYKAquXXgpVs+xUDv6XathWA2v -oZkAiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/9 -2xz+kEBpAJ4x7hASmdnDcyFGTyuRHj6NwsDtNwCfRVfqoiRcGmvDRA8U25cPk5XT -ZYTRzlXOUwEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQEASABIAAD/2wBD -AAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcp -LDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy -MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACMAG4D -AREAAhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAABgcEBQACAwEI/8QAQhAAAQIE -BAIGBgYIBwEAAAAAAQIDAAQFEQYSITFBURMUImFxsQcjMoGRwUJDUmJjchUlNTaC -odHwFiYzc4OS4bL/xAAZAQADAQEBAAAAAAAAAAAAAAAAAQIDBAX/xAAgEQEBAAID -AQEBAQEBAAAAAAAAAQIRAyExQRJREyIy/9oADAMBAAIRAxEAPwB2JHaECEjiPGA4 -6GA3kMMgDy8AZAGQAp8XD/Nc5+VP/wAiJT9GeBv3e/5VQ4cEu8M3sAZAGQBFT7Qh -JSOUBt4DZYww8O0AeQB5cc4AgzNXk5dfRh1Dj1r9Ghab/wAzpE3KQFdiSotTGIph -4trQFpAFyDwtwjO8mqqYbHeByDQNCD61R0jTGyzcTrQmigyAMsYAyxgCtTNt5hqI -SUnrKOYgN06yjnCVtnWUc4BtyenmWGVuurSlttJUpR2AGpMGyKbEHpZm3ulapLSW -GTcIdWm6yOZ1sIj92q0Cf8UVp2Y6b9IOIVtZkkD366xOzkjujFc83mROKZcCjc9M -kE/1hbV+Yq1VhC3TkUEKvcWNxE6UY3o4xKpueVIuKGRaSoWO5GsXhdXSM59Nhucb -cbStJFlAEeEa7Q26yj7UPdJ71pv7Qhboedab+0Iexsu2p2ZuD0sJltZom5gkEuaQ -jldxMPkZuk0gW2E05cetgIvfSJihZY/RcvODKpXr0NntKA4HkCeHdEWrkLBc67fK -EoF+Khc/CEuMYZn5tYyMFwX0KQRbwtCtkXMbUk4eqBKgpC9eYN4n9xf+Vczh+fYv -maUoDUHlD/cF47EmlTz0hPtFalsrQsdoGxtx1hs7DpolaTO5JZl7sdHmZPNKbAjx -Fx7jFY34ys+rcl4/XGL0jbVQmODpgsG2JD/F1UVIVqmRKgcT8YbNcy8qOrqO/ZiL -6uRLTKAU8WGloF/A3WpgUqjTc8gjOy0Si+2bYQr1C9pAzM469NOuKdUpxxRN766x -LUXYWw6mYbEw+m9zpeMc8/kdPHh/THp9LaYQAlCR4CMvXRNLASSCbqSOUGha0ekW -ym2QW8INBRVbCkjUJJ1BbCHCLpcA1SeBiscrEZ4ygLD1XmaFXUNzCypcutSSgnTX -Q2jbf2OTLH5TvkHGpuVbfTey0hWpvvHRjdxzWdrJiXSraHRi1cZQlVjDhUFGqNgX -zDaCxAtpjgepRcHFMQvHxaNIzUoG30YF/Cl9JM0sYVW2nNZb6EqI5an5ROXgw9LX -DEiieniVpBCNLGMuTLUdPHNmzTpdEu2lKUgJHARzW9uqToQy1iBDhpRtaKJ4bFO0 -A+oTygLxKiXxS2WMSqWNFGyzaN8L/wAuXlnY9whWn2qX0SyS2k3bJ5co14/45uXX -pjYYnOvpcUdcpt/KNazxaVWotys8W1HWwMBX0s0yM8sWyDbTtCK2z0ZNBys0INPO -thwIsRmEQ0x8XLEzLimhBfazBNvaEJfwtMeU0PYXnCVIOSzicqrm4MK+Fj6XeBmg -3LuuH2s9o5+V2cRgsz7DashKlHiEi8YadMqwYr9NS4lourSs8FIMVoerxDzTiLg7 -xW4WkWZqkhK9mYm2m1HYKO8IIipyXmFXYeQsDkYiztW+iwxmwheJAyDYrQlV78yY -34/HNy+jOkUZCqQyEzLbRCbZSNY6OOfXHyW0Y4TXK0lp1ExNt3Uq4+EXU49K3Eja -ahVS/LTSMmQJhwspuhRc20nUz7dvGIDZmYbWq6ZtKtDteAK1AeW0XElwoG6glRA9 -8JfTkp7MhSOnGoI3MTlLpWNm44YdkhKiYlr3UHLE8zaObO7jswx1dLadROyqkplz -kSsi6xwiJZb231Z4i081l0zJnnAgIUOg49IL8deWusVlMNdFj/pvsZ0guO0txbg9 -Yi4FuNoz1dKvoPrM1WOtN9Tlm3hm7YNiUjgf75ReEx13U5/rf/MWtPdmzNOMvNhS -Uq7DgTa45wrZL0NWzsP4ukutYokg3bpFNpzC17gE8PCNuPxy8vq1ammGWg31lQt9 -wxvjLI5rd1IYdMySJdb7pG/RsqV8orsumrs0GHC286+2sbpUyoHygLcQQhpSkHKk -gnlFMqaOHZdkUI2Zb9k/RETV4+L2ntNijpSEJtk2AhxfwAzbTIdc9UjQn6IgjOg8 -ASlaW1fTQ352J1jhynseljd2X+ixltuYbGZIULcYjTqk6Y9KtMsKUEITpuBBelad -6SvNT1FI02EOeM/XPqMu+c/RpUR3awo0+OqZZtkWQkCFpNnSfhuiSk3PzFYdZSp6 -XXkaWe5JGngSfjHXwzp53PQfOPFM1Mg7dKoD4x0uQZejxZWzM34OfKFVYIGMr/pw -AH6seZhxOXoClnCpSQf71gSbmHf2D/CYmrx8XdO/Y6b75YIv4AZ0WcdP3j5xTOl7 -UOtMYkPS3U0U5m1HdQO49x090cvLjJt18Wdup/BfSpglsDhHNvT0ML0ytTWVlCm5 -hKXG1ZshTmze6FO7s8spEalVqeZQ+2uUzIOqFIQRvwsdovxHqdKz6lqz5wHL9pGX -KbRF3LtpLPE1+ZyIzngLxU7RnlqC7CssZfDDeY3W6OkV4nWO3jx1HmZ5fqlhU05a -g+k8XFecbRz0aejtIS3M2+2PKFkrBExgi9bB/DHmYIWfpdygs4k+ECThw5rQP4TC -q8fF1TtaQm/2YS/gAqH+o9+Y+cUyoWxNklaVIzJSi/WVoJ2Psgxjyzrpvw3vtrSZ -4XzZzkWNDyMcWUehhk7Lpk7Jzhf6wtTLlipIAKx/FBLNaaY49rlpMsWdVzpNtgtO -/wAItprP+xBNPmUTInFzDnQJUAlpdlFPffv5RGV+M8vfXs9N5gWxYlZypHO8XxY7 -sjDlz1jaaVDFsPsDk2PKO5wTwqKwgmpPH8Q+cWxo09HySG5m/wBseULJeCNjAE1Z -On0PmYIMi8ZFn0i0NmbeGz+oB+U+cTWmPi6p6gqlAjbLCXPC2xDPJpsnOTa05g1m -OUfSN9BDt0zk3dF+1XprF9BmGX5Zlhlp3MwpBJUVW1uT7o5+XPVjq4uP1UyFWXIu -dXfAQ6g+0rYjmIzuP67jWZfnqmXR6tIz8olsrvbTX+sYXCyujDOWLhFNkmLv5la8 -OkNoeulb0HazX2ULLSVZGxcbjwiphazyzkQKMtycfdnHgRlA6FJ5Hj746+HCTtwc -/JbdHNQ1ZqAyfwx5RpU4+FnUtZ5/T6xXnF7ZaGGBT6t8Wt2h5Qsl4oWK1XrOX8MH -+ZggsLmUN3UlXdDZG5hz9hC3IxFaY+Leln9Tp/LAv4RnpEqahUxIJPqkErcAO5US -Nfd5wqWE+oWFZNtmTYlEG6bE35m+scXLv9Xbv4pNPK9hhbt1JbVobpUOELDPR54b -DDTlTo7pBbK0g7jjGu8cmWssVpMY3qEzLpl0srFhYgA3I+EKYRV5MrHeh0KerlVQ -/UG1NSvtKSrQqHL3w8spjOk443K9iOj1aVqU3PBgpSQuyUfdT2QR3aCOnj6mnLyz -vZyUD93mf9sRVGPhbz6gZ18X+tV5xWmWxfgdeZDwtqFfKFkvFVYxWUV5JHFr5wQZ -eoLHo+m21AmbR/1/9hbT+aNqVTHKdTjLqWFGxFwIVVjNRS1fGdOwpTTJqUJufCbB -hs6A/ePDw3hKkIGqzj9QemZ15RW46orUfE/KBUTqDVxITjZevkvfSMuTj/U6bcef -5vZryjrM3LocQpK0LFwRqDHJZ/XXL9jSYpjDuvRI8csJSKaWhBu20gHnYQi1GPI6 -tJulBAWoGyu+KhXwmqa9N0esKbKih9lw5rbf2fIx3Y3fccOWPyvqHB861UsKyr7S -hZaMqkj6KhoR/fdFbZya6QH8DtPPrdM04CtRVaw4xX6R+FrQ6EmilwJeU4Fm/agt -2cx0gV3DT1WqImEzCUAIy2y34wbFxBLWO6iUlSsgA3JhaR+rVZW/SJVJ1gyss6WE -EWWtGi1DlfgPCE0k/oEecU4sklVz3wKQ7WcUyq2VYJT8x84DaS4DjRaX7aNP/YAJ -sK4lVRpoSk8SZN09le/Rq5+HMRjycf67nrbj5Pz1fDWllNzDCXEKStChdKkm4UOY -jm18rp3/AB4tnXQQtK2qag2S6G+65gKlJWQhzFs84kdkry+8C0dfF/5cvJ6JMO4w -qeHWnGpZ31CiFKbUnMkm1r24HbaNWFgrlPSS/NKQkvNt3PaJJ0hzSLL8HWHKoupv -qzPBxNgRlMOyQsbbe0bEdZnqbUQ1LrbyFN+2qx3hyDLLVJWamweyDoNkxC5jpXrW -V7QG4lRO1r84DR5hpbqUqSrK4ghST3/0gPTmhwOuIeQLH2VjlASUUh1JSRfXUQGn -UrGUzhR9ptbinZZau00o3FufcfD+cRlhMl48lxNuk12RrcqJiTdC08Qd0+Mc2WNl -1XVjlMpuK/EU+mlyz02QCVdlNzbW0TMbbpWVkm6S70+/1t0hpokqvmNySd47ccZJ -pw223bnKTU4mdbadc6Rp0ELSRsddRDSnq6RhwkXAuFAwGJsLYvn8NzqX2CHWFH1j -K9ljuPA98BWbG9dqTGJ52Vnqcq7a2LqSrQoObVJ74ueMMuqVSlG+u8Q6HNSiIA8J -SdYA8NucAQVlUrNlxKFKbXbOEi5B52hBKXMC3qknMRuRDCKqX6W/SDPffNxgDrTl -zNImumkHXGuYQsix7v6QrJfTls8XFYxBO10s9YASptOWw0BPFXjE44TGqz5LlNVT -mXGc+MWh6ZZKilRSCU8YA7FG45jSAMaJSgDkbQBd0SsPUxbuUZkKHsnnzh70jLHa -qHHxiVtV6JvDDjt8YA3ygI4wBrlGf3QBsEjLtAbLDlAG6QIQcrdpR5GGTpYWvAGx -FlECAPLa35QBooBPSW4C8ASZXVRvyhlX/9mJAk4EEwEIADgWIQT4KAb9ob9bmhsw -FOfJ/O1spreUVAUCW/AHrgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ -/O1spreUVJ4nD/9tGS8cg2eUSwd0ExCl0dWsJRdM0mUYh17mXyVNLcvbglIkSdma -v/Ty3ke533izRN/SkkU8vNthjKAohZmmXlaXrruEyHq2vfXcDg4+C7FJQ+O3PT2B -S5ft3Ht2GmRpD2lWpeUlJ9BXF2EF5pSnHPOrlTHRUfjBCDU4uuSeKgioSyoc2iWb -BBaSXyeQAUR+ppM1AYKUlCDxpLbe3nVCOUc+JgJzv+47EqwMyVODwzk7oFO4GMRm -KTKlctb1ym75oV1tiZi2fL/KA2uAab/RMO0rfxa9HVWnJGvUEDMPlTfs7222zuLB -55Fzllfx5rQlou+MLBQIV978HRZrDxZesQOOJ4/BwTPgQ42GREf+uf5/SG4Fn3Qh -NZsvoaePMLN/QQEjM7eqOUzRJRVcdJfRH+LinIFrAqcmbbcp1bvq8LV5lbmlFJLF -gimvW/shf/6Zu1YsfBhvLWInUCyoOPFa1tASF6qqi1hEOd8tQgNE/H/FSIehmTHT -74kYPNRm+DzlvrW2JPVl24Nf/SWbOG/IzGBY/pDActTwYqnpXKR7eUt/YcPpmrPi -kyIKX32U2vTBCE3yvCm0KRzrcSbTJGfVgmlxxqIuOtbeaBtf96m+o5z/xw9ro7Ek -VZbsx6fPuWuLY/MqeLXl1EuiU6X1sr+skDY8lJeeiRt+Uq5mCZuEgWdM1IhdBBAR -AgAdFiEE3DhHSHCdJhn/KGchbQyv/dsc/pAFAlvwCAQACgkQbQyv/dsc/pABQACf -YaUOqzlafrzeGdwHwDleootu0UcAn2adbaKJ79QBtDVPkR77zV801JlXuQINBFvw -A+gBEACt8AiUTMcyNXwN6kiOLPd+85IPlLwEVyofz8p2QBAxJsqKozlXXpnK7ahC -RSiHt02EK39WiyZpeY1/2dGmdvyI1vc7ld3814Dveh4nf1GRSpDZ427cxayaclh+ -wRQ8nDWFOQUsMB3He/Z+aO6l/ZNvdVdzRUHda1XvN41nwXUL9FQUn/TLYgHbxa7P -Yy18ZnNzH/xGSwDgRrqPEAZ8KOpbHEbNyYuYuv6IM8Xmbp8Q6bl2RyBNnrlphksJ -kLvO6RLHUvvw5uX5bt+u3umoZ+yHUkP13NtQHTyZ8VTCQimkB6OisisOTnV8OjLG -xtLEF/TjeGFAAoEnc8bQAPvrtONQL19rPkMB0gXYXPBbGw7eWYr3QpuOujUXcz9U -0JSSEov7cUepdTY8LEYFw8U5WimKY6f/uJUVx/ukNPtuAljJji0cjIGEOX2XGlBV -Ix/U3vywLBfUFW5hT+75z7UB3yG3Zexo0WSaQxxZ5PHxyPYBK1PvVkH0LvkbxJcr -rouJJQ66chjRglUbv4lf85/cG1ZLu3Ds0UbuD0gE9sAEwXtfdgDmp/HB7mxwJr1O -BRbTRv0Okx/lovWXkxt+hX+DXZ1u1qdZUW3zjmge8W7xag3epD21jIjFDODgUfDT -fgJi2FQq+szpagfPN5j5aIQKHCZf0DLbBD+ZWYQdld5JZs2V5QARAQABiQI2BBgB -CAAgFiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvwA+gCGwwACgkQyfztbKa3lFTa -yxAAxQo/9dvOO74J+9XznCYb5iO1B1ksnVegSGVuId45JKXkCkuWvDOkcU8+ma38 -wo3MBoPLpSMCXc/mKQ0p0ntO1tD/Wf4nBBCvseWcsR6RR5Su5jYorm0qZ89IOEPN -K2W2Z41X6DHyteB1dAyIyexOYoLKD7iWcQzga4/EoUPEwcr8BWWgGLBfRhXsYySz -F3fQPS7KaemDLGbJfTDZCSqmsZPnlksSvGxEBwUwfCjfY+QHxzWPRFPkuQJJR6YW -tiZ3z7jBRdRk/R5v2CJZJuGHcPPYQy6j2TYGONojm+ifaq1hz+A0aoy4P9qRW5Nl -mm6yiqEoJe07DrMLxn3H3ucuOo7DiNWmkkjW8DfhFSd+3pFMSvKGujOJWN27UDEp -ERWFX50gE15Sq4aPbMPNRejFQ1n75B4jfFQXg6WuwF3kwgHK3Y5T5vTEkbPgce9c -SyyFWU7EA4DJGnt7/FoaPDTKOWI9WSkmjOSABTBNSaUiMSFA3Wg/T0aS5pETpkv2 -S/GVVX022orAGK8zEY1vr2a24itOAKpQwFRuMjqDCBVgKAsMtlPu8jv3Zm/AMcYM -sRRnDWJh2TO8bqXXUG/o783fcTE3d1Ff7s4BfmBqpGHigZeehNvu+FshRDYaDrDN -IS0fTqbsX/JjaCXwU/o2E6G4aE79Ut/IMsCYzItTDh2UmcS5Ag0EW/G8wgEQALBi -2/A7Ev/92mYi4Gm//IJEKjm2Vc3NcX5LdSyPwdSLlHSRwvzZz7M0VeflcTYqssto -VPVf4maDtLGbQJn43CLqjvIW/C6jzjfvoZf0gbHpNfKY1ENs5xgE0wd3ZdsqpQC6 -W9Pu+kN31QS9+RUKwiG2bNBIREChL/omqiLhNu3hDbZnB+uSByOk901XVrNmKa8G -NzXSfJSCt0gP7XU6VpMqjxppA8Y2Vo7jnylbrgVJriTt6jtjDylBBQqmHSOXMT+q -9kIWDSocKhSFHBMO6LYnAwbMef2kqio5zaKzZAuwis0zjOqKHwW54xL2T7djFav9 -VlgcAYN105iMLUiIl39HLeZnS5pUESOXRUv/qLwiQRvBlWBPIep3+ycM2eK8r5a1 -5EwCgN2nSl3KYjzTOisCmK1nQs+gQ1RMraeBGYEG0uIUvDxfoONTuYkM3dhWq2Xx -V/OO6yUkfyOlBGUREe1PXAOsP0LtAFJha7kbh7Eg6GGU7gRYh2dG2Ln6Vmx1ldbS -F3woFYPGNMsQmgEKxwyjKaq0Qhd/sKHrTpPz8PXfGP4dHegExKegS7Yof1VrKBB+ -L8Q8o1Oi8JPCjRp47iga5OYS1Vn3h5a07ajzSAxPsmF0lmF4tYk2MFxSs403ShiE -BTjN4t6rjmnoQV/b+CuhpmvzxaYr736/jkY7s0I5ABEBAAGJBGwEGAEIACAWIQT4 -KAb9ob9bmhswFOfJ/O1spreUVAUCW/G8wgIbAgJACRDJ/O1spreUVMF0IAQZAQgA -HRYhBB2wOl45wX3kd77c+/0dTvV/qVkCBQJb8bzCAAoJEP0dTvV/qVkC3tUP/2rR -VDaSPj9+UYJtHGDfQmYCEqxROm5wGCJbNrUQspLeL8+XrsaUDh1ldNAQtoDqGjRp -kwjJAS0OZfvCv7pI052NK/KVGaK5Tj2+0lxTAcGbAKoH8E2HWPlERpU9CRLvzvDE -4GGxw2nw7aobNGbf9d98c9RpZuAul92BOClnpGEU4VzjKUk9IsSjZQVJnggQujxL -qWWiwfGwVsj2PdgPao/P48cYNl5CACBgY19AAh7WzgJVz/6je/5NLdAAV+E31qSE -EaZsvTBqrMOtH6iTn1GpJ73FsJ0BYVt9X99bRT0Vi0iWulBuhYfZG4PdCY6fv6uC -d+6pAC+Y/M9npaLbBHscSlJheTyvfuB7bzYBY+Q87VHSOMuNni7U08FuiILFoF+e -/ESU/v0Hde44ghiXKSaFO8djxc874KM9UlGWvw9UbmI8Z2uM0kDcrPZ/8tcjXOhp -PEBib54ab4tKCUCtOmsF9ZiT0hOqYdP9bXW+6OGfCignJ7ABhPpANfx2Sn/28L9l -PbF1nA5CkHdyo/ku1Z/lNq44yvrB8r0Ljq6s3KS69dUZqqrADeogOdi0/TrghtKU -DERWGmQagYSzMIvsXoAI56MxXFLriSObmpFLTWq7cr/+Ju3AcaSkrpDSYi3U6vLL -8NuXPhul1S/+yPwvX6Mk1Zkip9/Wg4SQeiT2R7xj8zMP/RJ8uKbnKpOftY89Kv0Y -FZ4hE3FeBR3UJvkuPdQYNLQRluzh63Bzc4ClSxB9Ma7fmAEiuFtgEi4HLTMBDOHO -uVMuWYcgubu9VBlAGLJ++gnKxCAJXEntuB49il8MjMsy+uv/cFCjPG9z/1pmWYrE -XBNA+vcaOrNTS2IykAbqybcPYbBcN47bm+A4i5yqiahk0q++j4LOW/nf88xXO7xI -V/4vQgemh7RHgHJOkKfzOPw/Kx3UjV1jA9gEUrusHE4R3Upxh0ZeQW19hUnVlao1 -TxxKEUryrRzckuRfc5ziMWNyJaZsPMkeBEhyY/CizDFPrsSXIAijfu8KFnxCsnaM -ylFBWOu5FwsKMDXxu0QdwqpL2CM8p+q12z1VruNjpIc8bAc0/YMndjYnxzsqQEMV -GQIDKWqh/m6v7sqbn65ZQcVAzSAriGcQxCOIoT/TA/J+/4BSk5c8TKlqT8NBT77B -Z70vMr41mZus1A/ciI8AxgbYwlhuvTehdm74k/c7NSzTxeG3OumTlBR1I18C4AIi -y4iM3O4H4jvEssWBUzpm3VJG0NvcN/M4YVZHX5yxWQuIFcghzb7sLYddmRvR9B0M -Xowot//r/sgn43xv54sIvwe9MkCCU6j7ePYUlOUnn+vQ5i7rFN/UPub3V3toI2gg -DRuKdymWEii1jA9KlmheLTFr -=r9L+ ------END PGP PUBLIC KEY BLOCK----- diff --git a/nixops/scripts/setup b/nixops/scripts/setup deleted file mode 100755 index db0f353..0000000 --- a/nixops/scripts/setup +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -if ! which nix 2>/dev/null >/dev/null; then - cat <<-EOF - nix is needed, please install it: - > curl https://nixos.org/nix/install | sh - (or any other way handled by your distribution) - EOF - exit 1 -fi - -if [ "${NIX_STORE:-/nix/store}" != "/nix/store" ]; then - cat <<-EOF - Nix store outside of /nix/store is not supported - EOF - exit 1 -fi - -if ! which direnv 2>/dev/null >/dev/null; then - cat <<-EOF - direnv is needed, please install it - EOF - exit 1 -fi - -if [ -z "$NIXOPS_ENV_LOADED" ]; then - cat <<-EOF - direnv environment needs to be loaded - EOF - exit 1 -fi - -if [ "$(git config --get include.path)" != "../.gitconfig" ]; then - cat <<-EOF - it is recommended to include the .gitconfig file into (local) git configuration: - git config --local include.path '../.gitconfig' - Run this command? [y/N] - EOF - read y - if [ "$y" = "y" -o "$y" = "Y" ]; then - git config --local include.path '../.gitconfig' - fi -fi - -for key in public_keys/*; do - fpr=$(cat "$key" | gpg --import-options show-only --import --with-colons | grep -e "^pub" | cut -d':' -f5) - gpg --list-key "$fpr" >/dev/null 2>/dev/null && imported=yes || imported=no - # /usr/share/doc/gnupg/DETAILS field 2 - (cat "$key" | gpg --import-options show-only --import --with-colons | - grep -E '^pub:' | - cut -d':' -f2 | - grep -q '[fu]') && signed=yes || signed=no - if [ "$signed" = no -o "$imported" = no ] ; then - echo "The key for $key needs to be imported and signed (a local signature is enough)" - cat "$key" | gpg --import-options show-only --import - echo "Continue? [y/N]" - read y - if [ "$y" = "y" -o "$y" = "Y" ]; then - cat "$key" | gpg --import - gpg --expert --edit-key "$fpr" lsign quit - else - echo "Aborting" - exit 1 - fi - fi -done - -if nix show-config --json | jq -e '.sandbox.value == "true"' >/dev/null; then - cat <<-EOF - There used to be some impure derivations (grep __noChroot), you may need - sandbox = "relaxed" - in /etc/nix/nix.conf - you may also want to add - keep-outputs = true - keep-derivations = true - to prevent garbage collector from deleting build dependencies (they take a lot of time to build) - and - allow-import-from-derivation = false - as an attempt to avoid having build-time derivations (doesn’t work for all packages) - press key to continue - EOF - read y -fi - -cat <<-EOF - All set up. - Please make sure you’re using make commands when deploying - EOF diff --git a/nixops/scripts/with_env b/nixops/scripts/with_env deleted file mode 100755 index c570ccf..0000000 --- a/nixops/scripts/with_env +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -if [ -z "$NIXOPS_ENV_LOADED" ]; then - echo "Please load the environment with direnv" - exit 1; -fi - -umask 0077 -TEMP=$(mktemp -d /tmp/XXXXXX-nixops-files) -chmod go-rwx $TEMP - -finish() { - rm -rf "$TEMP" -} - -trap finish EXIT - -sops -d secrets/vars.yml | yq -r .ssl_keys.nix_repository > $TEMP/id_ed25519 - -export SSH_IDENTITY_FILE="$TEMP/id_ed25519" - -"$@" diff --git a/nixops/secrets b/nixops/secrets deleted file mode 160000 index 8c6277e..0000000 --- a/nixops/secrets +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8c6277e3c2762e13d5f1f2ac06d2e815e02fab82 diff --git a/overlays/bitlbee-discord/default.nix b/overlays/bitlbee-discord/default.nix deleted file mode 100644 index bf8e5db..0000000 --- a/overlays/bitlbee-discord/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -self: super: { - bitlbee-discord = super.bitlbee-discord.overrideAttrs(old: rec { - version = "master-3061edd"; - name = "bitlbee-discord-${version}"; - src = self.fetchFromGitHub { - rev = "master"; - owner = "sm00th"; - repo = "bitlbee-discord"; - sha256 = "07gjd4b0g09888gpaqwcjafr8m292y2qz0gzharxjh1k2jbs88g3"; - }; - }); -} diff --git a/overlays/bitlbee/bitlbee_long_nicks.patch b/overlays/bitlbee/bitlbee_long_nicks.patch deleted file mode 100644 index 70be092..0000000 --- a/overlays/bitlbee/bitlbee_long_nicks.patch +++ /dev/null @@ -1,56 +0,0 @@ -diff --git a/bitlbee.h b/bitlbee.h -index 17ab2979..5858277e 100644 ---- a/bitlbee.h -+++ b/bitlbee.h -@@ -121,7 +121,7 @@ extern "C" { - #define CONTROL_TOPIC "Welcome to the control channel. Type \2help\2 for help information." - #define IRCD_INFO PACKAGE " " - --#define MAX_NICK_LENGTH 24 -+#define MAX_NICK_LENGTH 99 - - #define HELP_FILE VARDIR "help.txt" - #define CONF_FILE_DEF ETCDIR "bitlbee.conf" -diff --git a/tests/check_nick.c b/tests/check_nick.c -index ca5e5111..909fdcc9 100644 ---- a/tests/check_nick.c -+++ b/tests/check_nick.c -@@ -11,16 +11,16 @@ - START_TEST(test_nick_strip){ - int i; - const char *get[] = { "test:", "test", "test\n", -- "thisisaveryveryveryverylongnick", -- "thisisave:ryveryveryverylongnick", -+ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick", -+ "thisis:averyveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick", - "t::::est", - "test123", - "123test", - "123", - NULL }; - const char *expected[] = { "test", "test", "test", -- "thisisaveryveryveryveryl", -- "thisisaveryveryveryveryl", -+ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryve", -+ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryve", - "test", - "test123", - "_123test", -@@ -28,7 +28,7 @@ START_TEST(test_nick_strip){ - NULL }; - - for (i = 0; get[i]; i++) { -- char copy[60]; -+ char copy[260]; - strcpy(copy, get[i]); - nick_strip(NULL, copy); - fail_unless(strcmp(copy, expected[i]) == 0, -@@ -53,7 +53,7 @@ END_TEST - - START_TEST(test_nick_ok_notok) - { -- const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnick", -+ const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick", - "\nillegalchar", "", "nick%", "123test", NULL }; - int i; - diff --git a/overlays/bitlbee/default.nix b/overlays/bitlbee/default.nix deleted file mode 100644 index 5183d01..0000000 --- a/overlays/bitlbee/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - bitlbee = super.bitlbee.overrideAttrs(old: { - patches = (old.patches or []) ++ [ ./bitlbee_long_nicks.patch ]; - }); -} diff --git a/overlays/bonfire/default.nix b/overlays/bonfire/default.nix deleted file mode 100644 index 6dc1034..0000000 --- a/overlays/bonfire/default.nix +++ /dev/null @@ -1,36 +0,0 @@ -self: super: { - bonfire = let - click = self.python3Packages.click.overridePythonAttrs(old: rec { - version = "6.7"; - src = self.python3Packages.fetchPypi { - pname = "click"; - inherit version; - sha256 = "02qkfpykbq35id8glfgwc38yc430427yd05z1wc5cnld8zgicmgi"; - }; - postPatch = '' - substituteInPlace click/_unicodefun.py --replace "'locale'" "'${self.locale}/bin/locale'" - ''; - doCheck = false; - }); - keyring = self.python3Packages.keyring.overridePythonAttrs(old: rec { - version = "20.0.1"; - src = self.python3Packages.fetchPypi { - pname = "keyring"; - inherit version; - sha256 = "963bfa7f090269d30bdc5e25589e5fd9dad2cf2a7c6f176a7f2386910e5d0d8d"; - }; - }); - in - super.bonfire.overridePythonAttrs(old: { - version = "0.0.8"; - src = self.fetchFromGitHub { - owner = "blue-yonder"; - repo = "bonfire"; - rev = "0a0f18469d484aba6871fa7421bbb2c00ccefcb0"; - sha256 = "1y2r537ibghhmk6jngw0zwvh1vn2bihqcvji50ffh1j0qc6q3x6x"; - }; - postPatch = ""; - propagatedBuildInputs = self.lib.subtractLists [ self.python3Packages.click self.python3Packages.keyring ] old.propagatedBuildInputs ++ [ click keyring ]; - meta.broken = false; - }); -} diff --git a/overlays/bugwarrior/default.nix b/overlays/bugwarrior/default.nix deleted file mode 100644 index 2b25985..0000000 --- a/overlays/bugwarrior/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - bugwarrior = super.python3Packages.bugwarrior.overridePythonAttrs(old: rec { - patches = old.patches or [] ++ [ ./mantisbt.patch ]; - }); -} diff --git a/overlays/bugwarrior/mantisbt.patch b/overlays/bugwarrior/mantisbt.patch deleted file mode 100644 index 85e5af1..0000000 --- a/overlays/bugwarrior/mantisbt.patch +++ /dev/null @@ -1,379 +0,0 @@ -diff --git a/bugwarrior/services/mantisbt.py b/bugwarrior/services/mantisbt.py -new file mode 100644 -index 0000000..e54af0d ---- /dev/null -+++ b/bugwarrior/services/mantisbt.py -@@ -0,0 +1,361 @@ -+from builtins import filter -+import re -+import six -+ -+import requests -+from jinja2 import Template -+ -+from bugwarrior.config import asbool, aslist, die -+from bugwarrior.services import IssueService, Issue, ServiceClient -+ -+import logging -+log = logging.getLogger(__name__) -+ -+ -+class MantisbtClient(ServiceClient): -+ def __init__(self, host, token): -+ self.host = host -+ self.session = requests.Session() -+ self.session.headers['Authorization'] = token -+ -+ def _api_url(self, path, **context): -+ """ Build the full url to the API endpoint """ -+ baseurl = "https://{}/api/rest".format(self.host) -+ return baseurl + path.format(**context) -+ -+ def get_user(self): -+ return self.json_response(self.session.get(self._api_url("/users/me"))) -+ -+ def get_projects(self): -+ return self._getter(self._api_url("/projects"), subkey="projects") -+ -+ def get_issues(self): -+ url = self._api_url("/issues?page_size=50") -+ return self._getter(url, page_size=50, subkey="issues") -+ -+ def get_assigned_issues(self): -+ """ Returns all issues assigned to authenticated user. -+ """ -+ url = self._api_url("/issues?page_size=50&filter_id=assigned") -+ return self._getter(url, page_size=50, subkey="issues") -+ -+ def get_monitored_issues(self): -+ """ Returns all issues monitored by authenticated user. -+ """ -+ url = self._api_url("/issues?page_size=50&filter_id=monitored") -+ return self._getter(url, page_size=50, subkey="issues") -+ -+ def get_reported_issues(self): -+ """ Returns all issues reported by authenticated user. -+ """ -+ url = self._api_url("/issues?page_size=50&filter_id=reported") -+ return self._getter(url, page_size=50, subkey="issues") -+ -+ def _getter(self, url, page_size=None, subkey=None): -+ """ Pagination utility. Obnoxious. """ -+ -+ results = [] -+ link = dict(next=url) -+ page_number = 1 -+ -+ while 'next' in link: -+ if page_size is not None: -+ response = self.session.get(link['next'] + "&page=" + str(page_number)) -+ else: -+ response = self.session.get(link['next']) -+ -+ json_res = self.json_response(response) -+ -+ if subkey is not None: -+ json_res = json_res[subkey] -+ -+ results += json_res -+ -+ if page_size is not None and len(json_res) == page_size: -+ page_number += 1 -+ else: -+ break -+ -+ return results -+ -+class MantisbtIssue(Issue): -+ TITLE = 'mantisbttitle' -+ BODY = 'mantisbtbody' -+ CREATED_AT = 'mantisbtcreatedon' -+ UPDATED_AT = 'mantisbtupdatedat' -+ CLOSED_AT = 'mantisbtclosedon' -+ URL = 'mantisbturl' -+ PROJECT = 'mantisbtproject' -+ NUMBER = 'mantisbtnumber' -+ USER = 'mantisbtuser' -+ CATEGORY = 'mantisbtcategory' -+ STATE = 'mantisbtstate' -+ -+ UDAS = { -+ TITLE: { -+ 'type': 'string', -+ 'label': 'Mantisbt Title', -+ }, -+ BODY: { -+ 'type': 'string', -+ 'label': 'Mantisbt Body', -+ }, -+ CREATED_AT: { -+ 'type': 'date', -+ 'label': 'Mantisbt Created', -+ }, -+ UPDATED_AT: { -+ 'type': 'date', -+ 'label': 'Mantisbt Updated', -+ }, -+ CLOSED_AT: { -+ 'type': 'date', -+ 'label': 'Mantisbt Closed', -+ }, -+ PROJECT: { -+ 'type': 'string', -+ 'label': 'Mantisbt Project', -+ }, -+ URL: { -+ 'type': 'string', -+ 'label': 'Mantisbt URL', -+ }, -+ NUMBER: { -+ 'type': 'numeric', -+ 'label': 'Mantisbt Issue #', -+ }, -+ USER: { -+ 'type': 'string', -+ 'label': 'Mantisbt User', -+ }, -+ CATEGORY: { -+ 'type': 'string', -+ 'label': 'Mantisbt Category', -+ }, -+ STATE: { -+ 'type': 'string', -+ 'label': 'Mantisbt State', -+ } -+ } -+ UNIQUE_KEY = (URL, NUMBER, ) -+ -+ def _normalize_tag(self, label): -+ return re.sub(r'[^a-zA-Z0-9]', '_', label) -+ -+ def to_taskwarrior(self): -+ body = self.record.get('description') -+ if body: -+ body = body.replace('\r\n', '\n') -+ -+ created = self.parse_date(self.record.get('created_at')) -+ updated = self.parse_date(self.record.get('updated_at')) -+ closed_date = None -+ if self.record["status"]["name"] in ["closed", "resolved"]: -+ for history in self.record.get("history", []): -+ if history.get("field", {}).get("name", "") == "status"\ -+ and history.get("new_value", {}).get("name", "") in ["closed", "resolved"]: -+ closed_date = history["created_at"] -+ closed = self.parse_date(closed_date) -+ -+ return { -+ 'project': self.record['project']['name'], -+ 'priority': self.origin['default_priority'], -+ 'annotations': self.get_annotations(), -+ 'tags': self.get_tags(), -+ 'entry': created, -+ 'end': closed, -+ -+ self.TITLE: self.record.get('summary'), -+ self.BODY: body, -+ self.CREATED_AT: created, -+ self.UPDATED_AT: updated, -+ self.CLOSED_AT: closed, -+ self.URL: self.get_url(), -+ self.PROJECT: self.record['project'].get('name'), -+ self.NUMBER: self.record['id'], -+ self.USER: self.record['reporter'].get('name'), -+ self.CATEGORY: self.record['category'].get('name'), -+ self.STATE: self.record['status'].get('label'), -+ } -+ -+ def get_url(self): -+ return "https://{}view.php?id={}".format(self.extra['host'], self.record["id"]) -+ -+ def get_annotations(self): -+ annotations = [] -+ -+ context = self.record.copy() -+ annotation_template = Template(self.origin['annotation_template']) -+ -+ for annotation_dict in self.record.get('notes', []): -+ context.update({ -+ 'text': annotation_dict['text'], -+ 'date': annotation_dict['created_at'], -+ 'author': annotation_dict['reporter'].get('name', 'unknown'), -+ 'view': annotation_dict['view_state']['label'], -+ }) -+ annotations.append( -+ annotation_template.render(context) -+ ) -+ return annotations -+ -+ def get_tags(self): -+ tags = [] -+ -+ context = self.record.copy() -+ tag_template = Template(self.origin['tag_template']) -+ -+ for tag_dict in self.record.get('tags', []): -+ context.update({ -+ 'tag': self._normalize_tag(tag_dict['name']) -+ }) -+ tags.append( -+ tag_template.render(context) -+ ) -+ -+ return tags -+ -+ def get_default_description(self): -+ return self.build_default_description( -+ title=self.record['summary'], -+ url=self.get_processed_url(self.get_url()), -+ number=self.record['id'], -+ ) -+ -+ -+class MantisbtService(IssueService): -+ ISSUE_CLASS = MantisbtIssue -+ CONFIG_PREFIX = 'mantisbt' -+ -+ def __init__(self, *args, **kw): -+ super(MantisbtService, self).__init__(*args, **kw) -+ -+ self.host = self.config.get('host', 'www.mantisbt.org/bugs/') -+ -+ token = self.get_password('token') -+ -+ self.client = MantisbtClient(self.host, token) -+ self.user = None -+ -+ self.exclude_projects = self.config.get('exclude_projects', [], aslist) -+ self.include_projects = self.config.get('include_projects', [], aslist) -+ -+ self.involved_issues = self.config.get( -+ 'involved_issues', default=True, to_type=asbool -+ ) -+ self.assigned_issues = self.config.get( -+ 'assigned_issues', default=False, to_type=asbool -+ ) -+ self.monitored_issues = self.config.get( -+ 'monitored_issues', default=False, to_type=asbool -+ ) -+ self.reported_issues = self.config.get( -+ 'reported_issues', default=False, to_type=asbool -+ ) -+ self.tag_template = self.config.get( -+ 'tag_template', default='{{tag}}', to_type=six.text_type -+ ) -+ self.annotation_template = self.config.get( -+ 'annotation_template', default='{{date}} {{author}} ({{view}}): {{text}}', to_type=six.text_type -+ ) -+ -+ def get_service_metadata(self): -+ return { -+ 'tag_template': self.tag_template, -+ 'annotation_template': self.annotation_template, -+ } -+ -+ def filter_involved_issues(self, issue): -+ _, issue = issue -+ user = self.client.get_user() -+ uid = user["id"] -+ if issue["reporter"]["id"] != uid and \ -+ issue.get("handler", {}).get("id") != uid and \ -+ all([ x.get("user", {}).get("id") != uid for x in issue.get("history", [])]) and \ -+ all([ x.get("user", {}).get("id") != uid for x in issue.get("monitors", [])]): -+ return False -+ return self.filter_project_name(issue["project"]["name"]) -+ -+ def filter_issues(self, issue): -+ _, issue = issue -+ return self.filter_project_name(issue["project"]["name"]) -+ -+ def filter_project_name(self, name): -+ if self.exclude_projects: -+ if name in self.exclude_projects: -+ return False -+ -+ if self.include_projects: -+ if name in self.include_projects: -+ return True -+ else: -+ return False -+ -+ return True -+ -+ @staticmethod -+ def get_keyring_service(service_config): -+ host = service_config.get('host', 'www.mantisbt.org/bugs/') -+ username = service_config.get('username', default='nousername') -+ return "mantisbt://{username}@{host}".format(username=username, -+ host=host) -+ -+ @staticmethod -+ def to_issue_dict(issues): -+ return { i['id']: i for i in issues } -+ -+ def get_owner(self, issue): -+ return issue.get("handler", {}).get("name") -+ -+ def get_author(self, issue): -+ return issue.get("reporter", {}).get("name") -+ -+ def issues(self): -+ issues = {} -+ is_limited = self.assigned_issues or self.monitored_issues or self.reported_issues -+ -+ if self.assigned_issues: -+ issues.update( -+ filter(self.filter_issues, self.to_issue_dict(self.client.get_assigned_issues()).items()) -+ ) -+ if self.monitored_issues: -+ issues.update( -+ filter(self.filter_issues, self.to_issue_dict(self.client.get_monitored_issues()).items()) -+ ) -+ if self.reported_issues: -+ issues.update( -+ filter(self.filter_issues, self.to_issue_dict(self.client.get_reported_issues()).items()) -+ ) -+ -+ if not is_limited: -+ all_issues = self.to_issue_dict(self.client.get_issues()) -+ if self.involved_issues: -+ issues.update( -+ filter(self.filter_involved_issues, all_issues.items()) -+ ) -+ else: -+ issues.update( -+ filter(self.filter_issues, all_issues.items()) -+ ) -+ -+ log.debug(" Found %i issues.", len(issues)) -+ if not is_limited: -+ issues = list(filter(self.include, issues.values())) -+ else: -+ issues = list(issues.values()) -+ log.debug(" Pruned down to %i issues.", len(issues)) -+ -+ for issue in issues: -+ issue_obj = self.get_issue_for_record(issue) -+ extra = { -+ 'host': self.host -+ } -+ issue_obj.update_extra(extra) -+ yield issue_obj -+ -+ @classmethod -+ def validate_config(cls, service_config, target): -+ if 'token' not in service_config: -+ die("[%s] has no 'mantisbt.token'" % target) -+ -+ super(MantisbtService, cls).validate_config(service_config, target) -diff --git a/setup.py b/setup.py -index d6d957a..665e36e 100644 ---- a/setup.py -+++ b/setup.py -@@ -80,6 +80,7 @@ setup(name='bugwarrior', - activecollab2=bugwarrior.services.activecollab2:ActiveCollab2Service - activecollab=bugwarrior.services.activecollab:ActiveCollabService - jira=bugwarrior.services.jira:JiraService -+ mantisbt=bugwarrior.services.mantisbt:MantisbtService - megaplan=bugwarrior.services.megaplan:MegaplanService - phabricator=bugwarrior.services.phab:PhabricatorService - versionone=bugwarrior.services.versionone:VersionOneService diff --git a/overlays/bundix/default.nix b/overlays/bundix/default.nix deleted file mode 100644 index 6c4046c..0000000 --- a/overlays/bundix/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - bundix = super.bundix.overrideAttrs (old: { - preBuild = (old.preBuild or "") + '' - sed -i -e "/case obj/a\ when nil\n nil" lib/bundix/nixer.rb - ''; - }); -} diff --git a/overlays/databases/mysql/default.nix b/overlays/databases/mysql/default.nix deleted file mode 100644 index f9e5791..0000000 --- a/overlays/databases/mysql/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -self: super: rec { - mariadb_pam = super.mariadb.overrideAttrs(old: { - cmakeFlags = old.cmakeFlags ++ [ "-DWITH_AUTHENTICATION_PAM=ON" ]; - buildInputs = old.buildInputs ++ [ self.pam ]; - outputs = old.outputs ++ [ "dev" ]; - postInstall = '' - mkdir -p $dev $dev/lib $dev/share - cp -a $out/include $dev - cp -a $out/lib/{libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a} $dev/lib - cp -a $out/lib/pkgconfig $dev/lib - cp -a $out/share/aclocal $dev/share - '' + old.postInstall; - }); - # This patched version includes C headers from the server part (see - # above). It seems to be required to build pam support in clients. - libmysqlclient_pam = super.libmysqlclient.overrideAttrs(old: { - prePatch = old.prePatch or "" + '' - sed -i -e '/define INCLUDE/s|"$| -I@CMAKE_SYSROOT@@CMAKE_INSTALL_PREFIX@/@INSTALL_INCLUDEDIR@/mysql/server -I@CMAKE_SYSROOT@@CMAKE_INSTALL_PREFIX@/@INSTALL_INCLUDEDIR@/mysql/server/private"|' mariadb_config/mariadb_config.c.in - ''; - postInstall = old.postInstall or "" + '' - cp -a ${mariadb_pam.dev}/include/* $out/include/mariadb - ''; - }); -} diff --git a/overlays/databases/postgresql/default.nix b/overlays/databases/postgresql/default.nix deleted file mode 100644 index 9ada29c..0000000 --- a/overlays/databases/postgresql/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -self: super: rec { - postgresql_pam = super.postgresql_11.overrideAttrs(old: { - # datadir in /var/lib/postgresql is named after psqlSchema - passthru = old.passthru // { psqlSchema = "11.0"; }; - configureFlags = old.configureFlags ++ [ "--with-pam" ]; - buildInputs = (old.buildInputs or []) ++ [ self.pam ]; - }); -} diff --git a/overlays/default.nix b/overlays/default.nix deleted file mode 100644 index bdc99d2..0000000 --- a/overlays/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -let - flakeCompat = import ../lib/flake-compat.nix; - flakes = builtins.foldl' (a: b: a // b) {} (map (n: (flakeCompat n).overlays) [ - ../flakes/backports - ../flakes/openarc - ../flakes/opendmarc - ../flakes/peertube - ../flakes/private/peertube - ]); -in flakes // { - mylibs = self: super: { mylibs = import ../lib { pkgs = self; }; }; - mypkgs = self: super: import ../pkgs { pkgs = self; }; - - bitlbee = import ./bitlbee; - bitlbee-discord = import ./bitlbee-discord; - bonfire = import ./bonfire; - bundix = import ./bundix; - bugwarrior = import ./bugwarrior; - dwm = import ./dwm; - elinks = import ./elinks; - gitweb = import ./gitweb; - gitolite = import ./gitolite; - goaccess = import ./goaccess; - kanboard = import ./kanboard; - ledger = import ./ledger; - lesspipe = import ./lesspipe; - mysql = import ./databases/mysql; - neomutt = import ./neomutt; - nixops = import ./nixops; - pass = import ./pass; - pelican = import ./pelican; - php-packages = import ./php-packages; - postfix = import ./postfix; - postgresql = import ./databases/postgresql; - procps-ng = import ./procps-ng; - sc-im = import ./sc-im; - shaarli = import ./shaarli; - slrn = import ./slrn; - taskwarrior = import ./taskwarrior; - vcsh = import ./vcsh; - weechat = import ./weechat; - ympd = import ./ympd; - doing = import ./doing; - khal = import ./khal; - nix-direnv = import ./nix-direnv; - morph = import ./morph; -} -// import ./python-packages diff --git a/overlays/doing/default.nix b/overlays/doing/default.nix deleted file mode 100644 index 7f95fb6..0000000 --- a/overlays/doing/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -self: super: { - defaultGemConfig = super.defaultGemConfig // { - doing = attrs: { - postInstall = '' - installPath=$(cat $out/nix-support/gem-meta/install-path) - sed -i $installPath/lib/doing/wwid.rb -e "/Create a backup copy for the undo command/ {n;d}" - ''; - }; - }; -} diff --git a/overlays/dwm/default.nix b/overlays/dwm/default.nix deleted file mode 100644 index 96ed3ff..0000000 --- a/overlays/dwm/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - dwm = super.dwm.overrideAttrs(old: rec { - postPatch = '' - cp ${./dwm_config.h} ./config.h - ''; - }); -} diff --git a/overlays/dwm/dwm_config.h b/overlays/dwm/dwm_config.h deleted file mode 100644 index b1587e8..0000000 --- a/overlays/dwm/dwm_config.h +++ /dev/null @@ -1,98 +0,0 @@ -/* See LICENSE file for copyright and license details. */ - -/* appearance */ -static const unsigned int borderpx = 1; /* border pixel of windows */ -static const unsigned int snap = 32; /* snap pixel */ -static const int showbar = 1; /* 0 means no bar */ -static const int topbar = 1; /* 0 means bottom bar */ -static const char *fonts[] = { "monospace:size=10" }; -static const char dmenufont[] = "monospace:size=10"; -static const char col_gray1[] = "#222222"; -static const char col_gray2[] = "#444444"; -static const char col_gray3[] = "#bbbbbb"; -static const char col_gray4[] = "#eeeeee"; -static const char col_cyan[] = "#005577"; -static const char *colors[][3] = { - /* fg bg border */ - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, -}; - -/* tagging */ -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; - -static const Rule rules[] = { - /* xprop(1): - * WM_CLASS(STRING) = instance, class - * WM_NAME(STRING) = title - */ - /* class instance title tags mask isfloating monitor */ - { "Nextcloud", NULL, NULL, 9 << 8, 0, -1 }, -}; - -/* layout(s) */ -static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ -static const int nmaster = 1; /* number of clients in master area */ -static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ - -static const Layout layouts[] = { - /* symbol arrange function */ - { "[M]", monocle }, /* first entry is default */ - { "[]=", tile }, - { "><>", NULL }, /* no layout function means floating behavior */ -}; - -/* key definitions */ -#define MODKEY Mod1Mask -#define TAGKEYS(KEY,TAG) \ - { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ - { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ - { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ - { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, - -/* helper for spawning shell commands in the pre dwm-5.0 fashion */ -#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } - -/* commands */ -static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; -static const char *termcmd[] = { "st", NULL }; - -static Key keys[] = { - /* modifier key function argument */ - { MODKEY, XK_p, spawn, {.v = dmenucmd } }, - { MODKEY, XK_t, spawn, {.v = termcmd } }, - { MODKEY, XK_Tab, view, {0} }, - { MODKEY|ShiftMask, XK_c, killclient, {0} }, - { MODKEY, XK_j, focusstack, {.i = +1 } }, - { MODKEY, XK_k, focusstack, {.i = -1 } }, - { MODKEY, XK_Return, zoom, {0} }, - TAGKEYS( XK_1, 0) - TAGKEYS( XK_2, 1) - TAGKEYS( XK_3, 2) - TAGKEYS( XK_4, 3) - TAGKEYS( XK_5, 4) - TAGKEYS( XK_6, 5) - TAGKEYS( XK_7, 6) - TAGKEYS( XK_8, 7) - TAGKEYS( XK_9, 8) - { MODKEY|ShiftMask, XK_q, quit, {0} }, -}; - -/* button definitions */ -/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ -static Button buttons[] = { - /* click event mask button function argument */ - { ClkLtSymbol, 0, Button1, setlayout, {0} }, - { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, - { ClkWinTitle, 0, Button2, zoom, {0} }, - { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, - { ClkClientWin, MODKEY, Button1, movemouse, {0} }, - { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, - { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, - { ClkTagBar, 0, Button1, view, {0} }, - { ClkTagBar, 0, Button3, toggleview, {0} }, - { ClkTagBar, MODKEY, Button1, tag, {0} }, - { ClkTagBar, MODKEY, Button3, toggletag, {0} }, -}; - diff --git a/overlays/elinks/default.nix b/overlays/elinks/default.nix deleted file mode 100644 index 1744dc0..0000000 --- a/overlays/elinks/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -self: super: { - elinks = super.elinks.overrideAttrs (old: - self.mylibs.fetchedGithub ./elinks.json // rec { - preConfigure = ''sh autogen.sh''; - buildInputs = old.buildInputs ++ (with self; [ gettext automake autoconf ]); - configureFlags = [ - "--disable-smb" "--without-x" "--enable-cgi" - "--enable-leds" "--enable-256-colors" - "--enable-html-highlight" "--with-zlib" - ]; - patches = []; - } - ); -} diff --git a/overlays/elinks/elinks.json b/overlays/elinks/elinks.json deleted file mode 100644 index ea13b1f..0000000 --- a/overlays/elinks/elinks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "f86be65-master", - "meta": { - "name": "elinks", - "url": "https://github.com/nabetaro/elinks", - "branch": "master" - }, - "github": { - "owner": "nabetaro", - "repo": "elinks", - "rev": "f86be659718c0cd0a67f88b42f07044c23d0d028", - "sha256": "1jxb7xgawcjkb3gw4gqyw26g02709wwdbhyczfckh3l4njxhy14m", - "fetchSubmodules": true - } -} diff --git a/overlays/gitolite/default.nix b/overlays/gitolite/default.nix deleted file mode 100644 index 7f8f007..0000000 --- a/overlays/gitolite/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -self: super: { - gitolite = super.gitolite.overrideAttrs(old: { - postPatch = old.postPatch + '' - sed -i -e "s@/bin/rm@rm@" src/commands/sskm - cp ${./invite} src/commands/invite - ''; - }); -} diff --git a/overlays/gitolite/invite b/overlays/gitolite/invite deleted file mode 100755 index 3cc2dbd..0000000 --- a/overlays/gitolite/invite +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; - -use lib $ENV{GL_LIBDIR}; -use Gitolite::Rc; -use Gitolite::Common; - -=for usage -Please see usage at https://www.immae.eu/docs/forge-logicielle/gitolite.html#inviter-des-collaborateurs -=cut - -usage() if @ARGV and ($ARGV[0] eq '-h' or $ARGV[0] eq '--help'); - -my $rb = $rc{GL_REPO_BASE}; -my $ab = $rc{GL_ADMIN_BASE}; -# get to the keydir -_chdir("$ab/keydir"); - -# save arguments for later -my $operation = shift || 'list'; -my $invitekeyid = shift || ''; -$invitekeyid and $invitekeyid !~ /^[-0-9a-z_]+@[-0-9a-z_]+$/i and die "invalid keyid $invitekeyid\n"; -my ($invited, $keyid) = split /@/, $invitekeyid; - -# get the actual userid and keytype -my $gl_user = $ENV{GL_USER}; -die "This function is reserved for actual users" if $gl_user =~ s/-invite-(.*)$//; - -# ---- -# first collect the keys - -my ( @invited_keys ); - -for my $pubkey (`find . -type f -name "*.pub" | sort`) { - chomp($pubkey); - $pubkey =~ s(^./)(); # artifact of the find command - - my $user = $pubkey; - $user =~ s(.*/)(); # foo/bar/baz.pub -> baz.pub - $user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz - - if ( $user =~ m(^(zzz-marked-for-...-)?$gl_user-invite-) ) { - push @invited_keys, $pubkey; - } -} - -# ---- -# list mode; just do it and exit -sub print_keylist { - my ( $message, @list ) = @_; - return unless @list; - print "== $message ==\n"; - my $count = 1; - for (@list) { - my $fp = fingerprint($_); - s/(zzz-marked-for-...-)?$gl_user-invite-//g; - s/\.pub$//; - s(.*/)(); - print $count++ . ": $fp : $_\n"; - } -} -if ( $operation eq 'list' ) { - print "you have the following invited keys:\n"; - print_keylist( "keys for invited persons", @invited_keys ); - print "\n\n"; - exit; -} - -# ---- -# please see docs for details on how a user interacts with this - -die "valid operations: add, del\n" unless $operation =~ /^(add|del)$/; - -if ( $operation eq 'add' ) { - print STDERR "please supply the new key on STDIN. (I recommend you - don't try to do this interactively, but use a pipe)\n"; - kf_add( $gl_user, $invited, $keyid, safe_stdin() ); -} elsif ( $operation eq 'del' ) { - kf_del( $gl_user, $invited, $keyid ); -} - -exit; - -# ---- - -# make a temp clone and switch to it -our $TEMPDIR; -BEGIN { $TEMPDIR = `mktemp -d -t tmp.XXXXXXXXXX`; } -END { `rm -rf $TEMPDIR`; } - -sub cd_temp_clone { - chomp($TEMPDIR); - hushed_git( "clone", "$rb/gitolite-admin.git", "$TEMPDIR" ); - chdir($TEMPDIR); - my $hostname = `hostname`; chomp($hostname); - hushed_git( "config", "--get", "user.email" ) and hushed_git( "config", "user.email", $ENV{USER} . "@" . $hostname ); - hushed_git( "config", "--get", "user.name" ) and hushed_git( "config", "user.name", "$ENV{USER} on $hostname" ); -} - -sub fingerprint { - my ($fp, $output) = ssh_fingerprint_file(shift); - # Do not print the output of $output to an untrusted destination. - die "does not seem to be a valid pubkey\n" unless $fp; - return $fp; -} - -sub safe_stdin { - # read one line from STDIN - my $data; - my $ret = read STDIN, $data, 4096; - # current pubkeys are approx 400 bytes so we go a little overboard - die "could not read pubkey data" . ( defined($ret) ? "" : ": $!" ) . "\n" unless $ret; - die "pubkey data seems to have more than one line\n" if $data =~ /\n./; - return $data; -} - -sub hushed_git { - local (*STDOUT) = \*STDOUT; - local (*STDERR) = \*STDERR; - open( STDOUT, ">", "/dev/null" ); - open( STDERR, ">", "/dev/null" ); - system( "git", @_ ); -} - -sub highlander { - # there can be only one - my ( $keyid, $die_if_empty, @a ) = @_; - # too many? - if ( @a > 1 ) { - print STDERR " -more than one key satisfies this condition, and I can't deal with that! -The keys are: - -"; - print STDERR "\t" . join( "\n\t", @a ), "\n\n"; - exit 1; - } - # too few? - die "no keys with " . ( $keyid || "empty" ) . " keyid found\n" if $die_if_empty and not @a; - - return @a; -} - -sub kf_add { - my ( $gl_user, $invited, $keyid, $keymaterial ) = @_; - - # add a new "invited" key for $gl_user. - cd_temp_clone(); - chdir("keydir"); - - mkdir("invited"); - _print( "invited/$gl_user-invite-$invited\@$keyid.pub", $keymaterial ); - hushed_git( "add", "." ) and die "git add failed\n"; - my $fp = fingerprint("invited/$gl_user-invite-$invited\@$keyid.pub"); - hushed_git( "commit", "-m", "invite add $gl_user-invite-$invited\@$keyid ($fp)" ) and die "git commit failed\n"; - system("gitolite push >/dev/null 2>/dev/null") and die "git push failed\n"; -} - -sub kf_del { - my ( $gl_user, $invited, $keyid ) = @_; - - cd_temp_clone(); - chdir("keydir"); - - my @pk = highlander( $keyid, 1, grep { m(^(.*/)?(zzz-marked-for-...-)?$gl_user-invite-$invited\@$keyid.pub$) } @invited_keys ); - - my $fp = fingerprint( $pk[0] ); - hushed_git( "rm", $pk[0]) and die "git mv failed\n"; - hushed_git( "commit", "-m", "invite del $pk[0] ($fp)" ) and die "git commit failed\n"; - system("gitolite push >/dev/null 2>/dev/null") and die "git push failed\n"; -} diff --git a/overlays/gitweb/default.nix b/overlays/gitweb/default.nix deleted file mode 100644 index 27a1152..0000000 --- a/overlays/gitweb/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - gitweb = super.gitweb.overrideAttrs(old: { - postBuild = old.postBuild or "" + '' - cp -r ${./theme} $out/gitweb-theme; - ''; - }); -} diff --git a/overlays/gitweb/theme/git-favicon.png b/overlays/gitweb/theme/git-favicon.png deleted file mode 100644 index 4fa44bb..0000000 Binary files a/overlays/gitweb/theme/git-favicon.png and /dev/null differ diff --git a/overlays/gitweb/theme/git-logo.png b/overlays/gitweb/theme/git-logo.png deleted file mode 100644 index fdaf7b7..0000000 Binary files a/overlays/gitweb/theme/git-logo.png and /dev/null differ diff --git a/overlays/gitweb/theme/gitweb.css b/overlays/gitweb/theme/gitweb.css deleted file mode 100644 index 83e0742..0000000 --- a/overlays/gitweb/theme/gitweb.css +++ /dev/null @@ -1,783 +0,0 @@ -/* Reset -------------------------------------------------------------------------- */ - -/* Based on http://meyerweb.com/eric/tools/css/reset/ */ -/* v1.0 | 20080212 */ - -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, -blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, -font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, -u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, -caption, tbody, tfoot, thead, tr, th, td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; -} - -ol, ul { list-style: none; } - -blockquote, q { quotes: none; } - -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} - -:focus { outline: 0; } - -ins { text-decoration: none; } - -del { text-decoration: line-through; } - -table { - border-collapse: collapse; - border-spacing: 0; -} - -a { outline: none; } - -/* General ----------------------------------------------------------------------------- */ - -html { - position: relative; - min-height: 100%; -} - -body { - font: 13px Helvetica,arial,freesans,clean,sans-serif; - line-height: 1.4; - margin: 0 0 105px; - background-color: #fff; - color: #000000; -} - -/* Monospaced Fonts */ -.sha1, .mode, .diff_tree .list, .pre, .diff, .patchset { - font-family: 'Consolas','Bitstream Vera Sans Mono',monospace; -} - -a:link, a:visited { - color: #4183C4; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -td.list a[href*='tree'], td.list a[href*='blob'] { - padding-left: 20px; - display: block; - float: left; - height: 16px; - line-height: 16px; -} - -td.list a[href*='tree'] { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABq0lEQVQ4y8WTu4oUQRSGv+rtGVuxhwVFdFEEE2c3d0HYTEMTn8DEVxADQTDUF9DMwMxQMBMx8AEWzRQ3cBHd9TI91+2urjq/QbczY2IygSep4nD+79yqnCRWsYQVbWVACvDh5ZXdrLe15dwyT1TjT/sxFFeB6i+VA2B6+cb7kAI4Jf0LO087zjlQI8Y5Qvnj0sHug321XoC1bk+K9eHk6+s7wPMUgKAS88eqb4+Jfg2SHs7lZBvX2Nh+2EUCDGSAcMnJsx9f7NxfAGqXyDzRd5EJO/pMPT1gcviGTnYOVIN5pAAE8v7dLrKL8xnglFk4ws9Afko9HpH3b5Gd2mwb/lOBmgrSdYhJugDUCenxM6xv3p4HCsP8F0LxCsUhCkMURihOyM7fg0osASTFEpu9a4LjGIUCqwcoDiEUrX+E4hRUQb20RiokC1j9vckUhygU7X3QZh7NAVKYL7YBeMkRUfjVCotF2XGIwnghtrJpMywB5G0QZj9P1JNujuWJ1AHLQadRrACPkuZ0SSSWpeStWgDK6tHek5vbiOs48n++XQHurcf0rFng//6NvwG+iB9/4duaTgAAAABJRU5ErkJgggo=) center left no-repeat; -} - -td.list a[href*='blob'] { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQoFQXBMW5TQRgGwNnHnoE0QbiCjoIooUmTU3AuS1BwIoTSUdJBigg3GCWOg9/++zHTop078wIAsPMrE4SL5/1aIyMjIyMjz/m0tbFECFdrPeaQQw75mz/5nZH7fN7aWILmauSYfznmmIfss8vIUx7zZWsTTXM5vpWvTk5Wq9VHQP/gtgOLa0Qpw940vAQdaG6thpOhlOkG0AEuAVGmEkAH+G4YSikxXQM6wDsAMRFAB/ihDNNUmN4DOsAbBAEAdICfpmmaAt4COoj2GgCASbIkZh1NAACznhQt2itnFgAAlF3u/gMDtJXPzQxoswAAAABJRU5ErkJgggo=) center left no-repeat; -} - -i { - font-style: normal; -} - -td, th { - padding: 5px; -} - -.page_nav br { - display: none; -} - -/* Page Header ----------------------------------------------------------------------------- */ - -.page_header { - height: 50px; - line-height: 50px; - position: relative; - padding: 0 27px; - margin-bottom: 20px; - font-size: 20px; - font-family: Helvetica, Arial, Freesans, Clean, sans-serif; - background: #FFFFFF; /* old browsers */ - background: -moz-linear-gradient(top, #FFFFFF 0%, #F5F5F5 100%); /* firefox */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#F5F5F5)); /* webkit */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#F5F5F5',GradientType=0 ); /* ie */ - background: -o-linear-gradient(top, #FFFFFF 0%, #F5F5F5 100%); - border-bottom: 1px solid #dfdfdf; -} - -.page_header a:link, .page_header a:visited { - color: #4183C4; - text-decoration: none; - padding: 3px; - font-weight: bold; -} - -.page_header a:hover { - font-weight: bold; - padding: 3px; - text-decoration: underline; -} - -.page_header a:first-child { - background: transparent; -} - -.page_header img.logo { - position: relative; - top: 7px; - margin-right: 5px; -} - -/* Page Footer ----------------------------------------------------------------------------- */ - -.page_footer { - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: 80px; - line-height: 80px; - margin-top: 15px; - background: #f1f1f1; - border-top: 2px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.page_footer_text { - color: #666; - display: inline; - float: left; - margin-left: 25px; - width: 80%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -a.rss_logo { - float: right; - padding: 3px 1px; - width: 35px; - line-height: 10px; - border: 1px solid; - border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e; - color: #ffffff; - background-color: #ff6600; - font-weight: bold; - font-family: sans-serif; - font-size: 80%; - text-align: center; - text-decoration: none; - margin-top: 30px; - margin-left: 5px; -} - -a.rss_logo:hover { - background-color: #ee5500; -} - -.rss_logo { - margin-right: 25px; - background: yellow; -} - -.rss_logo:last-child { - margin-right: 5px; -} - -/* Index include ----------------------------------------------------------------------------- */ - -.index_include { - width: 95%; - margin: 0 auto 15px; - background: -moz-linear-gradient(center top , #FFFFFF 0%, #F5F5F5 100%) repeat scroll 0 0 transparent; - border: 1px solid #DFDFDF; - padding: 8px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -/* Elements ----------------------------------------------------------------------------- */ - -.project_list, -.shortlog, -.tree, -.commit_search, -.history { - width: 95%; - margin: 0 auto 15px auto; - border: 1px solid #d8d8d8; - -moz-box-shadow: 0 0 3px rgba(0,0,0,0.2); - -webkit-box-shadow: 0 0 3px rgba(0,0,0,0.2); - box-shadow: 0 0 3px rgba(0,0,0,0.2); -} - -.project_list th, -.shortlog th, -.tree th, -.commit_search th { - color: #afafaf; - font-weight: normal; -} - -.project_list th { - font-weight: bold; -} - -.project_list tr, -.shortlog tr, -.tree tr, -.commit_search tr { - background: #eaeaea; - height: 2.5em; - text-align: left; - color: #545454; -} - -.project_list tr.dark, .project_list tr.light, -.shortlog tr.dark, .shortlog tr.light, -.tree tr.dark, .tree tr.light, -.commit_search tr.dark, .commit_search tr.light, -.history tr.dark, .history tr.light, -.heads tr.dark, .heads tr.light { - background: #F9F9F9; /* old browsers */ - background: -moz-linear-gradient(top, #F9F9F9 0%, #EFEFEF 100%); /* firefox */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F9F9F9), color-stop(100%,#EFEFEF)); /* webkit */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F9F9F9', endColorstr='#EFEFEF',GradientType=0 ); /* ie */ - background: -o-linear-gradient(top, #F9F9F9 0%, #EFEFEF 100%); - height: 2.5em; - border-bottom: 1px solid #e1e1e1; -} - -th .header { - background: transparent; - border: 0; - padding: 0; - font-weight: bold; -} - -.tree { - width: 100%; - margin: 0; -} - -.projsearch { - position: absolute; - right: 4%; - top: 15px; -} - -.projsearch a { - display: none; -} - -.commit_search { - background: #eaeaea; -} - -.page_nav, -.list_head, -.page_path, -.search { - width: 94%; - background: #eaeaea; - color: #545454; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; -} - -.history { - background: #eaeaea; -} - -.title { - margin: 0 auto 15px auto; - padding: 5px; - width: 95%; -} - -.readme { - background: #eaf2f5; - border: 1px solid #bedce7; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin: 0 auto 15px auto; - padding: 15px; - width: 95%; -} - -.readme h1 { - display: block; - font-size: 2em; - font-weight: bold; - margin-bottom: 0.67em; - margin-top: 0; -} - -.readme h2 { - font-size: 1.5em; - font-weight: bold; - margin-bottom: 0.83em; -} - - -.readme h3 { - font-size: 1.17em; - font-weight: bold; - margin-bottom: 1em; -} - -.readme p { - margin-bottom: 1em; -} - -.readme ul { - list-style: disc; - margin-bottom: 1em; - margin-left: 1.5em; -} - -.readme ul ul { - margin-bottom: 0; -} - -.readme ol { - list-style: decimal; - margin-bottom: 1em; - margin-left: 1.5em; -} - -.readme ol ol { - margin-bottom: 0; -} - -.readme pre { - font-family: monospace; - margin: 1em 0; - white-space: pre; -} - -.readme tt, .readme code, .readme kbd, .readme samp { - font-family: monospace; -} - -.readme blockquote { - margin: 1em; -} - -.projects_list, -.tags { - width: 95%; - background: #f0f0f0; - color: #545454; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; -} - -.heads { - width: 95%; - color: #545454; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; -} - -.header { - width: 94%; - margin: 0 auto 15px auto; - background: #eaf2f5; - border: 1px solid #bedce7; - padding: 5px; -} - -.header .age { - float: left; - color: #000; - font-weight: bold; - width: 10em; -} - -.title_text { - width: 94%; - background: #eaf2f5; - border: 1px solid #bedce7; - padding: 5px; - margin: 0 auto 0 auto; -} - -.log_body { - width: 94%; - background: #eaf2f5; - border: 1px solid #bedce7; - border-top: 0; - padding: 5px; - margin: 0 auto 15px auto; -} - -.page_body { - line-height: 1.4em; - width: 94%; - background: #f8f8f8; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 15px auto 15px auto; -} - -.diff_tree { - width: 95%; - background: #f0f0f0; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; -} - -.page_body > .list_head { - width: 98.5%; -} - -.page_body > .diff_tree { - width: 99.5%; -} - -.patch > .header { - width: 99%; -} - -.author .avatar, -.author_date .avatar { - position: relative; - top: 3px; -} - -.object_header .avatar { - border: 1px solid #D8D8D8; - float: right; -} - -.object_header td, -.object_header th { - vertical-align: top; -} - -/* Refs ----------------------------------------------------------------------------- */ - -span.refs span { - color: #707070; - display: inline-block; - margin: 0; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; -} - -span.refs span.ref { - color: #707070; - display: inline-block; - margin: 0; - background-color: #c4c4ff; - border: 1px solid #7878ff; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUnpolg7AAAAHJQTFRFAAAAVVWqZmbMVVXVYGDgbW3td3fuc3PzdHT0cHD1d3f6dHT6dnb7dHT7dnb8dnb8dnb9d3f9dnb+eHj+d3f+eHj+d3f+d3f+d3f+eHj+d3f+eHj+d3f+eHj+d3f+d3f+eHj+d3f+d3f+d3f+eHj/////V9oQhQAAACR0Uk5TAAIEBQcNDhMVGCotNTZAT217i5CgobvExtjZ4eLr7vP09ff7uqQ6cgAAAAFiS0dEJcMByQ8AAABUSURBVBjTpc43AoAwDENRh95bgNBM1f3PyOpslD++RSJ61YgH5M2IbIkn4GocSR1MZVBL4t2n4FgkbaxI8Sqph041WknZCWAIrcmEUbpf3lNe0N9u59YFYHnZ78gAAAAASUVORK5CYII=); - background-repeat: no-repeat; - padding-left: 18px; -} - -span.refs span.tag { - color: #707070; - display: inline-block; - margin: 0; - background-color: #ffffab; - border: 1px solid #d9d93b; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUZZ+h9RwAAAGZQTFRFAAAAtrYkwMBAwMBAx8c4yso11NQ71NQ51dU52Ng71tY519c719c719c62Ng719c719c62Ng72dk62Ng62Ng72Ng72dk62Ng72Ng62dk62dk72dk62Ng62dk72Ng72Ng72dk7////ou/AnQAAACB0Uk5TAAYHCxESLjRCWWlqa4uNkpissbrO19jc3ufs8vf6/f7atAU2AAAAAWJLR0QhxGwNFgAAAF1JREFUGFeNy0cOgCAABVGw94rY5d//lC7omhhn+ZIh5Gf1xPk0Zi5dAABROIQjSU/fsAXhDkCUljAv8jW2wlQpaixpo4Nj+dtatVpjkSJjLNaizRVpvhBCu/4h391jzw1lU12Z7wAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - padding-left: 18px; -} - -span.refs span.head { - color: #707070; - display: inline-block; - margin: 0; - background-color: #c4ffc4; - border: 1px solid #78ff78; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSYDsafX/gAAAUpJREFUOMvVkjFLA0EQhd/s7l06MSCihbV/wC5/QBDEIFYWprRIIQQJFqKFQi4kUbBQsFSwtrUQLQULUTBFLCzVIgimCXe7z0q5yIWcqfRVwzDzMTNvgL8mSUqWw3JOtFQJdsIwLDYyjdYgkEmkazl2oVtQWk36nn8AYBYASmFpxmizGtnoqO7Vb+M9KglEkASdpWU872nvVCiPRpuTnz2JIHGyqX3d0kZfR1G0Ht+g/do+FIhOBbLW3n/FNb/28D0puZ+dyL44ur1UoH5yzt2JyIj6UGdDgwrPhYzSagNEszJaeU/lWlylbmnaeGZZICsAppxzi6nt73HK85oQCMknOuarpno+FIjglVjZDXaCS2yDv3rIHlCb88FY0BlUl3hs7ektkhckb5DFWhoz+n12zr7ZPLpYUqLm0oBMn8NUzLhpAgjpWMS/1CcSJ3ykD7Rk1QAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - padding-left: 18px; -} - -span.refs a { - color: #4e4e4e; - font: 11px "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, monospace; - line-height: 18px; -} - -/* Diffs ----------------------------------------------------------------------------- */ - -div.diff.to_file a.path, -div.diff.to_file { - color: #007000; -} - -div.diff.from_file a.path, -div.diff.from_file { - color: #aa0000; -} - -.patch .header { - margin: 0; -} - -.patchset { - overflow-x: auto; - overflow-y: hidden; -} - -.chunk_header { - background: #eaf2f5; - color: #999; -} - -.rem { - background: #ffdddd; -} -.rem .marked { - background: #ffaaaa; -} -.add { - background: #ddffdd; -} -.add .marked { - background: #7dff7d; -} - -.extended_header { - width: 99.5%; -} - -div.chunk_block { - overflow: hidden; -} - -div.chunk_block div.old { - float: left; - width: 50%; - overflow: hidden; - border-right: 5px solid #EAF2F5; -} - -div.chunk_block.rem, -div.chunk_block.add { - background: transparent; -} - -div.chunk_block div.old .add, -div.chunk_block div.old .rem { - padding-right: 3px; -} - -div.chunk_block div.new .add, -div.chunk_block div.new .rem { - padding-left: 3px; -} - -div.chunk_block div.new { - margin-left: 50%; - width: 50%; - border-left: 5px solid #EAF2F5; -} - -/* Category ----------------------------------------------------------------------------- */ - -td.category { - background: #E6F1F6; /* old browsers */ - background: -moz-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); /* firefox */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#C8D8E7), color-stop(100%,#E6F1F3)); /* webkit */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C8D8E7', endColorstr='#E6F1F3',GradientType=0 ); /* ie */ - background: -o-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); - font-weight: bold; - border-bottom: 1px solid #D1D1D1; - border-top: 1px solid #D1D1D1; -} - -/* Age ----------------------------------------------------------------------------- */ - -/* noage: "No commits" */ -.project_list td.noage { - color: #cdcdcd; -} - -/* age2: 60*60*24*2 <= age */ -.project_list td.age2, .blame td.age2 { - color: #545454; -} - -/* age1: 60*60*2 <= age < 60*60*24*2 */ -.project_list td.age1 { - color: #009900; -} - -/* age0: age < 60*60*2 */ -.project_list td.age0 { - color: #009900; - font-weight: bold; -} - -/* File status ----------------------------------------------------------------------------- */ - -.diff_tree span.file_status.new { - color: #008000; -} - -table.diff_tree span.file_status.deleted { - color: #c00000; -} - -table.diff_tree span.file_status.moved, -table.diff_tree span.file_status.mode_chnge { - color: #545454; -} - -table.diff_tree span.file_status.copied { - color: #70a070; -} - -span.cntrl { - border: dashed #aaaaaa; - border-width: 1px; - padding: 0px 2px 0px 2px; - margin: 0px 2px 0px 2px; -} - -span.match { - background: #aaffaa; - color: #000; -} - -td.error { - color: red; - background: yellow; -} - -/* blob view */ - -td.pre, div.pre, div.diff { - white-space: pre-wrap; -} - -/* JavaScript-based timezone manipulation */ - -.popup { /* timezone selection UI */ - position: absolute; - /* "top: 0; right: 0;" would be better, if not for bugs in browsers */ - top: 0; left: 0; - border: 1px solid #d8d8d8; - padding: 2px; - background-color: #f0f0f0; - font-style: normal; - color: #545454; - cursor: auto; -} - -.close-button { /* close timezone selection UI without selecting */ - /* float doesn't work within absolutely positioned container, - * if width of container is not set explicitly */ - /* float: right; */ - position: absolute; - top: 0px; right: 0px; - border: 1px solid #ffaaaa; - margin: 1px 1px 1px 1px; - padding-bottom: 2px; - width: 12px; - height: 10px; - font-size: 9px; - font-weight: bold; - text-align: center; - background-color: #ffdddd; - cursor: pointer; -} - -/* Style definition generated by highlight 2.4.5, http://www.andre-simon.de/ */ - -/* Highlighting theme definition: */ - -.num { color:#6ecf36; } -.esc { color:#ff00ff; } -.str { color:#ff00d3; background-color: #edc9ec } -.dstr { color:#818100; } -.slc { color:#838183; font-style:italic; } -.com { color:#838183; font-style:italic; } -.dir { color:#008200; } -.sym { color:#000000; } -.line { color:#555555; } -.kwa { color:#666666; font-weight:bold; } -.kwb { color:#6b3099; } -.kwc { color:#d4663d; } -.kwd { color:#2928ff; } - -/**** Styles supplémentaires *****/ - -.readme div.toc { - float: right; - border: 1px solid black; - background-color: white; -} -.readme div.toc span.toctitle { - display: inline-block; - width: 100%; - text-align: center; - font-weight: bold; -} - -.readme table { - background-color: white; -} - -.readme table thead tr { - background-color: #ccc; -} - -.readme table tbody tr:nth-child(2n) { - background-color: #f8f8f8; -} - -.readme table td, .readme table th { - border: 1px solid black; -} diff --git a/overlays/gitweb/theme/gitweb.js b/overlays/gitweb/theme/gitweb.js deleted file mode 100644 index 72f3cfa..0000000 --- a/overlays/gitweb/theme/gitweb.js +++ /dev/null @@ -1,27 +0,0 @@ -function include(filename, onload) { - var head = document.getElementsByTagName('head')[0]; - var script = document.createElement('script'); - script.src = filename; - script.type = 'text/javascript'; - script.onload = script.onreadystatechange = function() { - if (script.readyState) { - if (script.readyState === 'complete' || script.readyState === 'loaded') { - script.onreadystatechange = null; - onload(); - } - } - else { - onload(); - } - } - head.appendChild(script); -} - -include('static/gitweb.js', function() {}); -include('//code.jquery.com/jquery-3.1.0.min.js', function() { - $("div.title").each(function(index, element) { - if ($(element).text() === "readme" || $(element).text() === " ") { - $(element).hide(); - } - }); -}); diff --git a/overlays/goaccess/default.nix b/overlays/goaccess/default.nix deleted file mode 100644 index 6b9758b..0000000 --- a/overlays/goaccess/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -self: super: { - goaccess = super.goaccess.overrideAttrs(old: rec { - name = "goaccess-${version}"; - version = "1.4"; - src = self.fetchurl { - url = "https://tar.goaccess.io/${name}.tar.gz"; - sha256 = "1gkpjg39f3afdwm9128jqjsfap07p8s027czzlnxfmi5hpzvkyz8"; - }; - configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ]; - buildInputs = old.buildInputs ++ [ self.tokyocabinet self.bzip2 ]; - }); - -} diff --git a/overlays/kanboard/default.nix b/overlays/kanboard/default.nix deleted file mode 100644 index 05f2882..0000000 --- a/overlays/kanboard/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -self: super: { - kanboard = { kanboard_config ? "/etc/kanboard/config.php" }: - super.kanboard.overrideAttrs(old: rec { - name = "kanboard-${version}"; - version = "1.2.9"; - src = self.fetchFromGitHub { - owner = "kanboard"; - repo = "kanboard"; - rev = "c4152316b14936556edf3bcc4d11f16ba31b8ae7"; - sha256 = "1hdr95cpxgdzrzhffs63gdl0g7122ma2zg8bkqwp42p5xphx0xan"; - }; - installPhase = '' - cp -a . $out - ln -s ${kanboard_config} $out/config.php - mv $out/data $out/dataold - ''; - }); -} diff --git a/overlays/khal/default.nix b/overlays/khal/default.nix deleted file mode 100644 index 597cc0e..0000000 --- a/overlays/khal/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -self: super: { - khal = super.khal.overridePythonAttrs(old: { - postPatch = '' - sed -i "s/Invalid value for \"ics\"/Invalid value for \\\'ics\\\'/" tests/cli_test.py - sed -i "s/Invalid value for \"\[ICS\]\"/Invalid value for \\\'[ICS]\\\'/" tests/cli_test.py - ''; - }); -} diff --git a/overlays/ledger/default.nix b/overlays/ledger/default.nix deleted file mode 100644 index 9f2df57..0000000 --- a/overlays/ledger/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -self: super: { - ledger = super.ledger.overrideAttrs(old: rec { - #name = "${old.pname}-${version}"; - #version = "3.2.1"; - #src = self.fetchFromGitHub { - # owner = "ledger"; - # repo = "ledger"; - # rev = "v${version}"; - # sha256 = "0x6jxwss3wwzbzlwmnwb8yzjk8f9wfawif4f1b74z2qg6hc4r7f6"; - #}; - patches = old.patches or [] ++ [ - (self.fetchpatch { - name = "xdgconfig.patch"; - url = "https://github.com/ledger/ledger/commit/c79674649dee7577d6061e3d0776922257520fd0.patch"; - sha256 = "0n82mjz9i17800r7vs45sxpss14rivsf1j8hrv7jal24iyfm01dz"; - excludes = [ "doc/NEWS.md" ]; - }) - ]; - }); -} diff --git a/overlays/lesspipe/default.nix b/overlays/lesspipe/default.nix deleted file mode 100644 index e53feae..0000000 --- a/overlays/lesspipe/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - lesspipe = super.lesspipe.overrideAttrs(old: { - configureFlags = (old.configureFlags or []) ++ [ "--yes" ]; - }); -} diff --git a/overlays/morph/default.nix b/overlays/morph/default.nix deleted file mode 100644 index 448f051..0000000 --- a/overlays/morph/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - morph = super.morph.overrideAttrs(old: { - patches = (old.patches or []) ++ [ ./verbose_nix.patch ./dry-run.patch ]; - }); -} diff --git a/overlays/morph/dry-run.patch b/overlays/morph/dry-run.patch deleted file mode 100644 index 2ff099e..0000000 --- a/overlays/morph/dry-run.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff --git a/morph.go b/morph.go -index a88414b..e5894df 100644 ---- a/morph.go -+++ b/morph.go -@@ -542,6 +542,7 @@ func getNixContext() *nix.NixContext { - return &nix.NixContext{ - EvalMachines: filepath.Join(assetRoot, assets.Friendly, "eval-machines.nix"), - ShowTrace: showTrace, -+ DryRun: *dryRun, - KeepGCRoot: *keepGCRoot, - AllowBuildShell: *allowBuildShell, - } -@@ -574,8 +575,10 @@ func buildHosts(hosts []nix.Host) (resultPath string, err error) { - return - } - -- fmt.Fprintln(os.Stderr, "nix result path: ") -- fmt.Println(resultPath) -+ if resultPath != "" { -+ fmt.Fprintln(os.Stderr, "nix result path: ") -+ fmt.Println(resultPath) -+ } - return - } - -diff --git a/nix/nix.go b/nix/nix.go -index 6a9cfd5..0f7884b 100644 ---- a/nix/nix.go -+++ b/nix/nix.go -@@ -49,6 +49,7 @@ type Deployment struct { - type NixContext struct { - EvalMachines string - ShowTrace bool -+ DryRun bool - KeepGCRoot bool - AllowBuildShell bool - } -@@ -269,6 +270,10 @@ func (ctx *NixContext) BuildMachines(deploymentPath string, hosts []Host, nixArg - args = append(args, "--show-trace") - } - -+ if ctx.DryRun { -+ args = append(args, "--dry-run") -+ } -+ - if nixBuildTargets != "" { - args = append(args, - "--arg", "buildTargets", nixBuildTargets) -@@ -308,6 +313,10 @@ func (ctx *NixContext) BuildMachines(deploymentPath string, hosts []Host, nixArg - return resultPath, errors.New(errorMessage) - } - -+ if ctx.DryRun { -+ return "", err -+ } -+ - resultPath, err = os.Readlink(resultLinkPath) - if err != nil { - return "", err diff --git a/overlays/morph/verbose_nix.patch b/overlays/morph/verbose_nix.patch deleted file mode 100644 index 389a79c..0000000 --- a/overlays/morph/verbose_nix.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/nix/nix.go b/nix/nix.go -index bb63870..7fe04aa 100644 ---- a/nix/nix.go -+++ b/nix/nix.go -@@ -347,6 +347,7 @@ func Push(ctx *ssh.SSHContext, host Host, paths ...string) (err error) { - options := mkOptions(host) - for _, path := range paths { - args := []string{ -+ "-v", - "copy", - path, - "--to", "ssh://" + userArg + host.TargetHost + keyArg, diff --git a/overlays/neomutt/default.nix b/overlays/neomutt/default.nix deleted file mode 100644 index f03290a..0000000 --- a/overlays/neomutt/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - neomutt = super.neomutt.overrideAttrs(old: { - patches = old.patches or [] ++ [ - ./tx.patch - ]; - }); -} diff --git a/overlays/neomutt/tx.patch b/overlays/neomutt/tx.patch deleted file mode 100644 index c8736df..0000000 --- a/overlays/neomutt/tx.patch +++ /dev/null @@ -1,44 +0,0 @@ -commit 61ae454e1579d02736c48e3468a3237429214cdf -Author: Ismaël Bouya -Date: Tue Jun 2 13:03:04 2020 +0200 - - Add %tx to index_format - -diff --git a/hdrline.c b/hdrline.c -index 9224c6641..1594ed729 100644 ---- a/hdrline.c -+++ b/hdrline.c -@@ -575,6 +575,7 @@ static const char *index_format_str(char *buf, size_t buflen, size_t col, int co - const struct Address *from = TAILQ_FIRST(&e->env->from); - const struct Address *to = TAILQ_FIRST(&e->env->to); - const struct Address *cc = TAILQ_FIRST(&e->env->cc); -+ const struct Address *x_orig_to = TAILQ_FIRST(&e->env->x_original_to); - - buf[0] = '\0'; - switch (op) -@@ -1192,13 +1193,18 @@ static const char *index_format_str(char *buf, size_t buflen, size_t col, int co - - case 't': - tmp[0] = '\0'; -- if (!check_for_mailing_list(&e->env->to, "To ", tmp, sizeof(tmp)) && -- !check_for_mailing_list(&e->env->cc, "Cc ", tmp, sizeof(tmp))) -- { -- if (to) -- snprintf(tmp, sizeof(tmp), "To %s", mutt_get_name(to)); -- else if (cc) -- snprintf(tmp, sizeof(tmp), "Cc %s", mutt_get_name(cc)); -+ if (src[0] == 'x') { -+ snprintf(tmp, sizeof(tmp), "%s", mutt_get_name(x_orig_to)); -+ src++; -+ } else { -+ if (!check_for_mailing_list(&e->env->to, "To ", tmp, sizeof(tmp)) && -+ !check_for_mailing_list(&e->env->cc, "Cc ", tmp, sizeof(tmp))) -+ { -+ if (to) -+ snprintf(tmp, sizeof(tmp), "To %s", mutt_get_name(to)); -+ else if (cc) -+ snprintf(tmp, sizeof(tmp), "Cc %s", mutt_get_name(cc)); -+ } - } - mutt_format_s(buf, buflen, prec, tmp); - break; diff --git a/overlays/nix-direnv/default.nix b/overlays/nix-direnv/default.nix deleted file mode 100644 index c4c96e2..0000000 --- a/overlays/nix-direnv/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - nix-direnv = super.nix-direnv.overrideAttrs (old: { - postPatch = old.postPatch + '' - sed -i -e 's/TEMPDIR "$old_tmp"/TEMPDIR "$old_tmpdir"/' direnvrc - ''; - }); -} diff --git a/overlays/nixops/default.nix b/overlays/nixops/default.nix deleted file mode 100644 index 14aec3b..0000000 --- a/overlays/nixops/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -self: super: { - nixops = super.nixops.overrideAttrs (old: { - patches = [ - ./fix_glibc.patch - (self.fetchpatch { - name = "hetzner_cloud.patch"; - url = "https://github.com/goodraven/nixops/commit/272e50d0b0262e49cdcaad42cdab57aad183d1c2.patch"; - sha256 = "12wcrb0155ald52m7fbr2m5rrxdnwdwripq91ckscgsk42mdc517"; - }) - ]; - preConfigure = (old.preConfigure or "") + '' - # https://github.com/NixOS/nixops/issues/1216 - sed -i -e "/Register the paths in the Nix database./s/#.*$/export USER=root/" nix/libvirtd-image.nix - - sed -i -e '/^import sys$/s/$/; sys.tracebacklimit = 0/' scripts/nixops - sed -i -e "/'keyFile'/s/'path'/'string'/" nixops/backends/__init__.py - sed -i -e "/security.initialRootPassword/d" nix/hetzner.nix - ''; - }); -} diff --git a/overlays/nixops/fix_glibc.patch b/overlays/nixops/fix_glibc.patch deleted file mode 100644 index 1aeb093..0000000 --- a/overlays/nixops/fix_glibc.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/nix/hetzner-bootstrap.nix b/nix/hetzner-bootstrap.nix -index 035e6f9..def42a1 100644 ---- a/nix/hetzner-bootstrap.nix -+++ b/nix/hetzner-bootstrap.nix -@@ -3,9 +3,7 @@ with import { system = "x86_64-linux"; }; - let - pkgsNative = import {}; - -- nixpart = python2Packages.nixpart0.override { -- useNixUdev = false; -- }; -+ nixpart = python2Packages.nixpart0; - - generateConfig = (import { - configuration = {}; diff --git a/overlays/nixops/hetzner_cloud.patch b/overlays/nixops/hetzner_cloud.patch deleted file mode 100644 index b75c116..0000000 --- a/overlays/nixops/hetzner_cloud.patch +++ /dev/null @@ -1,480 +0,0 @@ -From 272e50d0b0262e49cdcaad42cdab57aad183d1c2 Mon Sep 17 00:00:00 2001 -From: goodraven - -Date: Thu, 3 May 2018 22:24:58 -0700 -Subject: [PATCH] Initial commit adding support for hetzner cloud - -This is based on the digital ocean backend. It also uses nixos-infect. I extended nixos-infect to be generic -for both backends. - -Fixes #855 ---- - examples/trivial-hetzner-cloud.nix | 12 ++ - nix/eval-machine-info.nix | 1 + - nix/hetzner-cloud.nix | 56 +++++++ - nix/options.nix | 1 + - nixops/backends/hetzner_cloud.py | 230 +++++++++++++++++++++++++++++ - nixops/data/nixos-infect | 77 +++++++--- - 6 files changed, 354 insertions(+), 23 deletions(-) - create mode 100644 examples/trivial-hetzner-cloud.nix - create mode 100644 nix/hetzner-cloud.nix - create mode 100644 nixops/backends/hetzner_cloud.py - -diff --git a/examples/trivial-hetzner-cloud.nix b/examples/trivial-hetzner-cloud.nix -new file mode 100644 -index 000000000..c61add6bb ---- /dev/null -+++ b/examples/trivial-hetzner-cloud.nix -@@ -0,0 +1,12 @@ -+{ -+ resources.sshKeyPairs.ssh-key = {}; -+ -+ machine = { config, pkgs, ... }: { -+ services.openssh.enable = true; -+ -+ deployment.targetEnv = "hetznerCloud"; -+ deployment.hetznerCloud.serverType = "cx11"; -+ -+ networking.firewall.allowedTCPPorts = [ 22 ]; -+ }; -+} -diff --git a/nix/eval-machine-info.nix b/nix/eval-machine-info.nix -index 2884b4b47..6a7205786 100644 ---- a/nix/eval-machine-info.nix -+++ b/nix/eval-machine-info.nix -@@ -309,6 +309,7 @@ rec { - digitalOcean = optionalAttrs (v.config.deployment.targetEnv == "digitalOcean") v.config.deployment.digitalOcean; - gce = optionalAttrs (v.config.deployment.targetEnv == "gce") v.config.deployment.gce; - hetzner = optionalAttrs (v.config.deployment.targetEnv == "hetzner") v.config.deployment.hetzner; -+ hetznerCloud = optionalAttrs (v.config.deployment.targetEnv == "hetznerCloud") v.config.deployment.hetznerCloud; - container = optionalAttrs (v.config.deployment.targetEnv == "container") v.config.deployment.container; - route53 = v.config.deployment.route53; - virtualbox = -diff --git a/nix/hetzner-cloud.nix b/nix/hetzner-cloud.nix -new file mode 100644 -index 000000000..21d148c1a ---- /dev/null -+++ b/nix/hetzner-cloud.nix -@@ -0,0 +1,56 @@ -+{ config, pkgs, lib, utils, ... }: -+ -+with utils; -+with lib; -+with import ./lib.nix lib; -+ -+let -+ cfg = config.deployment.hetznerCloud; -+in -+{ -+ ###### interface -+ options = { -+ -+ deployment.hetznerCloud.authToken = mkOption { -+ default = ""; -+ example = "8b2f4e96af3997853bfd4cd8998958eab871d9614e35d63fab45a5ddf981c4da"; -+ type = types.str; -+ description = '' -+ The API auth token. We're checking the environment for -+ HETZNER_CLOUD_AUTH_TOKEN first and if that is -+ not set we try this auth token. -+ ''; -+ }; -+ -+ deployment.hetznerCloud.datacenter = mkOption { -+ example = "fsn1-dc8"; -+ default = null; -+ type = types.nullOr types.str; -+ description = '' -+ The datacenter. -+ ''; -+ }; -+ -+ deployment.hetznerCloud.location = mkOption { -+ example = "fsn1"; -+ default = null; -+ type = types.nullOr types.str; -+ description = '' -+ The location. -+ ''; -+ }; -+ -+ deployment.hetznerCloud.serverType = mkOption { -+ example = "cx11"; -+ type = types.str; -+ description = '' -+ Name or id of server types. -+ ''; -+ }; -+ }; -+ -+ config = mkIf (config.deployment.targetEnv == "hetznerCloud") { -+ nixpkgs.system = mkOverride 900 "x86_64-linux"; -+ services.openssh.enable = true; -+ }; -+} -diff --git a/nix/options.nix b/nix/options.nix -index 0866c3ab8..db021f74d 100644 ---- a/nix/options.nix -+++ b/nix/options.nix -@@ -22,6 +22,7 @@ in - ./keys.nix - ./gce.nix - ./hetzner.nix -+ ./hetzner-cloud.nix - ./container.nix - ./libvirtd.nix - ]; -diff --git a/nixops/backends/hetzner_cloud.py b/nixops/backends/hetzner_cloud.py -new file mode 100644 -index 000000000..a2cb176b9 ---- /dev/null -+++ b/nixops/backends/hetzner_cloud.py -@@ -0,0 +1,230 @@ -+# -*- coding: utf-8 -*- -+""" -+A backend for hetzner cloud. -+ -+This backend uses nixos-infect (which uses nixos LUSTRATE) to infect a -+hetzner cloud instance. The setup requires two reboots, one for -+the infect itself, another after we pushed the nixos image. -+""" -+import os -+import os.path -+import time -+import socket -+ -+import requests -+ -+import nixops.resources -+from nixops.backends import MachineDefinition, MachineState -+from nixops.nix_expr import Function, RawValue -+import nixops.util -+import nixops.known_hosts -+ -+infect_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data', 'nixos-infect')) -+ -+API_HOST = 'api.hetzner.cloud' -+ -+class ApiError(Exception): -+ pass -+ -+class ApiNotFoundError(ApiError): -+ pass -+ -+class HetznerCloudDefinition(MachineDefinition): -+ @classmethod -+ def get_type(cls): -+ return "hetznerCloud" -+ -+ def __init__(self, xml, config): -+ MachineDefinition.__init__(self, xml, config) -+ self.auth_token = config["hetznerCloud"]["authToken"] -+ self.location = config["hetznerCloud"]["location"] -+ self.datacenter = config["hetznerCloud"]["datacenter"] -+ self.server_type = config["hetznerCloud"]["serverType"] -+ -+ def show_type(self): -+ return "{0} [{1}]".format(self.get_type(), self.location or self.datacenter or 'any location') -+ -+ -+class HetznerCloudState(MachineState): -+ @classmethod -+ def get_type(cls): -+ return "hetznerCloud" -+ -+ state = nixops.util.attr_property("state", MachineState.MISSING, int) # override -+ public_ipv4 = nixops.util.attr_property("publicIpv4", None) -+ public_ipv6 = nixops.util.attr_property("publicIpv6", None) -+ location = nixops.util.attr_property("hetznerCloud.location", None) -+ datacenter = nixops.util.attr_property("hetznerCloud.datacenter", None) -+ server_type = nixops.util.attr_property("hetznerCloud.serverType", None) -+ auth_token = nixops.util.attr_property("hetznerCloud.authToken", None) -+ server_id = nixops.util.attr_property("hetznerCloud.serverId", None, int) -+ -+ def __init__(self, depl, name, id): -+ MachineState.__init__(self, depl, name, id) -+ self.name = name -+ -+ def get_ssh_name(self): -+ return self.public_ipv4 -+ -+ def get_ssh_flags(self, *args, **kwargs): -+ super_flags = super(HetznerCloudState, self).get_ssh_flags(*args, **kwargs) -+ return super_flags + [ -+ '-o', 'UserKnownHostsFile=/dev/null', -+ '-o', 'StrictHostKeyChecking=no', -+ '-i', self.get_ssh_private_key_file(), -+ ] -+ -+ def get_physical_spec(self): -+ return Function("{ ... }", { -+ 'imports': [ RawValue('') ], -+ ('boot', 'loader', 'grub', 'device'): 'nodev', -+ ('fileSystems', '/'): { 'device': '/dev/sda1', 'fsType': 'ext4'}, -+ ('users', 'extraUsers', 'root', 'openssh', 'authorizedKeys', 'keys'): [self.depl.active_resources.get('ssh-key').public_key], -+ }) -+ -+ def get_ssh_private_key_file(self): -+ return self.write_ssh_private_key(self.depl.active_resources.get('ssh-key').private_key) -+ -+ def create_after(self, resources, defn): -+ # make sure the ssh key exists before we do anything else -+ return { -+ r for r in resources if -+ isinstance(r, nixops.resources.ssh_keypair.SSHKeyPairState) -+ } -+ -+ def get_auth_token(self): -+ return os.environ.get('HETZNER_CLOUD_AUTH_TOKEN', self.auth_token) -+ -+ def _api(self, path, method=None, data=None, json=True): -+ """Basic wrapper around requests that handles auth and serialization.""" -+ assert path[0] == '/' -+ url = 'https://%s%s' % (API_HOST, path) -+ token = self.get_auth_token() -+ if not token: -+ raise Exception('No hetzner cloud auth token set') -+ headers = { -+ 'Authorization': 'Bearer '+self.get_auth_token(), -+ } -+ res = requests.request( -+ method=method, -+ url=url, -+ json=data, -+ headers=headers) -+ -+ if res.status_code == 404: -+ raise ApiNotFoundError('Not Found: %r' % path) -+ elif not res.ok: -+ raise ApiError('Response for %s %s has status code %d: %s' % (method, path, res.status_code, res.content)) -+ if not json: -+ return -+ try: -+ res_data = res.json() -+ except ValueError as e: -+ raise ApiError('Response for %s %s has invalid JSON (%s): %r' % (method, path, e, res.content)) -+ return res_data -+ -+ -+ def destroy(self, wipe=False): -+ if not self.server_id: -+ self.log('server {} was never made'.format(self.name)) -+ return -+ self.log('destroying server {} with id {}'.format(self.name, self.server_id)) -+ try: -+ res = self._api('/v1/servers/%s' % (self.server_id), method='DELETE') -+ except ApiNotFoundError: -+ self.log("server not found - assuming it's been destroyed already") -+ -+ self.public_ipv4 = None -+ self.server_id = None -+ -+ return True -+ -+ def _create_ssh_key(self, public_key): -+ """Create or get an ssh key and return an id.""" -+ public_key = public_key.strip() -+ res = self._api('/v1/ssh_keys', method='GET') -+ name = 'nixops-%s-%s' % (self.depl.uuid, self.name) -+ deletes = [] -+ for key in res['ssh_keys']: -+ if key['public_key'].strip() == public_key: -+ return key['id'] -+ if key['name'] == name: -+ deletes.append(key['id']) -+ for d in deletes: -+ # This reply is empty, so don't decode json. -+ self._api('/v1/ssh_keys/%d' % d, method='DELETE', json=False) -+ res = self._api('/v1/ssh_keys', method='POST', data={ -+ 'name': name, -+ 'public_key': public_key, -+ }) -+ return res['ssh_key']['id'] -+ -+ def create(self, defn, check, allow_reboot, allow_recreate): -+ ssh_key = self.depl.active_resources.get('ssh-key') -+ if ssh_key is None: -+ raise Exception('Please specify a ssh-key resource (resources.sshKeyPairs.ssh-key = {}).') -+ -+ self.set_common_state(defn) -+ -+ if self.server_id is not None: -+ return -+ -+ ssh_key_id = self._create_ssh_key(ssh_key.public_key) -+ -+ req = { -+ 'name': self.name, -+ 'server_type': defn.server_type, -+ 'start_after_create': True, -+ 'image': 'debian-9', -+ 'ssh_keys': [ -+ ssh_key_id, -+ ], -+ } -+ -+ if defn.datacenter: -+ req['datacenter'] = defn.datacenter -+ elif defn.location: -+ req['location'] = defn.location -+ -+ self.log_start("creating server ...") -+ create_res = self._api('/v1/servers', method='POST', data=req) -+ self.server_id = create_res['server']['id'] -+ self.public_ipv4 = create_res['server']['public_net']['ipv4']['ip'] -+ self.public_ipv6 = create_res['server']['public_net']['ipv6']['ip'] -+ self.datacenter = create_res['server']['datacenter']['name'] -+ self.location = create_res['server']['datacenter']['location']['name'] -+ -+ action = create_res['action'] -+ action_path = '/v1/servers/%d/actions/%d' % (self.server_id, action['id']) -+ -+ while action['status'] == 'running': -+ time.sleep(1) -+ res = self._api(action_path, method='GET') -+ action = res['action'] -+ -+ if action['status'] != 'success': -+ raise Exception('unexpected status: %s' % action['status']) -+ -+ self.log_end("{}".format(self.public_ipv4)) -+ -+ self.wait_for_ssh() -+ self.log_start("running nixos-infect") -+ self.run_command('bash &1', stdin=open(infect_path)) -+ self.reboot_sync() -+ -+ def reboot(self, hard=False): -+ if hard: -+ self.log("sending hard reset to server...") -+ res = self._api('/v1/servers/%d/actions/reset' % self.server_id, method='POST') -+ action = res['action'] -+ action_path = '/v1/servers/%d/actions/%d' % (self.server_id, action['id']) -+ while action['status'] == 'running': -+ time.sleep(1) -+ res = self._api(action_path, method='GET') -+ action = res['action'] -+ if action['status'] != 'success': -+ raise Exception('unexpected status: %s' % action['status']) -+ self.wait_for_ssh() -+ self.state = self.STARTING -+ else: -+ MachineState.reboot(self, hard=hard) -diff --git a/nixops/data/nixos-infect b/nixops/data/nixos-infect -index 66634357b..437a2ec61 100644 ---- a/nixops/data/nixos-infect -+++ b/nixops/data/nixos-infect -@@ -68,26 +68,49 @@ makeConf() { - } - EOF - # (nixos-generate-config will add qemu-user and bind-mounts, so avoid) -+ local disk -+ if [ -e /dev/sda ]; then -+ disk=/dev/sda -+ else -+ disk=/dev/vda -+ fi - cat > /etc/nixos/hardware-configuration.nix << EOF - { ... }: - { - imports = [ ]; -- boot.loader.grub.device = "/dev/vda"; -- fileSystems."/" = { device = "/dev/vda1"; fsType = "ext4"; }; -+ boot.loader.grub.device = "${disk}"; -+ fileSystems."/" = { device = "${disk}1"; fsType = "ext4"; }; - } - EOF - - local IFS=$'\n' -- ens3_ip4s=($(ip address show dev eth0 | grep 'inet ' | sed -r 's|.*inet ([0-9.]+)/([0-9]+).*|{ address="\1"; prefixLength=\2; }|')) -- ens3_ip6s=($(ip address show dev eth0 | grep 'inet6 .*global' | sed -r 's|.*inet6 ([0-9a-f:]+)/([0-9]+).*|{ address="\1"; prefixLength=\2; }|')) -- ens4_ip4s=($(ip address show dev eth1 | grep 'inet ' | sed -r 's|.*inet ([0-9.]+)/([0-9]+).*|{ address="\1"; prefixLength=\2; }|')) -- ens4_ip6s=($(ip address show dev eth1 | grep 'inet6 .*global' | sed -r 's|.*inet6 ([0-9a-f:]+)/([0-9]+).*|{ address="\1"; prefixLength=\2; }|')) -- gateway=($(ip route show dev eth0 | grep default | sed -r 's|default via ([0-9.]+).*|\1|')) -- gateway6=($(ip -6 route show dev eth0 | grep default | sed -r 's|default via ([0-9a-f:]+).*|\1|')) -- ether0=($(ip address show dev eth0 | grep link/ether | sed -r 's|.*link/ether ([0-9a-f:]+) .*|\1|')) -- ether1=($(ip address show dev eth1 | grep link/ether | sed -r 's|.*link/ether ([0-9a-f:]+) .*|\1|')) -+ gateway=($(ip route show | grep default | sed -r 's|default via ([0-9.]+).*|\1|')) -+ gateway6=($(ip -6 route show | grep default | sed -r 's|default via ([0-9a-f:]+).*|\1|')) -+ interfaces=($(ip link | awk -F ': ' '/^[0-9]*: / {if ($2 != "lo") {print $2}}')) - nameservers=($(grep ^nameserver /etc/resolv.conf | cut -f2 -d' ')) - -+ # Predict the predictable name for each interface since that is enabled in -+ # the nixos system. -+ declare -A predictable_names -+ for interface in ${interfaces[@]}; do -+ # udevadm prints out the candidate names which will be selected if -+ # available in this order. -+ local name=$(udevadm info /sys/class/net/$interface | awk -F = ' -+ /^E: ID_NET_NAME_FROM_DATABASE=/ {arr[1]=$2} -+ /^E: ID_NET_NAME_ONBOARD=/ {arr[2]=$2} -+ /^E: ID_NET_NAME_SLOT=/ {arr[3]=$2} -+ /^E: ID_NET_NAME_PATH=/ {arr[4]=$2} -+ /^E: ID_NET_NAME_MAC=/ {arr[5]=$2} -+ END {for (i=1;i<6;i++) {if (length(arr[i]) > 0) { print arr[i]; break}}}') -+ if [ -z "$name" ]; then -+ echo Could not determine predictable name for interface $interface -+ fi -+ predictable_names[$interface]=$name -+ done -+ -+ # Take a gamble on the first interface being able to reach the gateway. -+ local default_interface=${predictable_names[${interfaces[0]}]} -+ - cat > /etc/nixos/networking.nix << EOF - { ... }: { - # This file was populated at runtime with the networking -@@ -96,25 +119,27 @@ EOF - nameservers = [$(for a in ${nameservers[@]}; do echo -n " - \"$a\""; done) - ]; -- defaultGateway = "${gateway}"; -- defaultGateway6 = "${gateway6}"; -+ defaultGateway = {address = "${gateway}"; interface = "${default_interface}";}; -+ defaultGateway6 = {address = "${gateway6}"; interface = "${default_interface}";}; - interfaces = { -- ens3 = { -- ip4 = [$(for a in ${ens3_ip4s[@]}; do echo -n " -- $a"; done) -- ]; -- ip6 = [$(for a in ${ens3_ip6s[@]}; do echo -n " -- $a"; done) -- ]; -- }; -- ens4 = { -- ip4 = [$(for a in ${ens4_ip4s[@]}; do echo -n " -+EOF -+ -+ for interface in ${interfaces[@]}; do -+ ip4s=($(ip address show dev $interface | grep 'inet ' | sed -r 's|.*inet ([0-9.]+)/([0-9]+).*|{ address="\1"; prefixLength=\2; }|')) -+ ip6s=($(ip address show dev $interface | grep 'inet6 .*global' | sed -r 's|.*inet6 ([0-9a-f:]+)/([0-9]+).*|{ address="\1"; prefixLength=\2; }|')) -+ cat >> /etc/nixos/networking.nix << EOF -+ ${predictable_names[$interface]} = { -+ ip4 = [$(for a in ${ip4s[@]}; do echo -n " - $a"; done) - ]; -- ip6 = [$(for a in ${ens4_ip6s[@]}; do echo -n " -+ ip6 = [$(for a in ${ip6s[@]}; do echo -n " - $a"; done) - ]; - }; -+EOF -+ done -+ -+ cat >> /etc/nixos/networking.nix << EOF - }; - }; - } -@@ -154,6 +179,12 @@ export HOME="/root" - groupadd -r nixbld -g 30000 - seq 1 10 | xargs -I{} useradd -c "Nix build user {}" -d /var/empty -g nixbld -G nixbld -M -N -r -s `which nologin` nixbld{} - -+if ! which curl >/dev/null 2>/dev/null; then -+ if which apt-get >/dev/null 2>/dev/null; then -+ apt-get update && apt-get install -y curl -+ fi -+fi -+ - curl https://nixos.org/nix/install | sh - - source ~/.nix-profile/etc/profile.d/nix.sh diff --git a/overlays/pass/default.nix b/overlays/pass/default.nix deleted file mode 100644 index ad8facd..0000000 --- a/overlays/pass/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - pass = super.pass.overrideAttrs (old: rec { - patches = old.patches ++ [ ./pass-fix-pass-init.patch ]; - }); -} diff --git a/overlays/pass/pass-fix-pass-init.patch b/overlays/pass/pass-fix-pass-init.patch deleted file mode 100644 index 10a76c1..0000000 --- a/overlays/pass/pass-fix-pass-init.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 33e8f1cd0065639a948d7b5ba3f93d43bdf7f3be Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= -Date: Sun, 11 Nov 2018 19:47:33 +0100 -Subject: [PATCH] Fix pass init for some gpg keys - -This fixes the pass init for gpg keys which have their main key as -encryption key. This may happen for instance with RSA keys and specific -configuration. ---- - src/password-store.sh | 2 +- - tests/t0300-reencryption.sh | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/password-store.sh b/src/password-store.sh -index d89d455..44d122e 100755 ---- a/src/password-store.sh -+++ b/src/password-store.sh -@@ -124,7 +124,7 @@ reencrypt_path() { - IFS=";" eval 'GPG_RECIPIENTS+=( $group )' # http://unix.stackexchange.com/a/92190 - unset "GPG_RECIPIENTS[$index]" - done -- gpg_keys="$($GPG $PASSWORD_STORE_GPG_OPTS --list-keys --with-colons "${GPG_RECIPIENTS[@]}" | sed -n 's/^sub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u)" -+ gpg_keys="$($GPG $PASSWORD_STORE_GPG_OPTS --list-keys --with-colons "${GPG_RECIPIENTS[@]}" | sed -n 's/^[ps]ub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u)" - fi - current_keys="$(LC_ALL=C $GPG $PASSWORD_STORE_GPG_OPTS -v --no-secmem-warning --no-permission-warning --decrypt --list-only --keyid-format long "$passfile" 2>&1 | sed -n 's/^gpg: public key is \([A-F0-9]\+\)$/\1/p' | LC_ALL=C sort -u)" - -diff --git a/tests/t0300-reencryption.sh b/tests/t0300-reencryption.sh -index 3c88987..57d873f 100755 ---- a/tests/t0300-reencryption.sh -+++ b/tests/t0300-reencryption.sh -@@ -7,7 +7,7 @@ cd "$(dirname "$0")" - INITIAL_PASSWORD="will this password live? a big question indeed..." - - canonicalize_gpg_keys() { -- $GPG --list-keys --with-colons "$@" | sed -n 's/sub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u -+ $GPG --list-keys --with-colons "$@" | sed -n 's/[ps]ub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u - } - gpg_keys_from_encrypted_file() { - $GPG -v --no-secmem-warning --no-permission-warning --decrypt --list-only --keyid-format long "$1" 2>&1 | grep "public key is" | cut -d ' ' -f 5 | LC_ALL=C sort -u --- -2.19.1 - diff --git a/overlays/pelican/default.nix b/overlays/pelican/default.nix deleted file mode 100644 index 4f8aece..0000000 --- a/overlays/pelican/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - pelican = with self.python3Packages; - pelican.overrideAttrs(old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ pyyaml markdown ]; - doInstallCheck = false; - }); -} diff --git a/overlays/php-packages/default.nix b/overlays/php-packages/default.nix deleted file mode 100644 index 90fb613..0000000 --- a/overlays/php-packages/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -self: super: rec { - myPhpPackages.mysqli_pam = self.php74.extensions.mysqli.overrideAttrs(old: { - configureFlags = [ "--with-mysqli=${self.libmysqlclient_pam}/bin/mysql_config" "--with-mysql-sock=/run/mysqld/mysqld.sock" ]; - patches = old.patches or [] ++ [ ./mysqli_patch.patch ]; -}); -} diff --git a/overlays/php-packages/mysqli_patch.patch b/overlays/php-packages/mysqli_patch.patch deleted file mode 100644 index a8f03e3..0000000 --- a/overlays/php-packages/mysqli_patch.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/ext/mysqli/mysqli_nonapi.c -+++ b/ext/mysqli/mysqli_nonapi.c -@@ -263,7 +263,7 @@ void mysqli_common_connect(INTERNAL_FUNC - php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); - - #if !defined(MYSQLI_USE_MYSQLND) -- mysql->mysql->reconnect = MyG(reconnect); -+ mysql_options(mysql->mysql, MYSQL_OPT_RECONNECT, (my_bool *)&MyG(reconnect)); - #endif - - mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&MyG(allow_local_infile)); diff --git a/overlays/postfix/default.nix b/overlays/postfix/default.nix deleted file mode 100644 index c77e4cf..0000000 --- a/overlays/postfix/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -self: super: { - postfix = super.postfix.override { withMySQL = true; withPgSQL = true; }; -} diff --git a/overlays/procps-ng/default.nix b/overlays/procps-ng/default.nix deleted file mode 100644 index 2d43a11..0000000 --- a/overlays/procps-ng/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - procps-ng = super.procps-ng.overrideAttrs(old: { - configureFlags = old.configureFlags ++ [ "--enable-watch8bit" ]; - }); -} diff --git a/overlays/python-packages/buildbot.nix b/overlays/python-packages/buildbot.nix deleted file mode 100644 index ccf2f6a..0000000 --- a/overlays/python-packages/buildbot.nix +++ /dev/null @@ -1,8 +0,0 @@ -self: super: { - pythonOverrides = self.buildPythonOverrides (pyself: pysuper: { - buildbot-plugins = pysuper.buildbot-plugins // { - buildslist = self.python3PackagesPlus.buildbot-plugins.buildslist; - }; - buildbot-full = pysuper.buildbot-full.withPlugins [ pyself.buildbot-plugins.buildslist ]; - }) super.pythonOverrides; -} diff --git a/overlays/python-packages/default.nix b/overlays/python-packages/default.nix deleted file mode 100644 index 601eed1..0000000 --- a/overlays/python-packages/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -let - fromMyPythonPackages = name: self: super: { - pythonOverrides = self.buildPythonOverrides (pyself: pysuper: { - "${name}" = self."${pyself.python.pname}PackagesPlus"."${name}"; - }) super.pythonOverrides; - }; -in -{ - # https://github.com/NixOS/nixpkgs/issues/44426 - # needs to come before all other in alphabetical order (or make use of - # lib.mkBefore) - __pythonOverlayFix = self: super: let - pyNames = [ "python3" "python36" "python37" "python38" ]; - overriddenPython = name: [ - { inherit name; value = super.${name}.override { packageOverrides = self.pythonOverrides; }; } - { name = "${name}Packages"; value = self.recurseIntoAttrs self.${name}.pkgs; } - ]; - overriddenPythons = builtins.concatLists (map overriddenPython pyNames); - in { - pythonOverrides = pyself: pysuper: {}; - buildPythonOverrides = newOverrides: currentOverrides: super.lib.composeExtensions newOverrides currentOverrides; - } // super.lib.attrsets.listToAttrs overriddenPythons; - - - blivet3 = fromMyPythonPackages "blivet3"; - buildbot = import ./buildbot.nix; - wokkel = fromMyPythonPackages "wokkel"; - pymilter = fromMyPythonPackages "pymilter"; -} diff --git a/overlays/sc-im/default.nix b/overlays/sc-im/default.nix deleted file mode 100644 index f728655..0000000 --- a/overlays/sc-im/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -self: super: { - sc-im = super.sc-im.overrideAttrs (old: { - buildPhase = '' - cd src - sed -i Makefile -e 's@\...name.info@.local/state/$(name)info@' - cd .. - '' + old.buildPhase; - }); -} diff --git a/overlays/shaarli/default.nix b/overlays/shaarli/default.nix deleted file mode 100644 index 3b37ee8..0000000 --- a/overlays/shaarli/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -self: super: { - shaarli = varDir: super.shaarli.overrideAttrs (old: rec { - version = "0.10.2"; - src = self.fetchurl { - url = "https://github.com/shaarli/Shaarli/releases/download/v${version}/shaarli-v${version}-full.tar.gz"; - sha256 = "0h8sspj7siy3vgpi2i3gdrjcr5935fr4dfwq2zwd70sjx2sh9s78"; - }; - patchPhase = ""; - patches = (old.patches or []) ++ [ ./shaarli_ldap.patch ]; - installPhase = (old.installPhase or "") + '' - cp .htaccess $out/ - ln -sf ${varDir}/{cache,pagecache,tmp,data} $out/ - ''; - }); -} diff --git a/overlays/shaarli/shaarli_ldap.patch b/overlays/shaarli/shaarli_ldap.patch deleted file mode 100644 index e66a54f..0000000 --- a/overlays/shaarli/shaarli_ldap.patch +++ /dev/null @@ -1,425 +0,0 @@ -commit a19c24edc1057bd411821f9e3e7d1d309d38b1bb -Author: Ismaël Bouya -Date: Sun Feb 3 20:58:18 2019 +0100 - - Add ldap connection - -diff --git a/.htaccess b/.htaccess -index 4c00427..5acd708 100644 ---- a/.htaccess -+++ b/.htaccess -@@ -6,10 +6,23 @@ RewriteEngine On - # Prevent accessing subdirectories not managed by SCM - RewriteRule ^(.git|doxygen|vendor) - [F] - -+RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ -+RewriteRule ^(.*) - [E=BASE:%1] -+ -+RewriteCond %{ENV:REDIRECT_BASE} (.+) -+RewriteRule .* - [E=BASE:%1] -+ - # Forward the "Authorization" HTTP header - RewriteCond %{HTTP:Authorization} ^(.*) - RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] - -+RewriteCond %{REQUEST_FILENAME} !-f -+RewriteCond %{REQUEST_FILENAME} !-d -+RewriteRule ^((?!api/)[^/]*)/?(.*)$ $2?%{QUERY_STRING} [E=USERSPACE:$1] -+ -+RewriteCond %{ENV:REDIRECT_USERSPACE} (.+) -+RewriteRule .* - [E=USERSPACE:%1] -+ - # REST API - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d -diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php -index 911873a..f21a1ef 100644 ---- a/application/ApplicationUtils.php -+++ b/application/ApplicationUtils.php -@@ -191,6 +191,9 @@ public static function checkResourcePermissions($conf) - $conf->get('resource.page_cache'), - $conf->get('resource.raintpl_tmp'), - ) as $path) { -+ if (! is_dir($path)) { -+ mkdir($path, 0755, true); -+ } - if (! is_readable(realpath($path))) { - $errors[] = '"'.$path.'" '. t('directory is not readable'); - } -diff --git a/application/config/ConfigManager.php b/application/config/ConfigManager.php -index 32aaea4..99efc15 100644 ---- a/application/config/ConfigManager.php -+++ b/application/config/ConfigManager.php -@@ -21,6 +21,11 @@ class ConfigManager - - public static $DEFAULT_PLUGINS = array('qrcode'); - -+ /** -+ * @var string User space. -+ */ -+ protected $userSpace; -+ - /** - * @var string Config folder. - */ -@@ -41,12 +46,36 @@ class ConfigManager - * - * @param string $configFile Configuration file path without extension. - */ -- public function __construct($configFile = 'data/config') -+ public function __construct($configFile = null, $userSpace = null) - { -- $this->configFile = $configFile; -+ $this->userSpace = $this->findLDAPUser($userSpace); -+ if ($configFile !== null) { -+ $this->configFile = $configFile; -+ } else { -+ $this->configFile = ($this->userSpace === null) ? 'data/config' : 'data/' . $this->userSpace . '/config'; -+ } - $this->initialize(); - } - -+ public function findLDAPUser($login, $password = null) { -+ $connect = ldap_connect(getenv('SHAARLI_LDAP_HOST')); -+ ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); -+ if (!$connect || !ldap_bind($connect, getenv('SHAARLI_LDAP_DN'), getenv('SHAARLI_LDAP_PASSWORD'))) { -+ return false; -+ } -+ -+ $search_query = str_replace('%login%', ldap_escape($login), getenv('SHAARLI_LDAP_FILTER')); -+ -+ $search = ldap_search($connect, getenv('SHAARLI_LDAP_BASE'), $search_query); -+ $info = ldap_get_entries($connect, $search); -+ -+ if (ldap_count_entries($connect, $search) == 1 && (is_null($password) || ldap_bind($connect, $info[0]["dn"], $password))) { -+ return $login; -+ } else { -+ return null; -+ } -+ } -+ - /** - * Reset the ConfigManager instance. - */ -@@ -269,6 +298,16 @@ public function getConfigFileExt() - return $this->configFile . $this->configIO->getExtension(); - } - -+ /** -+ * Get the current userspace. -+ * -+ * @return mixed User space. -+ */ -+ public function getUserSpace() -+ { -+ return $this->userSpace; -+ } -+ - /** - * Recursive function which find asked setting in the loaded config. - * -@@ -342,19 +381,31 @@ protected static function removeConfig($settings, &$conf) - */ - protected function setDefaultValues() - { -- $this->setEmpty('resource.data_dir', 'data'); -- $this->setEmpty('resource.config', 'data/config.php'); -- $this->setEmpty('resource.datastore', 'data/datastore.php'); -- $this->setEmpty('resource.ban_file', 'data/ipbans.php'); -- $this->setEmpty('resource.updates', 'data/updates.txt'); -- $this->setEmpty('resource.log', 'data/log.txt'); -- $this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt'); -- $this->setEmpty('resource.history', 'data/history.php'); -+ if ($this->userSpace === null) { -+ $data = 'data'; -+ $tmp = 'tmp'; -+ $cache = 'cache'; -+ $pagecache = 'pagecache'; -+ } else { -+ $data = 'data/' . ($this->userSpace); -+ $tmp = 'tmp/' . ($this->userSpace); -+ $cache = 'cache/' . ($this->userSpace); -+ $pagecache = 'pagecache/' . ($this->userSpace); -+ } -+ -+ $this->setEmpty('resource.data_dir', $data); -+ $this->setEmpty('resource.config', $data . '/config.php'); -+ $this->setEmpty('resource.datastore', $data . '/datastore.php'); -+ $this->setEmpty('resource.ban_file', $data . '/ipbans.php'); -+ $this->setEmpty('resource.updates', $data . '/updates.txt'); -+ $this->setEmpty('resource.log', $data . '/log.txt'); -+ $this->setEmpty('resource.update_check', $data . '/lastupdatecheck.txt'); -+ $this->setEmpty('resource.history', $data . '/history.php'); - $this->setEmpty('resource.raintpl_tpl', 'tpl/'); - $this->setEmpty('resource.theme', 'default'); -- $this->setEmpty('resource.raintpl_tmp', 'tmp/'); -- $this->setEmpty('resource.thumbnails_cache', 'cache'); -- $this->setEmpty('resource.page_cache', 'pagecache'); -+ $this->setEmpty('resource.raintpl_tmp', $tmp); -+ $this->setEmpty('resource.thumbnails_cache', $cache); -+ $this->setEmpty('resource.page_cache', $pagecache); - - $this->setEmpty('security.ban_after', 4); - $this->setEmpty('security.ban_duration', 1800); -diff --git a/application/security/LoginManager.php b/application/security/LoginManager.php -index d6784d6..bdfaca7 100644 ---- a/application/security/LoginManager.php -+++ b/application/security/LoginManager.php -@@ -32,6 +32,9 @@ class LoginManager - /** @var string User sign-in token depending on remote IP and credentials */ - protected $staySignedInToken = ''; - -+ protected $lastErrorReason = ''; -+ protected $lastErrorIsBanishable = false; -+ - /** - * Constructor - * -@@ -83,7 +86,7 @@ public function getStaySignedInToken() - */ - public function checkLoginState($cookie, $clientIpId) - { -- if (! $this->configManager->exists('credentials.login')) { -+ if (! $this->configManager->exists('credentials.login') || (isset($_SESSION['username']) && $_SESSION['username'] && $this->configManager->get('credentials.login') !== $_SESSION['username'])) { - // Shaarli is not configured yet - $this->isLoggedIn = false; - return; -@@ -133,20 +136,40 @@ public function isLoggedIn() - */ - public function checkCredentials($remoteIp, $clientIpId, $login, $password) - { -- $hash = sha1($password . $login . $this->configManager->get('credentials.salt')); -+ $this->lastErrorIsBanishable = false; -+ -+ if ($this->configManager->getUserSpace() !== null && $this->configManager->getUserSpace() !== $login) { -+ logm($this->configManager->get('resource.log'), -+ $remoteIp, -+ 'Trying to login to wrong user space'); -+ $this->lastErrorReason = 'You’re trying to access the wrong account.'; -+ return false; -+ } - -- if ($login != $this->configManager->get('credentials.login') -- || $hash != $this->configManager->get('credentials.hash') -- ) { -+ logm($this->configManager->get('resource.log'), -+ $remoteIp, -+ 'Trying LDAP connection'); -+ $result = $this->configManager->findLDAPUser($login, $password); -+ if ($result === false) { - logm( - $this->configManager->get('resource.log'), - $remoteIp, -- 'Login failed for user ' . $login -+ 'Impossible to connect to LDAP' - ); -+ $this->lastErrorReason = 'Server error.'; -+ return false; -+ } else if (is_null($result)) { -+ logm( -+ $this->configManager->get('resource.log'), -+ $remoteIp, -+ 'Login failed for user ' . $login -+ ); -+ $this->lastErrorIsBanishable = true; -+ $this->lastErrorReason = 'Wrong login/password.'; - return false; - } - -- $this->sessionManager->storeLoginInfo($clientIpId); -+ $this->sessionManager->storeLoginInfo($clientIpId, $login); - logm( - $this->configManager->get('resource.log'), - $remoteIp, -@@ -187,6 +210,10 @@ protected function writeBanFile() - */ - public function handleFailedLogin($server) - { -+ if (!$this->lastErrorIsBanishable) { -+ return $this->lastErrorReason ?: 'Error during login.'; -+ }; -+ - $ip = $server['REMOTE_ADDR']; - $trusted = $this->configManager->get('security.trusted_proxies', []); - -@@ -215,6 +242,7 @@ public function handleFailedLogin($server) - ); - } - $this->writeBanFile(); -+ return $this->lastErrorReason ?: 'Error during login.'; - } - - /** -diff --git a/application/security/SessionManager.php b/application/security/SessionManager.php -index b8b8ab8..5eb4aac 100644 ---- a/application/security/SessionManager.php -+++ b/application/security/SessionManager.php -@@ -111,10 +111,10 @@ public static function checkId($sessionId) - * - * @param string $clientIpId Client IP address identifier - */ -- public function storeLoginInfo($clientIpId) -+ public function storeLoginInfo($clientIpId, $login = null) - { - $this->session['ip'] = $clientIpId; -- $this->session['username'] = $this->conf->get('credentials.login'); -+ $this->session['username'] = $login ?: $this->conf->get('credentials.login'); - $this->extendTimeValidityBy(self::$SHORT_TIMEOUT); - } - -diff --git a/index.php b/index.php -index 4b86a3e..58ae2dd 100644 ---- a/index.php -+++ b/index.php -@@ -121,7 +121,32 @@ - $_COOKIE['shaarli'] = session_id(); - } - --$conf = new ConfigManager(); -+$folderBase = getenv("BASE"); -+ -+if (getenv("USERSPACE")) { -+ if (isset($_GET["do"]) && $_GET["do"] == "login") { -+ header("Location: $folderBase/?do=login"); -+ exit; -+ } -+ $userspace = preg_replace("/[^-_A-Za-z0-9]/", '', getenv("USERSPACE")); -+} else if (isset($_SESSION["username"]) && $_SESSION["username"]) { -+ header("Location: " . $folderBase . "/" . $_SESSION["username"] . "?"); -+ exit; -+} else if (!isset($_GET["do"]) || $_GET["do"] != "login") { -+ header("Location: $folderBase/?do=login"); -+ exit; -+} -+ -+if (!isset($userspace) && isset($_POST["login"])) { -+ $userspace = preg_replace("/[^-_A-Za-z0-9]/", '', $_POST["login"]); -+ error_log("debugImmae: setting userspace from POST: " . $userspace); -+} -+ -+if (isset($userspace)) { -+ $conf = new ConfigManager(null, $userspace); -+} else { -+ $conf = new ConfigManager(); -+} - $sessionManager = new SessionManager($_SESSION, $conf); - $loginManager = new LoginManager($GLOBALS, $conf, $sessionManager); - $loginManager->generateStaySignedInToken($_SERVER['REMOTE_ADDR']); -@@ -175,7 +200,7 @@ - } - - // Display the installation form if no existing config is found -- install($conf, $sessionManager, $loginManager); -+ install($conf, $sessionManager, $loginManager, $userspace); - } - - $loginManager->checkLoginState($_COOKIE, $clientIpId); -@@ -205,6 +230,7 @@ function isLoggedIn() - && $loginManager->checkCredentials($_SERVER['REMOTE_ADDR'], $clientIpId, $_POST['login'], $_POST['password']) - ) { - $loginManager->handleSuccessfulLogin($_SERVER); -+ $userspace = $_POST['login']; - - $cookiedir = ''; - if (dirname($_SERVER['SCRIPT_NAME']) != '/') { -@@ -241,25 +267,25 @@ function isLoggedIn() - $uri .= '&'.$param.'='.urlencode($_GET[$param]); - } - } -- header('Location: '. $uri); -+ header('Location: '. $userspace . $uri); - exit; - } - - if (isset($_GET['edit_link'])) { -- header('Location: ?edit_link='. escape($_GET['edit_link'])); -+ header('Location: ' . $userspace . '?edit_link='. escape($_GET['edit_link'])); - exit; - } - - if (isset($_POST['returnurl'])) { - // Prevent loops over login screen. - if (strpos($_POST['returnurl'], 'do=login') === false) { -- header('Location: '. generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST'])); -+ header('Location: ' . generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST'])); - exit; - } - } -- header('Location: ?'); exit; -+ header('Location: '. $userspace . '?'); exit; - } else { -- $loginManager->handleFailedLogin($_SERVER); -+ $errorReason = $loginManager->handleFailedLogin($_SERVER); - $redir = '&username='. urlencode($_POST['login']); - if (isset($_GET['post'])) { - $redir .= '&post=' . urlencode($_GET['post']); -@@ -270,7 +296,7 @@ function isLoggedIn() - } - } - // Redirect to login screen. -- echo ''; -+ echo ''; - exit; - } - } -@@ -1719,7 +1745,7 @@ function buildLinkList($PAGE, $LINKSDB, $conf, $pluginManager, $loginManager) - * @param SessionManager $sessionManager SessionManager instance - * @param LoginManager $loginManager LoginManager instance - */ --function install($conf, $sessionManager, $loginManager) { -+function install($conf, $sessionManager, $loginManager, $userspace) { - // On free.fr host, make sure the /sessions directory exists, otherwise login will not work. - if (endsWith($_SERVER['HTTP_HOST'],'.free.fr') && !is_dir($_SERVER['DOCUMENT_ROOT'].'/sessions')) mkdir($_SERVER['DOCUMENT_ROOT'].'/sessions',0705); - -@@ -1755,7 +1781,7 @@ function install($conf, $sessionManager, $loginManager) { - } - - -- if (!empty($_POST['setlogin']) && !empty($_POST['setpassword'])) -+ if (true) - { - $tz = 'UTC'; - if (!empty($_POST['continent']) && !empty($_POST['city']) -@@ -1764,15 +1790,15 @@ function install($conf, $sessionManager, $loginManager) { - $tz = $_POST['continent'].'/'.$_POST['city']; - } - $conf->set('general.timezone', $tz); -- $login = $_POST['setlogin']; -- $conf->set('credentials.login', $login); -+ $conf->set('credentials.login', $userspace); - $salt = sha1(uniqid('', true) .'_'. mt_rand()); - $conf->set('credentials.salt', $salt); -- $conf->set('credentials.hash', sha1($_POST['setpassword'] . $login . $salt)); -+ $hash = sha1(uniqid('', true) .'_'. mt_rand()); -+ $conf->set('credentials.hash', $hash); - if (!empty($_POST['title'])) { - $conf->set('general.title', escape($_POST['title'])); - } else { -- $conf->set('general.title', 'Shared links on '.escape(index_url($_SERVER))); -+ $conf->set('general.title', ucwords(str_replace("_", " ", $userspace))); - } - $conf->set('translation.language', escape($_POST['language'])); - $conf->set('updates.check_updates', !empty($_POST['updateCheck'])); -@@ -1841,7 +1867,12 @@ function install($conf, $sessionManager, $loginManager) { - $app = new \Slim\App($container); - - // REST API routes --$app->group('/api/v1', function() { -+if (isset($userspace)) { -+ $mountpoint = '/' . $userspace . '/api/v1'; -+} else { -+ $mountpoint = '/api/v1'; -+} -+$app->group($mountpoint, function() { - $this->get('/info', '\Shaarli\Api\Controllers\Info:getInfo')->setName('getInfo'); - $this->get('/links', '\Shaarli\Api\Controllers\Links:getLinks')->setName('getLinks'); - $this->get('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:getLink')->setName('getLink'); -@@ -1860,7 +1891,7 @@ function install($conf, $sessionManager, $loginManager) { - $response = $app->run(true); - // Hack to make Slim and Shaarli router work together: - // If a Slim route isn't found and NOT API call, we call renderPage(). --if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) { -+if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], $mountpoint) === false) { - // We use UTF-8 for proper international characters handling. - header('Content-Type: text/html; charset=utf-8'); - renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager); diff --git a/overlays/slrn/default.nix b/overlays/slrn/default.nix deleted file mode 100644 index 1bf5fe2..0000000 --- a/overlays/slrn/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - slrn = super.slrn.overrideAttrs (old: rec { - configureFlags = old.configureFlags ++ [ "--with-slrnpull" ]; - }); -} diff --git a/overlays/taskwarrior/TW-1778_patch.diff b/overlays/taskwarrior/TW-1778_patch.diff deleted file mode 100644 index 6d7e376..0000000 --- a/overlays/taskwarrior/TW-1778_patch.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- a/src/text.cpp 2016-02-24 23:18:11.000000000 +0100 -+++ b/src/text.cpp 2020-02-26 18:53:15.869331031 +0100 -@@ -248,7 +248,7 @@ - // Premature EOL. - if (character == '\n') - { -- line = text.substr (offset, line_length); -+ line = text.substr (offset, prior_cursor-offset); - offset = cursor; - return true; - } - diff --git a/overlays/taskwarrior/default.nix b/overlays/taskwarrior/default.nix deleted file mode 100644 index 9ca52b8..0000000 --- a/overlays/taskwarrior/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -self: super: -{ - taskwarrior = super.taskwarrior.overrideAttrs (old: { - patches = old.patches or [] ++ [ - ./TW-1778_patch.diff - ]; - postInstall = ''${old.postInstall} - mkdir -p "$out/share/vim/vimfiles/ftdetect" - mkdir -p "$out/share/vim/vimfiles/syntax" - ln -s "../../../../share/doc/task/scripts/vim/ftdetect/task.vim" "$out/share/vim/vimfiles/ftdetect/" - ln -s "../../../../share/doc/task/scripts/vim/syntax/taskrc.vim" "$out/share/vim/vimfiles/syntax/" - ln -s "../../../../share/doc/task/scripts/vim/syntax/taskdata.vim" "$out/share/vim/vimfiles/syntax/" - ln -s "../../../../share/doc/task/scripts/vim/syntax/taskedit.vim" "$out/share/vim/vimfiles/syntax/" - ''; - }); -} diff --git a/overlays/vcsh/default.nix b/overlays/vcsh/default.nix deleted file mode 100644 index eb4d48e..0000000 --- a/overlays/vcsh/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -self: super: { - vcsh = super.vcsh.overrideAttrs(old: { - patchPhase = old.patchPhase or "" + '' - sed -i -e 's@-r "$XDG_CONFIG_HOME/vcsh/config.d/$VCSH_REPO_NAME"@-f "$XDG_CONFIG_HOME/vcsh/config.d/$VCSH_REPO_NAME"@' vcsh - ''; - }); -} diff --git a/overlays/weechat/default.nix b/overlays/weechat/default.nix deleted file mode 100644 index e8cc792..0000000 --- a/overlays/weechat/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -self: super: { - weechat = super.weechat.override { - configure = { availablePlugins, ... }: { - plugins = with self; with availablePlugins; [ - (python.withPackages (ps: with ps; [websocket_client emoji])) - perl - ruby - ]; - }; - }; - -} diff --git a/overlays/ympd/default.nix b/overlays/ympd/default.nix deleted file mode 100644 index dda17aa..0000000 --- a/overlays/ympd/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -self: super: { - ympd = super.ympd.overrideAttrs(old: self.mylibs.fetchedGithub ./ympd.json // { - patches = (old.patches or []) ++ [ ./ympd-password-env.patch ]; - }); -} diff --git a/overlays/ympd/ympd-password-env.patch b/overlays/ympd/ympd-password-env.patch deleted file mode 100644 index 2bbe188..0000000 --- a/overlays/ympd/ympd-password-env.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/src/ympd.c b/src/ympd.c -index 3aed7e6..b3b6fda 100644 ---- a/src/ympd.c -+++ b/src/ympd.c -@@ -71,6 +71,7 @@ int main(int argc, char **argv) - char *run_as_user = NULL; - char const *error_msg = NULL; - char *webport = "8080"; -+ const char *s; - - atexit(bye); - #ifdef WITH_DYNAMIC_ASSETS -@@ -92,6 +93,10 @@ int main(int argc, char **argv) - {0, 0, 0, 0 } - }; - -+ if ((s = getenv("MPD_PASSWORD")) != NULL) { -+ mpd.password = strdup(s); -+ } -+ - while((n = getopt_long(argc, argv, "h:p:w:u:vm:", - long_options, &option_index)) != -1) { - switch (n) { diff --git a/overlays/ympd/ympd.json b/overlays/ympd/ympd.json deleted file mode 100644 index 51f06d5..0000000 --- a/overlays/ympd/ympd.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "612f8fc-master", - "meta": { - "name": "ympd", - "url": "https://github.com/notandy/ympd", - "branch": "master" - }, - "github": { - "owner": "notandy", - "repo": "ympd", - "rev": "612f8fc0b2c47fc89d403e4a044541c6b2b238c8", - "sha256": "01hnj10zl103mrn82vyd42fvq7w5az3jf1qz18889zv67kn73ll9", - "fetchSubmodules": true - } -} diff --git a/pkgs/boinctui/default.nix b/pkgs/boinctui/default.nix deleted file mode 100644 index d8b106a..0000000 --- a/pkgs/boinctui/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ stdenv, fetchurl, expat, openssl, autoconf, ncurses }: -stdenv.mkDerivation rec { - name = "boinctui-${version}"; - version = "2.5.0"; - src = fetchurl { - url = "http://sourceforge.net/projects/boinctui/files/boinctui_${version}.tar.gz"; - sha256 = "16zxp8r4z6pllacdacg681y56cg2phnn3pm5gwszbsi93cix2g8p"; - }; - - configureFlags = [ "--without-gnutls" ]; - preConfigure = '' - autoconf - ''; - - preBuild = '' - sed -i -e 's/"HOME"/"XDG_CONFIG_HOME"/' src/cfg.cpp - sed -i -e 's@\.boinctui\.cfg@boinctui/boinctui.cfg@' src/mainprog.cpp - ''; - buildInputs = [ expat openssl autoconf ncurses ]; -} diff --git a/pkgs/cnagios/cnagios.json b/pkgs/cnagios/cnagios.json deleted file mode 100644 index 4c1c385..0000000 --- a/pkgs/cnagios/cnagios.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "3bd27fb-master", - "meta": { - "name": "cnagios", - "url": "https://github.com/dannywarren/cnagios", - "branch": "master" - }, - "github": { - "owner": "dannywarren", - "repo": "cnagios", - "rev": "3bd27fb40e68f61ffd01bea6234b919a667b6fe4", - "sha256": "0iy5pmlcz6y3if72nav22xqxniiv1v8ywi0927m6s459hkw5n2rb", - "fetchSubmodules": true - } -} diff --git a/pkgs/cnagios/default.nix b/pkgs/cnagios/default.nix deleted file mode 100644 index d5b52f3..0000000 --- a/pkgs/cnagios/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ stdenv, mylibs, perl, ncurses }: -stdenv.mkDerivation (mylibs.fetchedGithub ./cnagios.json // { - configureFlags = [ - "--with-etc-dir=/etc/cnagios" - "--with-var-dir=/var/lib/naemon" - "--with-status-file=/var/lib/naemon/status.dat" - "--with-nagios-data=4" - ]; - - prePatch = '' - sed -i -e "s/-lcurses/-lncurses/" Makefile.in - ''; - installPhase = '' - install -dm755 $out/share/doc/cnagios - install -Dm644 cnagiosrc $out/share/doc/cnagios/ - install -Dm644 cnagios.help $out/share/doc/cnagios/ - install -Dm644 cnagios.pl $out/share/doc/cnagios/ - install -dm755 $out/bin - install -Dm755 cnagios $out/bin/ - ''; - buildInputs = [ perl ncurses ]; -}) diff --git a/pkgs/commento/default.nix b/pkgs/commento/default.nix deleted file mode 100644 index 6361583..0000000 --- a/pkgs/commento/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ stdenv, fetchurl, patchelfUnstable, autoPatchelfHook }: -stdenv.mkDerivation rec { - pname = "commento"; - version = "v1.8.0"; - name = "${pname}-${version}"; - src = fetchurl { - url = "https://dl.commento.io/release/${name}-linux-glibc-amd64.tar.gz"; - sha256 = "1j88b16hdx3i8nsq56581cscij65slgbsa6yfj73ybbg1585axxs"; - }; - phases = [ "unpackPhase" "installPhase" "fixupPhase" ]; - unpackPhase = '' - tar --one-top-level=${name} -xf "$src" - ''; - installPhase = '' - cp -a ${name} $out - ''; - postFixup = '' - ${patchelfUnstable}/bin/patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/commento - ''; -} diff --git a/pkgs/composer-env/default.nix b/pkgs/composer-env/default.nix deleted file mode 100644 index 416a61c..0000000 --- a/pkgs/composer-env/default.nix +++ /dev/null @@ -1,280 +0,0 @@ -# This file originates from composer2nix - -{ stdenv, writeTextFile, fetchurl, php, unzip }: - -let - composer = stdenv.mkDerivation { - name = "composer-1.8.0"; - src = fetchurl { - url = https://github.com/composer/composer/releases/download/1.8.0/composer.phar; - sha256 = "19pg9ip2mpyf5cyq34fld7qwl77mshqw3c4nif7sxmpnar6sh089"; - }; - buildInputs = [ php ]; - - # We must wrap the composer.phar because of the impure shebang. - # We cannot use patchShebangs because the executable verifies its own integrity and will detect that somebody has tampered with it. - - buildCommand = '' - # Copy phar file - mkdir -p $out/share/php - cp $src $out/share/php/composer.phar - chmod 755 $out/share/php/composer.phar - - # Create wrapper executable - mkdir -p $out/bin - cat > $out/bin/composer < - ''; - }; - - constructBin = writeTextFile { - name = "constructbin.php"; - executable = true; - text = '' - #! ${php}/bin/php - - ''; - }; - - bundleDependencies = dependencies: - stdenv.lib.concatMapStrings (dependencyName: - let - dependency = dependencies.${dependencyName}; - in - '' - ${if dependency.targetDir == "" then '' - vendorDir="$(dirname ${dependencyName})" - mkdir -p "$vendorDir" - ${if symlinkDependencies then - ''ln -s "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"'' - else - ''cp -a "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"'' - }${if dependency.needsModifyRights or false then "\n" + '' - chmod -R u+rwx "$vendorDir/$(basename "${dependencyName}")" - '' else ""} - '' else '' - namespaceDir="${dependencyName}/$(dirname "${dependency.targetDir}")" - mkdir -p "$namespaceDir" - ${if symlinkDependencies then - ''ln -s "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"'' - else - ''cp -a "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"'' - }${if dependency.needsModifyRights or false then "\n" + '' - chmod -R u+rwx "$namespaceDir/$(basename "${dependency.targetDir}")" - '' else ""} - ''} - '') (builtins.attrNames dependencies); - - extraArgs = removeAttrs args [ "name" "packages" "devPackages" "buildInputs" ]; - in - stdenv.mkDerivation ({ - name = "composer-${name}"; - buildInputs = [ php composer ] ++ buildInputs; - - inherit unpackPhase buildPhase; - - installPhase = '' - ${if executable then '' - mkdir -p $out/share/php - cp -a $src $out/share/php/$name - chmod -R u+w $out/share/php/$name - cd $out/share/php/$name - '' else '' - cp -a $src $out - chmod -R u+w $out - cd $out - ''} - - # Execute pre install hook - runHook preInstall - - # Remove unwanted files - rm -f *.nix - - export HOME=$TMPDIR - - ${if doRemoveVendor then '' - # Remove the provided vendor folder if it exists - rm -Rf vendor - '' else ""} - # If there is no composer.lock file, compose a dummy file. - # Otherwise, composer attempts to download the package.json file from - # the registry which we do not want. - if [ ! -f composer.lock ] - then - cat > composer.lock < vendor/composer/installed.json - - # Copy or symlink the provided dependencies - cd vendor - ${bundleDependencies packages} - ${stdenv.lib.optionalString (!noDev) (bundleDependencies devPackages)} - cd .. - - # Reconstruct autoload scripts - # We use the optimize feature because Nix packages cannot change after they have been built - # Using the dynamic loader for a Nix package is useless since there is nothing to dynamically reload. - composer dump-autoload --optimize ${stdenv.lib.optionalString noDev "--no-dev"} - - # Run the install step as a validation to confirm that everything works out as expected - composer install --optimize-autoloader ${stdenv.lib.optionalString noDev "--no-dev"} - - ${stdenv.lib.optionalString executable '' - # Reconstruct the bin/ folder if we deploy an executable project - ${constructBin} composer.json - ln -s $(pwd)/vendor/bin $out/bin - ''} - - ${stdenv.lib.optionalString (!symlinkDependencies) '' - # Patch the shebangs if possible - if [ -d $(pwd)/vendor/bin ] - then - # Look for all executables in bin/ - for i in $(pwd)/vendor/bin/* - do - # Look for their location - realFile=$(readlink -f "$i") - - # Restore write permissions - chmod u+wx "$(dirname "$realFile")" - chmod u+w "$realFile" - - # Patch shebang - sed -e "s|#!/usr/bin/php|#!${php}/bin/php|" \ - -e "s|#!/usr/bin/env php|#!${php}/bin/php|" \ - "$realFile" > tmp - mv tmp "$realFile" - chmod u+x "$realFile" - done - fi - ''} - - if [ "$removeComposerArtifacts" = "1" ] - then - # Remove composer stuff - rm -f composer.json composer.lock - fi - - # Execute post install hook - runHook postInstall - ''; - } // extraArgs); -in -{ - composer = stdenv.lib.makeOverridable composer; - buildZipPackage = stdenv.lib.makeOverridable buildZipPackage; - buildPackage = stdenv.lib.makeOverridable buildPackage; -} diff --git a/pkgs/crypto/cardano-cli/default.nix b/pkgs/crypto/cardano-cli/default.nix deleted file mode 100644 index 3cd5a4c..0000000 --- a/pkgs/crypto/cardano-cli/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ rustPlatform, fetchFromGitHub }: -rustPlatform.buildRustPackage rec { - name = "cardano-cli-${version}"; - version = "master"; - - src = fetchFromGitHub { - owner = "input-output-hk"; - repo = "cardano-cli"; - rev = "ed064d5a3b96c23b52bb20ca49da9cb8764a2e0f"; - sha256 = "07y5ssar6aq93snrvmapk05zmym4w23ydvjn2njp8saxk23ivqsg"; - fetchSubmodules = true; - }; - - cargoSha256 = "0j68dsqahvgpa9ms62149530lbfa55lmpd56rgdxkrh2z32lshs8"; - verifyCargoDeps = true; -} diff --git a/pkgs/crypto/cardano/daedalus.json b/pkgs/crypto/cardano/daedalus.json deleted file mode 100644 index dcd14c5..0000000 --- a/pkgs/crypto/cardano/daedalus.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "0.15.1", - "meta": { - "name": "daedalus", - "url": "https://github.com/input-output-hk/daedalus", - "branch": "refs/tags/0.15.1" - }, - "github": { - "owner": "input-output-hk", - "repo": "daedalus", - "rev": "998fd3189c9a54fac496dfef7a6224714c67bc80", - "sha256": "1r3gwfv6hn7lzp4h2s6849m7x12nxadsql358ss615krvdlnb6rr", - "fetchSubmodules": true - } -} diff --git a/pkgs/crypto/cardano/default.nix b/pkgs/crypto/cardano/default.nix deleted file mode 100644 index 879fddb..0000000 --- a/pkgs/crypto/cardano/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ stdenv, mylibs }: -let - daedalusSrc = (mylibs.fetchedGithub ./daedalus.json).src; - daedalusOrig = (import daedalusSrc {}).daedalus; - cfg = stdenv.mkDerivation rec { - name = "launcher-config-custom"; - buildInputs = [ daedalusSrc daedalusOrig.cfg ]; - src = daedalusOrig.cfg; - installPhase = '' - cp -a $src $out - chmod -R u+w $out - cd $out/etc - sed -e "/^walletPath/d" -e "/^walletArgs/d" launcher-config.yaml > launcher-config-server-only.yaml - ''; - }; -in -stdenv.mkDerivation rec { - name = "daedalus-custom"; - src = daedalusOrig; - buildInputs = [ cfg daedalusOrig ]; - installPhase = '' - cp -a $src $out - chmod -R u+w $out - cd $out/bin - sed -i -e "s@${builtins.storeDir}/[0-9a-z]*-daedalus-config@${cfg}/etc@" daedalus - sed -e "s@${cfg}/etc/launcher-config.yaml@${cfg}/etc/launcher-config-server-only.yaml@" daedalus > daedalus-server-only - chmod a+x daedalus-server-only - ''; -} diff --git a/pkgs/crypto/iota-cli-app/default.nix b/pkgs/crypto/iota-cli-app/default.nix deleted file mode 100644 index e9e9f92..0000000 --- a/pkgs/crypto/iota-cli-app/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ stdenv, mylibs, fetchurl, fetchgit, callPackage, nodePackages, nodejs-10_x }: -let - nodeEnv = callPackage mylibs.nodeEnv { nodejs = nodejs-10_x; }; - # built using node2nix -8 -l package-lock.json - # and changing "./." to "src" - packageEnv = import ./node-packages.nix { - src = stdenv.mkDerivation (mylibs.fetchedGithub ./iota-cli-app.json // { - phases = "installPhase"; - installPhase = '' - cp -a $src $out - chmod u+w -R $out - cd $out - sed -i -e "s@host: 'http://localhost',@host: 'https://nodes.thetangle.org',@" index.js - sed -i -e "s@port: 14265@port: 443@" index.js - ''; - }); - inherit fetchurl fetchgit nodeEnv; - }; -in -packageEnv.package diff --git a/pkgs/crypto/iota-cli-app/iota-cli-app.json b/pkgs/crypto/iota-cli-app/iota-cli-app.json deleted file mode 100644 index 6b47dec..0000000 --- a/pkgs/crypto/iota-cli-app/iota-cli-app.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "d7e2e08-master", - "meta": { - "name": "iota-cli-app", - "url": "https://github.com/iotaledger/cli-app", - "branch": "master" - }, - "github": { - "owner": "iotaledger", - "repo": "cli-app", - "rev": "d7e2e0856ae6bd34890fefb4245c07cd467a5032", - "sha256": "1n9kczsxdgjv8282nj2grlijvxipiskx0ndn169vz6v1l1hrwc8b", - "fetchSubmodules": true - } -} diff --git a/pkgs/crypto/iota-cli-app/node-packages.nix b/pkgs/crypto/iota-cli-app/node-packages.nix deleted file mode 100644 index d5c61d6..0000000 --- a/pkgs/crypto/iota-cli-app/node-packages.nix +++ /dev/null @@ -1,1814 +0,0 @@ -# This file has been generated by node2nix 1.6.0. Do not edit! - -{src, nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: - -let - sources = { - "acorn-3.3.0" = { - name = "acorn"; - packageName = "acorn"; - version = "3.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"; - sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; - }; - }; - "acorn-5.2.1" = { - name = "acorn"; - packageName = "acorn"; - version = "5.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz"; - sha512 = "jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="; - }; - }; - "acorn-jsx-3.0.1" = { - name = "acorn-jsx"; - packageName = "acorn-jsx"; - version = "3.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz"; - sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b"; - }; - }; - "ajv-4.11.8" = { - name = "ajv"; - packageName = "ajv"; - version = "4.11.8"; - src = fetchurl { - url = "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz"; - sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; - }; - }; - "ajv-keywords-1.5.1" = { - name = "ajv-keywords"; - packageName = "ajv-keywords"; - version = "1.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz"; - sha1 = "314dd0a4b3368fad3dfcdc54ede6171b886daf3c"; - }; - }; - "ansi-escapes-1.4.0" = { - name = "ansi-escapes"; - packageName = "ansi-escapes"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz"; - sha1 = "d3a8a83b319aa67793662b13e761c7911422306e"; - }; - }; - "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-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.0" = { - name = "ansi-styles"; - packageName = "ansi-styles"; - version = "3.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz"; - sha512 = "NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug=="; - }; - }; - "argparse-1.0.9" = { - name = "argparse"; - packageName = "argparse"; - version = "1.0.9"; - src = fetchurl { - url = "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz"; - sha1 = "73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"; - }; - }; - "array-union-1.0.2" = { - name = "array-union"; - packageName = "array-union"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"; - sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; - }; - }; - "array-uniq-1.0.3" = { - name = "array-uniq"; - packageName = "array-uniq"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"; - sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; - }; - }; - "arrify-1.0.1" = { - name = "arrify"; - packageName = "arrify"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz"; - sha1 = "898508da2226f380df904728456849c1501a4b0d"; - }; - }; - "async-2.6.0" = { - name = "async"; - packageName = "async"; - version = "2.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/async/-/async-2.6.0.tgz"; - sha512 = "xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw=="; - }; - }; - "babel-code-frame-6.26.0" = { - name = "babel-code-frame"; - packageName = "babel-code-frame"; - version = "6.26.0"; - src = fetchurl { - url = "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz"; - sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"; - }; - }; - "babel-polyfill-6.26.0" = { - name = "babel-polyfill"; - packageName = "babel-polyfill"; - version = "6.26.0"; - src = fetchurl { - url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz"; - sha1 = "379937abc67d7895970adc621f284cd966cf2153"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "bignumber.js-4.1.0" = { - name = "bignumber.js"; - packageName = "bignumber.js"; - version = "4.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz"; - sha512 = "eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA=="; - }; - }; - "bluebird-3.5.1" = { - name = "bluebird"; - packageName = "bluebird"; - version = "3.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz"; - sha512 = "MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="; - }; - }; - "brace-expansion-1.1.8" = { - name = "brace-expansion"; - packageName = "brace-expansion"; - version = "1.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"; - sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292"; - }; - }; - "caller-path-0.1.0" = { - name = "caller-path"; - packageName = "caller-path"; - version = "0.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz"; - sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f"; - }; - }; - "callsites-0.2.0" = { - name = "callsites"; - packageName = "callsites"; - version = "0.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz"; - sha1 = "afab96262910a7f33c19a5775825c69f34e350ca"; - }; - }; - "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.3.0" = { - name = "chalk"; - packageName = "chalk"; - version = "2.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz"; - sha512 = "Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q=="; - }; - }; - "circular-json-0.3.3" = { - name = "circular-json"; - packageName = "circular-json"; - version = "0.3.3"; - src = fetchurl { - url = "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz"; - sha512 = "UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A=="; - }; - }; - "cli-cursor-1.0.2" = { - name = "cli-cursor"; - packageName = "cli-cursor"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz"; - sha1 = "64da3f7d56a54412e59794bd62dc35295e8f2987"; - }; - }; - "cli-width-1.1.1" = { - name = "cli-width"; - packageName = "cli-width"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz"; - sha1 = "a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d"; - }; - }; - "cli-width-2.2.0" = { - name = "cli-width"; - packageName = "cli-width"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz"; - sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639"; - }; - }; - "co-4.6.0" = { - name = "co"; - packageName = "co"; - version = "4.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz"; - sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; - }; - }; - "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.1" = { - name = "color-convert"; - packageName = "color-convert"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz"; - sha512 = "mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ=="; - }; - }; - "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"; - }; - }; - "colors-1.1.2" = { - name = "colors"; - packageName = "colors"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz"; - sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; - }; - }; - "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.0" = { - name = "concat-stream"; - packageName = "concat-stream"; - version = "1.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz"; - sha1 = "0aac662fd52be78964d5532f694784e70110acf7"; - }; - }; - "core-js-2.5.3" = { - name = "core-js"; - packageName = "core-js"; - version = "2.5.3"; - src = fetchurl { - url = "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz"; - sha1 = "8acc38345824f16d8365b7c9b4259168e8ed603e"; - }; - }; - "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"; - }; - }; - "crypto-js-3.1.9-1" = { - name = "crypto-js"; - packageName = "crypto-js"; - version = "3.1.9-1"; - src = fetchurl { - url = "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz"; - sha1 = "fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8"; - }; - }; - "d-1.0.0" = { - name = "d"; - packageName = "d"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/d/-/d-1.0.0.tgz"; - sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f"; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "del-2.2.2" = { - name = "del"; - packageName = "del"; - version = "2.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/del/-/del-2.2.2.tgz"; - sha1 = "c12c981d067846c84bcaf862cff930d907ffd1a8"; - }; - }; - "doctrine-2.0.2" = { - name = "doctrine"; - packageName = "doctrine"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz"; - sha512 = "y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A=="; - }; - }; - "encoding-0.1.12" = { - name = "encoding"; - packageName = "encoding"; - version = "0.1.12"; - src = fetchurl { - url = "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz"; - sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb"; - }; - }; - "es5-ext-0.10.37" = { - name = "es5-ext"; - packageName = "es5-ext"; - version = "0.10.37"; - src = fetchurl { - url = "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz"; - sha1 = "0ee741d148b80069ba27d020393756af257defc3"; - }; - }; - "es6-iterator-2.0.3" = { - name = "es6-iterator"; - packageName = "es6-iterator"; - version = "2.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz"; - sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; - }; - }; - "es6-map-0.1.5" = { - name = "es6-map"; - packageName = "es6-map"; - version = "0.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz"; - sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0"; - }; - }; - "es6-set-0.1.5" = { - name = "es6-set"; - packageName = "es6-set"; - version = "0.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz"; - sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1"; - }; - }; - "es6-symbol-3.1.1" = { - name = "es6-symbol"; - packageName = "es6-symbol"; - version = "3.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz"; - sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; - }; - }; - "es6-weak-map-2.0.2" = { - name = "es6-weak-map"; - packageName = "es6-weak-map"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz"; - sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"; - }; - }; - "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"; - }; - }; - "escope-3.6.0" = { - name = "escope"; - packageName = "escope"; - version = "3.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz"; - sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3"; - }; - }; - "eslint-3.19.0" = { - name = "eslint"; - packageName = "eslint"; - version = "3.19.0"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz"; - sha1 = "c8fc6201c7f40dd08941b87c085767386a679acc"; - }; - }; - "espree-3.5.2" = { - name = "espree"; - packageName = "espree"; - version = "3.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz"; - sha512 = "sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ=="; - }; - }; - "esprima-4.0.0" = { - name = "esprima"; - packageName = "esprima"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz"; - sha512 = "oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="; - }; - }; - "esquery-1.0.0" = { - name = "esquery"; - packageName = "esquery"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz"; - sha1 = "cfba8b57d7fba93f17298a8a006a04cda13d80fa"; - }; - }; - "esrecurse-4.2.0" = { - name = "esrecurse"; - packageName = "esrecurse"; - version = "4.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz"; - sha1 = "fa9568d98d3823f9a41d91e902dcab9ea6e5b163"; - }; - }; - "estraverse-4.2.0" = { - name = "estraverse"; - packageName = "estraverse"; - version = "4.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz"; - sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13"; - }; - }; - "esutils-2.0.2" = { - name = "esutils"; - packageName = "esutils"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz"; - sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; - }; - }; - "event-emitter-0.3.5" = { - name = "event-emitter"; - packageName = "event-emitter"; - version = "0.3.5"; - src = fetchurl { - url = "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz"; - sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39"; - }; - }; - "exit-hook-1.1.1" = { - name = "exit-hook"; - packageName = "exit-hook"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz"; - sha1 = "f05ca233b48c05d54fff07765df8507e95c02ff8"; - }; - }; - "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"; - }; - }; - "figures-1.7.0" = { - name = "figures"; - packageName = "figures"; - version = "1.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz"; - sha1 = "cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"; - }; - }; - "file-entry-cache-2.0.0" = { - name = "file-entry-cache"; - packageName = "file-entry-cache"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz"; - sha1 = "c392990c3e684783d838b8c84a45d8a048458361"; - }; - }; - "flat-cache-1.3.0" = { - name = "flat-cache"; - packageName = "flat-cache"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz"; - sha1 = "d3030b32b38154f4e3b7e9c709f490f7ef97c481"; - }; - }; - "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"; - }; - }; - "generate-function-2.0.0" = { - name = "generate-function"; - packageName = "generate-function"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz"; - sha1 = "6858fe7c0969b7d4e9093337647ac79f60dfbe74"; - }; - }; - "generate-object-property-1.2.0" = { - name = "generate-object-property"; - packageName = "generate-object-property"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz"; - sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0"; - }; - }; - "glob-7.1.2" = { - name = "glob"; - packageName = "glob"; - version = "7.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"; - sha512 = "MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ=="; - }; - }; - "globals-9.18.0" = { - name = "globals"; - packageName = "globals"; - version = "9.18.0"; - src = fetchurl { - url = "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz"; - sha512 = "S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="; - }; - }; - "globby-5.0.0" = { - name = "globby"; - packageName = "globby"; - version = "5.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz"; - sha1 = "ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"; - }; - }; - "graceful-fs-4.1.11" = { - name = "graceful-fs"; - packageName = "graceful-fs"; - version = "4.1.11"; - src = fetchurl { - url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz"; - sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"; - }; - }; - "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-2.0.0" = { - name = "has-flag"; - packageName = "has-flag"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz"; - sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51"; - }; - }; - "iconv-lite-0.4.19" = { - name = "iconv-lite"; - packageName = "iconv-lite"; - version = "0.4.19"; - src = fetchurl { - url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz"; - sha512 = "oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="; - }; - }; - "ignore-3.3.7" = { - name = "ignore"; - packageName = "ignore"; - version = "3.3.7"; - src = fetchurl { - url = "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz"; - sha512 = "YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA=="; - }; - }; - "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"; - }; - }; - "in-publish-2.0.0" = { - name = "in-publish"; - packageName = "in-publish"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz"; - sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51"; - }; - }; - "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.3" = { - name = "inherits"; - packageName = "inherits"; - version = "2.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"; - sha1 = "633c2c83e3da42a502f52466022480f4208261de"; - }; - }; - "inquirer-0.11.0" = { - name = "inquirer"; - packageName = "inquirer"; - version = "0.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/inquirer/-/inquirer-0.11.0.tgz"; - sha1 = "7448bfa924092af311d47173bbab990cae2bb027"; - }; - }; - "inquirer-0.12.0" = { - name = "inquirer"; - packageName = "inquirer"; - version = "0.12.0"; - src = fetchurl { - url = "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz"; - sha1 = "1ef2bfd63504df0bc75785fff8c2c41df12f077e"; - }; - }; - "install-0.10.4" = { - name = "install"; - packageName = "install"; - version = "0.10.4"; - src = fetchurl { - url = "https://registry.npmjs.org/install/-/install-0.10.4.tgz"; - sha512 = "+IRyOastuPmLVx9zlVXJoKErSqz1Ma5at9A7S8yfsj3W+Kg95faPoh3bPDtMrZ/grz4PRmXzrswmlzfLlYyLOw=="; - }; - }; - "interpret-1.1.0" = { - name = "interpret"; - packageName = "interpret"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz"; - sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"; - }; - }; - "iota.lib.js-0.4.6" = { - name = "iota.lib.js"; - packageName = "iota.lib.js"; - version = "0.4.6"; - src = fetchurl { - url = "https://registry.npmjs.org/iota.lib.js/-/iota.lib.js-0.4.6.tgz"; - sha1 = "47afdc03d57c7f55d2f58f068db492df6bc6e9bb"; - }; - }; - "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-my-json-valid-2.16.1" = { - name = "is-my-json-valid"; - packageName = "is-my-json-valid"; - version = "2.16.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz"; - sha512 = "ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ=="; - }; - }; - "is-path-cwd-1.0.0" = { - name = "is-path-cwd"; - packageName = "is-path-cwd"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; - sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; - }; - }; - "is-path-in-cwd-1.0.0" = { - name = "is-path-in-cwd"; - packageName = "is-path-in-cwd"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz"; - sha1 = "6477582b8214d602346094567003be8a9eac04dc"; - }; - }; - "is-path-inside-1.0.1" = { - name = "is-path-inside"; - packageName = "is-path-inside"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz"; - sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"; - }; - }; - "is-property-1.0.2" = { - name = "is-property"; - packageName = "is-property"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"; - sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84"; - }; - }; - "is-resolvable-1.0.1" = { - name = "is-resolvable"; - packageName = "is-resolvable"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz"; - sha512 = "y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g=="; - }; - }; - "is-stream-1.1.0" = { - name = "is-stream"; - packageName = "is-stream"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz"; - sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; - }; - }; - "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"; - }; - }; - "js-tokens-3.0.2" = { - name = "js-tokens"; - packageName = "js-tokens"; - version = "3.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz"; - sha1 = "9866df395102130e38f7f996bceb65443209c25b"; - }; - }; - "js-yaml-3.10.0" = { - name = "js-yaml"; - packageName = "js-yaml"; - version = "3.10.0"; - src = fetchurl { - url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz"; - sha512 = "O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA=="; - }; - }; - "json-stable-stringify-1.0.1" = { - name = "json-stable-stringify"; - packageName = "json-stable-stringify"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; - sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; - }; - }; - "json5-0.5.1" = { - name = "json5"; - packageName = "json5"; - version = "0.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz"; - sha1 = "1eade7acc012034ad84e2396767ead9fa5495821"; - }; - }; - "jsonify-0.0.0" = { - name = "jsonify"; - packageName = "jsonify"; - version = "0.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"; - sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; - }; - }; - "jsonpointer-4.0.1" = { - name = "jsonpointer"; - packageName = "jsonpointer"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz"; - sha1 = "4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"; - }; - }; - "left-pad-1.2.0" = { - name = "left-pad"; - packageName = "left-pad"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz"; - sha1 = "d30a73c6b8201d8f7d8e7956ba9616087a68e0ee"; - }; - }; - "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"; - }; - }; - "lodash-3.10.1" = { - name = "lodash"; - packageName = "lodash"; - version = "3.10.1"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz"; - sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6"; - }; - }; - "lodash-4.17.4" = { - name = "lodash"; - packageName = "lodash"; - version = "4.17.4"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz"; - sha1 = "78203a4d1c328ae1d86dca6460e369b57f4055ae"; - }; - }; - "log-update-1.0.2" = { - name = "log-update"; - packageName = "log-update"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz"; - sha1 = "19929f64c4093d2d2e7075a1dad8af59c296b8d1"; - }; - }; - "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-0.0.8" = { - name = "minimist"; - packageName = "minimist"; - version = "0.0.8"; - src = fetchurl { - url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"; - sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; - }; - }; - "minimist-1.2.0" = { - name = "minimist"; - packageName = "minimist"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"; - sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; - }; - }; - "mkdirp-0.5.1" = { - name = "mkdirp"; - packageName = "mkdirp"; - version = "0.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"; - sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; - }; - }; - "moment-2.20.1" = { - name = "moment"; - packageName = "moment"; - version = "2.20.1"; - src = fetchurl { - url = "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz"; - sha512 = "Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg=="; - }; - }; - "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"; - }; - }; - "mute-stream-0.0.5" = { - name = "mute-stream"; - packageName = "mute-stream"; - version = "0.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"; - sha1 = "8fbfabb0a98a253d3184331f9e8deb7372fac6c0"; - }; - }; - "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"; - }; - }; - "node-fetch-1.7.3" = { - name = "node-fetch"; - packageName = "node-fetch"; - version = "1.7.3"; - src = fetchurl { - url = "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz"; - sha512 = "NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ=="; - }; - }; - "node-localstorage-0.6.0" = { - name = "node-localstorage"; - packageName = "node-localstorage"; - version = "0.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/node-localstorage/-/node-localstorage-0.6.0.tgz"; - sha1 = "45a0601c6932dfde6644a23361f1be173c75d3af"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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-1.1.0" = { - name = "onetime"; - packageName = "onetime"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz"; - sha1 = "a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"; - }; - }; - "optionator-0.8.2" = { - name = "optionator"; - packageName = "optionator"; - version = "0.8.2"; - src = fetchurl { - url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz"; - sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64"; - }; - }; - "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"; - }; - }; - "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-is-inside-1.0.2" = { - name = "path-is-inside"; - packageName = "path-is-inside"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"; - sha1 = "365417dede44430d1c11af61027facf074bdfc53"; - }; - }; - "path-parse-1.0.5" = { - name = "path-parse"; - packageName = "path-parse"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz"; - sha1 = "3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"; - }; - }; - "pify-2.3.0" = { - name = "pify"; - packageName = "pify"; - version = "2.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"; - sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; - }; - }; - "pinkie-2.0.4" = { - name = "pinkie"; - packageName = "pinkie"; - version = "2.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"; - sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; - }; - }; - "pinkie-promise-2.0.1" = { - name = "pinkie-promise"; - packageName = "pinkie-promise"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; - sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; - }; - }; - "pluralize-1.2.1" = { - name = "pluralize"; - packageName = "pluralize"; - version = "1.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz"; - sha1 = "d1a21483fd22bb41e58a12fa3421823140897c45"; - }; - }; - "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"; - }; - }; - "prettyjson-1.2.1" = { - name = "prettyjson"; - packageName = "prettyjson"; - version = "1.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz"; - sha1 = "fcffab41d19cab4dfae5e575e64246619b12d289"; - }; - }; - "process-nextick-args-1.0.7" = { - name = "process-nextick-args"; - packageName = "process-nextick-args"; - version = "1.0.7"; - src = fetchurl { - url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz"; - sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3"; - }; - }; - "progress-1.1.8" = { - name = "progress"; - packageName = "progress"; - version = "1.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz"; - sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"; - }; - }; - "readable-stream-2.3.3" = { - name = "readable-stream"; - packageName = "readable-stream"; - version = "2.3.3"; - src = fetchurl { - url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz"; - sha512 = "m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ=="; - }; - }; - "readline2-1.0.1" = { - name = "readline2"; - packageName = "readline2"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz"; - sha1 = "41059608ffc154757b715d9989d199ffbf372e35"; - }; - }; - "rechoir-0.6.2" = { - name = "rechoir"; - packageName = "rechoir"; - version = "0.6.2"; - src = fetchurl { - url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz"; - sha1 = "85204b54dba82d5742e28c96756ef43af50e3384"; - }; - }; - "regenerator-runtime-0.10.5" = { - name = "regenerator-runtime"; - packageName = "regenerator-runtime"; - version = "0.10.5"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz"; - sha1 = "336c3efc1220adcedda2c9fab67b5a7955a33658"; - }; - }; - "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=="; - }; - }; - "require-uncached-1.0.3" = { - name = "require-uncached"; - packageName = "require-uncached"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz"; - sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3"; - }; - }; - "resolve-1.5.0" = { - name = "resolve"; - packageName = "resolve"; - version = "1.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz"; - sha512 = "hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw=="; - }; - }; - "resolve-from-1.0.1" = { - name = "resolve-from"; - packageName = "resolve-from"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz"; - sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"; - }; - }; - "restore-cursor-1.0.1" = { - name = "restore-cursor"; - packageName = "restore-cursor"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz"; - sha1 = "34661f46886327fed2991479152252df92daa541"; - }; - }; - "rimraf-2.6.2" = { - name = "rimraf"; - packageName = "rimraf"; - version = "2.6.2"; - src = fetchurl { - url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz"; - sha512 = "lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w=="; - }; - }; - "run-async-0.1.0" = { - name = "run-async"; - packageName = "run-async"; - version = "0.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz"; - sha1 = "c8ad4a5e110661e402a7d21b530e009f25f8e389"; - }; - }; - "rx-lite-3.1.2" = { - name = "rx-lite"; - packageName = "rx-lite"; - version = "3.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz"; - sha1 = "19ce502ca572665f3b647b10939f97fd1615f102"; - }; - }; - "safe-buffer-5.1.1" = { - name = "safe-buffer"; - packageName = "safe-buffer"; - version = "5.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"; - sha512 = "kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="; - }; - }; - "shelljs-0.7.8" = { - name = "shelljs"; - packageName = "shelljs"; - version = "0.7.8"; - src = fetchurl { - url = "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz"; - sha1 = "decbcf874b0d1e5fb72e14b164a9683048e9acb3"; - }; - }; - "slice-ansi-0.0.4" = { - name = "slice-ansi"; - packageName = "slice-ansi"; - version = "0.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz"; - sha1 = "edbf8903f66f7ce2f8eafd6ceed65e264c831b35"; - }; - }; - "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"; - }; - }; - "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_decoder-1.0.3" = { - name = "string_decoder"; - packageName = "string_decoder"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz"; - sha512 = "4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ=="; - }; - }; - "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-bom-3.0.0" = { - name = "strip-bom"; - packageName = "strip-bom"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"; - sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"; - }; - }; - "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"; - }; - }; - "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-4.5.0" = { - name = "supports-color"; - packageName = "supports-color"; - version = "4.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz"; - sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b"; - }; - }; - "table-3.8.3" = { - name = "table"; - packageName = "table"; - version = "3.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/table/-/table-3.8.3.tgz"; - sha1 = "2bbc542f0fda9861a755d3947fefd8b3f513855f"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "user-home-2.0.0" = { - name = "user-home"; - packageName = "user-home"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz"; - sha1 = "9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"; - }; - }; - "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"; - }; - }; - "vorpal-1.12.0" = { - name = "vorpal"; - packageName = "vorpal"; - version = "1.12.0"; - src = fetchurl { - url = "https://registry.npmjs.org/vorpal/-/vorpal-1.12.0.tgz"; - sha1 = "4be7b2a4e48f8fcfc9cf3648c419d311c522159d"; - }; - }; - "wordwrap-1.0.0" = { - name = "wordwrap"; - packageName = "wordwrap"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"; - sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; - }; - }; - "wrap-ansi-2.1.0" = { - name = "wrap-ansi"; - packageName = "wrap-ansi"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; - sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; - }; - }; - "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-0.2.1" = { - name = "write"; - packageName = "write"; - version = "0.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/write/-/write-0.2.1.tgz"; - sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757"; - }; - }; - "xmlhttprequest-1.8.0" = { - name = "xmlhttprequest"; - packageName = "xmlhttprequest"; - version = "1.8.0"; - src = fetchurl { - url = "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz"; - sha1 = "67fe075c5c24fef39f9d65f5f7b7fe75171968fc"; - }; - }; - "xtend-4.0.1" = { - name = "xtend"; - packageName = "xtend"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"; - sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; - }; - }; - }; - args = { - name = "iota-cli-app"; - packageName = "iota-cli-app"; - version = "1.0.8"; - inherit src; - dependencies = [ - sources."acorn-5.2.1" - (sources."acorn-jsx-3.0.1" // { - dependencies = [ - sources."acorn-3.3.0" - ]; - }) - sources."ajv-4.11.8" - sources."ajv-keywords-1.5.1" - sources."ansi-escapes-1.4.0" - sources."ansi-regex-2.1.1" - sources."ansi-styles-3.2.0" - sources."argparse-1.0.9" - sources."array-union-1.0.2" - sources."array-uniq-1.0.3" - sources."arrify-1.0.1" - sources."async-2.6.0" - (sources."babel-code-frame-6.26.0" // { - dependencies = [ - sources."ansi-styles-2.2.1" - sources."chalk-1.1.3" - sources."supports-color-2.0.0" - ]; - }) - sources."babel-polyfill-6.26.0" - (sources."babel-runtime-6.26.0" // { - dependencies = [ - sources."regenerator-runtime-0.11.1" - ]; - }) - sources."balanced-match-1.0.0" - sources."bignumber.js-4.1.0" - sources."bluebird-3.5.1" - sources."brace-expansion-1.1.8" - sources."caller-path-0.1.0" - sources."callsites-0.2.0" - sources."chalk-2.3.0" - sources."circular-json-0.3.3" - sources."cli-cursor-1.0.2" - sources."cli-width-2.2.0" - sources."co-4.6.0" - sources."code-point-at-1.1.0" - sources."color-convert-1.9.1" - sources."color-name-1.1.3" - sources."colors-1.1.2" - sources."concat-map-0.0.1" - sources."concat-stream-1.6.0" - sources."core-js-2.5.3" - sources."core-util-is-1.0.2" - sources."crypto-js-3.1.9-1" - sources."d-1.0.0" - sources."debug-2.6.9" - sources."deep-is-0.1.3" - sources."del-2.2.2" - sources."doctrine-2.0.2" - sources."encoding-0.1.12" - sources."es5-ext-0.10.37" - sources."es6-iterator-2.0.3" - sources."es6-map-0.1.5" - sources."es6-set-0.1.5" - sources."es6-symbol-3.1.1" - sources."es6-weak-map-2.0.2" - sources."escape-string-regexp-1.0.5" - sources."escope-3.6.0" - (sources."eslint-3.19.0" // { - dependencies = [ - sources."ansi-styles-2.2.1" - sources."chalk-1.1.3" - sources."supports-color-2.0.0" - ]; - }) - sources."espree-3.5.2" - sources."esprima-4.0.0" - sources."esquery-1.0.0" - sources."esrecurse-4.2.0" - sources."estraverse-4.2.0" - sources."esutils-2.0.2" - sources."event-emitter-0.3.5" - sources."exit-hook-1.1.1" - sources."fast-levenshtein-2.0.6" - sources."figures-1.7.0" - sources."file-entry-cache-2.0.0" - sources."flat-cache-1.3.0" - sources."fs.realpath-1.0.0" - sources."generate-function-2.0.0" - sources."generate-object-property-1.2.0" - sources."glob-7.1.2" - sources."globals-9.18.0" - sources."globby-5.0.0" - sources."graceful-fs-4.1.11" - sources."has-ansi-2.0.0" - sources."has-flag-2.0.0" - sources."iconv-lite-0.4.19" - sources."ignore-3.3.7" - sources."imurmurhash-0.1.4" - sources."in-publish-2.0.0" - sources."inflight-1.0.6" - sources."inherits-2.0.3" - (sources."inquirer-0.12.0" // { - dependencies = [ - sources."ansi-styles-2.2.1" - sources."chalk-1.1.3" - sources."supports-color-2.0.0" - ]; - }) - sources."install-0.10.4" - sources."interpret-1.1.0" - sources."iota.lib.js-0.4.6" - sources."is-fullwidth-code-point-1.0.0" - sources."is-my-json-valid-2.16.1" - sources."is-path-cwd-1.0.0" - sources."is-path-in-cwd-1.0.0" - sources."is-path-inside-1.0.1" - sources."is-property-1.0.2" - sources."is-resolvable-1.0.1" - sources."is-stream-1.1.0" - sources."isarray-1.0.0" - sources."js-tokens-3.0.2" - sources."js-yaml-3.10.0" - sources."json-stable-stringify-1.0.1" - sources."json5-0.5.1" - sources."jsonify-0.0.0" - sources."jsonpointer-4.0.1" - sources."left-pad-1.2.0" - sources."levn-0.3.0" - sources."lodash-4.17.4" - sources."log-update-1.0.2" - sources."minimatch-3.0.4" - sources."minimist-0.0.8" - sources."mkdirp-0.5.1" - sources."moment-2.20.1" - sources."ms-2.0.0" - sources."mute-stream-0.0.5" - sources."natural-compare-1.4.0" - sources."node-fetch-1.7.3" - sources."node-localstorage-0.6.0" - sources."number-is-nan-1.0.1" - sources."object-assign-4.1.1" - sources."once-1.4.0" - sources."onetime-1.1.0" - sources."optionator-0.8.2" - sources."os-homedir-1.0.2" - sources."path-is-absolute-1.0.1" - sources."path-is-inside-1.0.2" - sources."path-parse-1.0.5" - sources."pify-2.3.0" - sources."pinkie-2.0.4" - sources."pinkie-promise-2.0.1" - sources."pluralize-1.2.1" - sources."prelude-ls-1.1.2" - (sources."prettyjson-1.2.1" // { - dependencies = [ - sources."minimist-1.2.0" - ]; - }) - sources."process-nextick-args-1.0.7" - sources."progress-1.1.8" - sources."readable-stream-2.3.3" - sources."readline2-1.0.1" - sources."rechoir-0.6.2" - sources."regenerator-runtime-0.10.5" - sources."require-uncached-1.0.3" - sources."resolve-1.5.0" - sources."resolve-from-1.0.1" - sources."restore-cursor-1.0.1" - sources."rimraf-2.6.2" - sources."run-async-0.1.0" - sources."rx-lite-3.1.2" - sources."safe-buffer-5.1.1" - sources."shelljs-0.7.8" - sources."slice-ansi-0.0.4" - sources."sprintf-js-1.0.3" - sources."string-width-1.0.2" - sources."string_decoder-1.0.3" - sources."strip-ansi-3.0.1" - sources."strip-bom-3.0.0" - sources."strip-json-comments-2.0.1" - sources."supports-color-4.5.0" - (sources."table-3.8.3" // { - dependencies = [ - sources."ansi-regex-3.0.0" - sources."ansi-styles-2.2.1" - (sources."chalk-1.1.3" // { - dependencies = [ - sources."ansi-regex-2.1.1" - sources."strip-ansi-3.0.1" - ]; - }) - sources."is-fullwidth-code-point-2.0.0" - sources."string-width-2.1.1" - sources."strip-ansi-4.0.0" - sources."supports-color-2.0.0" - ]; - }) - sources."text-table-0.2.0" - sources."through-2.3.8" - sources."type-check-0.3.2" - sources."typedarray-0.0.6" - sources."user-home-2.0.0" - sources."util-deprecate-1.0.2" - (sources."vorpal-1.12.0" // { - dependencies = [ - sources."ansi-styles-2.2.1" - sources."chalk-1.1.3" - sources."cli-width-1.1.1" - (sources."inquirer-0.11.0" // { - dependencies = [ - sources."lodash-3.10.1" - ]; - }) - sources."minimist-1.2.0" - sources."supports-color-2.0.0" - ]; - }) - sources."wordwrap-1.0.0" - sources."wrap-ansi-2.1.0" - sources."wrappy-1.0.2" - sources."write-0.2.1" - sources."xmlhttprequest-1.8.0" - sources."xtend-4.0.1" - ]; - buildInputs = globalBuildInputs; - meta = { - description = "IOTA CLI"; - homepage = "https://github.com/iotaledger/cli-app#readme"; - license = "MIT"; - }; - production = true; - bypassCache = true; - }; -in -{ - tarball = nodeEnv.buildNodeSourceDist args; - package = nodeEnv.buildNodePackage args; - shell = nodeEnv.buildNodeShell args; -} diff --git a/pkgs/crypto/sia/default.nix b/pkgs/crypto/sia/default.nix deleted file mode 100644 index 27e4014..0000000 --- a/pkgs/crypto/sia/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenv, fetchzip, autoPatchelfHook }: -stdenv.mkDerivation rec { - version = "v1.4.3"; - name = "Sia-${version}"; - src = fetchzip { - url = "https://sia.tech/static/releases/${name}-linux-amd64.zip"; - sha256 = "1i67zjzk4cwfzb1dxaxc1m41fa44sz1d0mf6dmlyg6pm4cyqizki"; - }; - phases = "installPhase fixupPhase"; - nativeBuildInputs = [ - autoPatchelfHook - ]; - installPhase = '' - mkdir -p $out/share/doc - mkdir -p $out/bin - mkdir -p $out/share/sia - cp -a $src/doc $out/share/doc/sia - cp -a $src/LICENSE $src/README.md $out/share/sia - cp -a $src/{siac,siad} $out/bin - ''; -} diff --git a/pkgs/default.nix b/pkgs/default.nix deleted file mode 100644 index 5f5df82..0000000 --- a/pkgs/default.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ pkgs }: -with pkgs; -let - mylibs = import ../lib { inherit pkgs; }; -in -rec { - sources = import ../nix/sources.nix; - myEnvironments = callPackage ../environments {}; - boinctui = callPackage ./boinctui {}; - cnagios = callPackage ./cnagios { inherit mylibs; }; - commento = callPackage ./commento {}; - flrn = callPackage ./flrn { inherit mylibs; slang = callPackage ./slang_1 {}; }; - genius = callPackage ./genius {}; - mtop = callPackage ./mtop {}; - muttprint = callPackage ./muttprint {}; - mutt-ics = callPackage ./mutt-ics { inherit mylibs; }; - nagios-cli = callPackage ./nagios-cli { inherit mylibs; }; - nagnu = callPackage ./nagnu { inherit mylibs; }; - nb = callPackage ./nb {}; - note = callPackage ./note {}; - notmuch-python2 = callPackage ./notmuch/notmuch-python { pythonPackages = python2Packages; }; - notmuch-python3 = callPackage ./notmuch/notmuch-python { pythonPackages = python3Packages; }; - notmuch-vim = callPackage ./notmuch/notmuch-vim {}; - pgloader = callPackage ./pgloader {}; - predixy = callPackage ./predixy { inherit mylibs; }; - rrsync_sudo = callPackage ./rrsync_sudo {}; - signaldctl = callPackage ./signaldctl {}; - telegram-history-dump = callPackage ./telegram-history-dump { inherit mylibs; }; - telegramircd = callPackage ./telegramircd { inherit mylibs; telethon = callPackage ./telethon_sync {}; }; - terminal-velocity = callPackage ./terminal-velocity {}; - tiv = callPackage ./tiv {}; - twins = callPackage ./twins {}; - umami = callPackage ./umami {}; - unicodeDoc = callPackage ./unicode {}; - - cardano = callPackage ./crypto/cardano { inherit mylibs; }; - cardano-cli = callPackage ./crypto/cardano-cli {}; - iota-cli-app = callPackage ./crypto/iota-cli-app { inherit mylibs; }; - sia = callPackage ./crypto/sia {}; - - proftpd = callPackage ./proftpd {}; - pure-ftpd = callPackage ./pure-ftpd {}; - - composerEnv = callPackage ./composer-env {}; - webapps = callPackage ./webapps { inherit mylibs composerEnv; }; - - monitoring-plugins = callPackage ./monitoring-plugins {}; - naemon = callPackage ./naemon { inherit mylibs monitoring-plugins; }; - naemon-livestatus = callPackage ./naemon-livestatus { inherit mylibs naemon; }; - gearmand = callPackage ./gearmand {}; - status_engine = { - module = callPackage ./status_engine/module.nix { inherit mylibs; }; - worker = callPackage ./status_engine/worker.nix { inherit mylibs composerEnv; }; - interface = callPackage ./status_engine/interface.nix { inherit composerEnv; }; - }; - - python3PackagesPlus = callPackage ./python-packages { - python = python3; - inherit mylibs; - }; - dovecot_deleted-to-trash = callPackage ./dovecot/plugins/deleted_to_trash { - inherit mylibs; - }; -} diff --git a/pkgs/dovecot/plugins/deleted_to_trash/default.nix b/pkgs/dovecot/plugins/deleted_to_trash/default.nix deleted file mode 100644 index db1afb5..0000000 --- a/pkgs/dovecot/plugins/deleted_to_trash/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenv, fetchurl, dovecot, mylibs, fetchpatch }: - -stdenv.mkDerivation (mylibs.fetchedGithub ./dovecot-deleted_to_trash.json // rec { - buildInputs = [ dovecot ]; - patches = [ - (fetchpatch { - name = "fix-dovecot-2.3.diff"; - url = "https://github.com/lexbrugman/dovecot_deleted_to_trash/commit/c52a3799a96104a603ade33404ef6aa1db647b2f.diff"; - sha256 = "0pld3rdcjp9df2qxbp807k6v4f48lyk0xy5q508ypa57d559y6dq"; - }) - ./fix_mbox.patch - ]; - preConfigure = '' - substituteInPlace Makefile --replace \ - "/usr/include/dovecot" \ - "${dovecot}/include/dovecot" - substituteInPlace Makefile --replace \ - "/usr/lib/dovecot/modules" \ - "$out/lib/dovecot" - ''; -}) diff --git a/pkgs/dovecot/plugins/deleted_to_trash/dovecot-deleted_to_trash.json b/pkgs/dovecot/plugins/deleted_to_trash/dovecot-deleted_to_trash.json deleted file mode 100644 index 2987a02..0000000 --- a/pkgs/dovecot/plugins/deleted_to_trash/dovecot-deleted_to_trash.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "81b0754-master", - "meta": { - "name": "dovecot-deleted_to_trash", - "url": "https://github.com/lexbrugman/dovecot_deleted_to_trash", - "branch": "master" - }, - "github": { - "owner": "lexbrugman", - "repo": "dovecot_deleted_to_trash", - "rev": "81b07549accfc36467bf8527a53c295c7a02dbb9", - "sha256": "1b3k31g898s4fa0a9l4kvjsdyds772waaay84sjdxv09jw6mqs0f", - "fetchSubmodules": true - } -} diff --git a/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch b/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch deleted file mode 100644 index 0060fb4..0000000 --- a/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/deleted-to-trash-plugin.c b/src/deleted-to-trash-plugin.c -index bb4cc78..66bad53 100644 ---- a/src/deleted-to-trash-plugin.c -+++ b/src/deleted-to-trash-plugin.c -@@ -82,6 +82,7 @@ static struct mailbox *mailbox_open_or_create(struct mailbox_list *list, const c - *error_r = mail_storage_get_last_error(mailbox_get_storage(box), &error); - if (error != MAIL_ERROR_NOTFOUND) - { -+ i_error("%s", *error_r); - mailbox_free(&box); - return NULL; - } diff --git a/pkgs/flrn/default.nix b/pkgs/flrn/default.nix deleted file mode 100644 index f288615..0000000 --- a/pkgs/flrn/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ stdenv, mylibs, libetpan, openssl, autoconf, groff, slang, yacc }: -stdenv.mkDerivation (mylibs.fetchedGithub ./flrn.json // { - buildInputs = [ libetpan openssl autoconf groff slang yacc ]; - preConfigure = '' - sed -i -e "s/test -e configure/false/" configure.in - autoconf - sed -i -e '/define CHECK_MAIL/d' src/flrn_config.h - sed -i -e '/DEFAULT_DIR_FILE/s@".flrn"@".config/flrn"@' src/flrn_config.h - sed -i -e '/DEFAULT_CONFIG_FILE/s@".flrnrc"@"flrnrc"@' src/flrn_config.h - sed -i -e '/DEFAULT_FLNEWS_FILE/s@".flnewsrc"@"flnewsrc"@' src/flrn_config.h - sed -i -e '/flrn_char chaine/s@18@20@' src/flrn_command.c - ''; -}) diff --git a/pkgs/flrn/flrn.json b/pkgs/flrn/flrn.json deleted file mode 100644 index 3d7a944..0000000 --- a/pkgs/flrn/flrn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "860d642-master", - "meta": { - "name": "flrn", - "url": "https://github.com/Cigaes/flrn", - "branch": "master" - }, - "github": { - "owner": "Cigaes", - "repo": "flrn", - "rev": "860d642bd6389a209c8b697bd044f78d23406509", - "sha256": "0sqlxxpy1xg7cb2hbxcr0al46nyr6jjnns4b5i8w04z5sypa9r5c", - "fetchSubmodules": true - } -} diff --git a/pkgs/gearmand/default.nix b/pkgs/gearmand/default.nix deleted file mode 100644 index bb3be89..0000000 --- a/pkgs/gearmand/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ stdenv, fetchurl, boost, gperf, libevent, libmysqlclient, libuuid, python3, sqlite, hiredis, postgresql, openssl }: -stdenv.mkDerivation rec { - pname = "gearmand"; - version = "1.1.19.1"; - src = fetchurl { - url = "https://github.com/gearman/${pname}/releases/download/${version}/${pname}-${version}.tar.gz"; - sha256 = "1yvb2r3n89p43nchsi3d4nwl0f4xsiy8msnacmm4x4hcdb8y19lf"; - }; - buildInputs = [ boost gperf libevent openssl libmysqlclient libuuid sqlite hiredis postgresql ]; - configureFlags = [ - "--with-boost=${boost.dev}" - "--with-boost-libdir=${boost}/lib" - "--with-openssl=${openssl.dev}" - "--enable-ssl" - ]; -} diff --git a/pkgs/genius/default.nix b/pkgs/genius/default.nix deleted file mode 100644 index b40d1d0..0000000 --- a/pkgs/genius/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ stdenv, fetchurl, mpfr, glib, hicolor-icon-theme, gtk2, intltool, gnome-doc-utils, python3, gnome2, autoconf, automake, libtool, ncurses, readline, pkg-config, }: -stdenv.mkDerivation rec { - name = "genius-${version}"; - version = "1.0.24"; - src = fetchurl { - url = "https://download.gnome.org/sources/genius/1.0/${name}.tar.xz"; - sha256 = "772f95f6ae4716d39bb180cd50e8b6b9b074107bee0cd083b825e1e6e55916b6"; - }; - buildInputs = [ - mpfr glib hicolor-icon-theme gtk2 intltool gnome-doc-utils python3 gnome2.gtksourceview - autoconf automake libtool ncurses readline pkg-config - ]; - preConfigure = '' - autoreconf -fi - ''; - preBuild = '' - sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool - ''; -} diff --git a/pkgs/monitoring-plugins/default.nix b/pkgs/monitoring-plugins/default.nix deleted file mode 100644 index 852d29b..0000000 --- a/pkgs/monitoring-plugins/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ stdenv, iputils, fetchpatch, fetchurl, file, hostname, perl, openssl, - bind, openldap, procps-ng, postfix, - wrapperDir ? "/run/wrappers/bin" -}: -stdenv.mkDerivation rec { - pname = "monitoring-plugins"; - version = "2.2"; - name = "${pname}-${version}"; - - src = fetchurl { - url = "https://www.monitoring-plugins.org/download/${name}.tar.gz"; - sha256 = "0r9nvnk64nv7k8w352n99lw4p92pycxd9wlga9zyzjx9027m6si9"; - }; - - patches = [ - (fetchpatch { - name = "mariadb.patch"; - url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/0001-mariadb.patch?h=packages/monitoring-plugins"; - sha256 = "0jf6fqkyzag66rid92m7asnr2dp8rr8kn4zjvhqg0mqvf8imppky"; - }) - ]; - - # ping needs CAP_NET_RAW capability which is set only in the wrappers namespace - configurePhase = '' - ./configure --disable-static --disable-dependency-tracking \ - --prefix=$out \ - --with-ping-command="${wrapperDir}/ping -4 -n -U -w %d -c %d %s" \ - --with-ping6-command="${wrapperDir}/ping -6 -n -U -w %d -c %d %s" \ - --with-sudo-command="${wrapperDir}/sudo" - ''; - - buildInputs = [ perl file hostname iputils openssl openldap procps-ng bind.dnsutils postfix ]; -} diff --git a/pkgs/mtop/default.nix b/pkgs/mtop/default.nix deleted file mode 100644 index 3f6b6bc..0000000 --- a/pkgs/mtop/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ buildPerlPackage, fetchurl, perlPackages, lib }: -buildPerlPackage rec { - pname = "mtop"; - version = "0.6.6"; - src = fetchurl { - url = "http://downloads.sourceforge.net/project/mtop/mtop/v${version}/mtop-${version}.tar.gz"; - sha256 = "0x0x5300b1j9i0xxk8rsrki0pspyzj2vylhzv8qg3l6j26aw0zrf"; - }; - outputs = ["out"]; - buildInputs = with perlPackages; [ DBI DBDmysql Curses ]; - - postInstall = '' - cd "$out" - preConfigure || true - ''; - - meta = with lib; { - description = "MySQL top (monitor and examine slow queries)"; - homepage = http://mtop.sourceforge.net/; - license = licenses.gpl3; - maintainers = with maintainers; [ { name = "Marc Prewitt"; email = "mprewitt@chelsea.net"; } ]; - platforms = platforms.unix; - }; -} diff --git a/pkgs/mutt-ics/default.nix b/pkgs/mutt-ics/default.nix deleted file mode 100644 index a8a529b..0000000 --- a/pkgs/mutt-ics/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ python3Packages, mylibs }: -with python3Packages; -buildPythonApplication (mylibs.fetchedGithub ./mutt-ics.json // { - propagatedBuildInputs = [ icalendar ]; -}) diff --git a/pkgs/mutt-ics/mutt-ics.json b/pkgs/mutt-ics/mutt-ics.json deleted file mode 100644 index ae8ed37..0000000 --- a/pkgs/mutt-ics/mutt-ics.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "d291187-master", - "meta": { - "name": "mutt-ics", - "url": "https://github.com/dmedvinsky/mutt-ics", - "branch": "master" - }, - "github": { - "owner": "dmedvinsky", - "repo": "mutt-ics", - "rev": "d29118788f291f67d34fefa6eda9f95846a2fe34", - "sha256": "0kqzngsvzjq5gpf60jhfmb2xzjznvk172khf4dlcb72n3ak4rb92", - "fetchSubmodules": true - } -} diff --git a/pkgs/muttprint/0.73-4.diff.gz b/pkgs/muttprint/0.73-4.diff.gz deleted file mode 100644 index c4f3cef..0000000 Binary files a/pkgs/muttprint/0.73-4.diff.gz and /dev/null differ diff --git a/pkgs/muttprint/default.nix b/pkgs/muttprint/default.nix deleted file mode 100644 index 0863a7b..0000000 --- a/pkgs/muttprint/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ stdenv, fetchurl, lib, psutils, dialog, texlive, makeWrapper, automake, autoconf, imagemagick, ghostscript, perl, perlPackages }: -stdenv.mkDerivation rec { - name = "muttprint-${version}"; - version = "0.73"; - src = fetchurl { - url = "http://downloads.sf.net/muttprint/${name}.tar.gz"; - sha256 = "1dny4niyibfgazwlzfcnb37jy6k140rs6baaj629z12rmahfdavw"; - }; - patches = [ - ./0.73-4.diff.gz - ./regex.patch - ./two_edge.patch - ]; - preConfigure = '' - aclocal - automake --add-missing --copy - autoconf - ''; - preBuild = '' - cd pics - convert -flop BabyTuX.eps BabyTuX.eps - for i in BabyTuX_color.eps BabyTuX.eps Debian_color.eps \ - Debian.eps Gentoo.eps Gentoo_color.eps ; do - convert $i $(basename $i .eps).png - done - convert penguin.eps penguin.jpg - cd .. - ''; - postInstall = '' - perlFlags= - for i in $(IFS=:; echo $PERL5LIB); do - perlFlags="$perlFlags -I$i" - done - - sed -i "$out/bin/muttprint" -e "s|^#\!\(.*[ /]perl.*\)$|#\!\1$perlFlags|" - sed -i "$out/bin/muttprint" -e "s|ENV{HOME}/.muttprintrc|ENV{XDG_CONFIG_HOME}/muttprint/muttprintrc|" - - wrapProgram $out/bin/muttprint \ - --prefix PATH : ${lib.makeBinPath [ psutils dialog - (texlive.combine { inherit (texlive) scheme-basic utopia fancyvrb lastpage marvosym ucs cm-super; }) ]} - ''; - buildInputs = [ makeWrapper automake autoconf imagemagick ghostscript perl ] ++ - (with perlPackages; [ TimeDate FileWhich TextIconv ]); -} diff --git a/pkgs/muttprint/regex.patch b/pkgs/muttprint/regex.patch deleted file mode 100644 index e99c4a2..0000000 --- a/pkgs/muttprint/regex.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/muttprint 2015-07-21 11:18:04.219578426 +1200 -+++ b/muttprint 2015-07-21 11:18:53.906243779 +1200 -@@ -1635,7 +1635,7 @@ - open (AUX, "$auxfile") or fatalError "Could not open $auxfile:\n$!"; - - while () { -- ($numberOfPages) = /\\newlabel{LastPage}{{}{(\d+)}}/; -+ ($numberOfPages) = /\\newlabel\{LastPage}\{\{}\{(\d+)}}/; - } - - close AUX or fatalError "Could not close $auxfile:\n$!"; diff --git a/pkgs/muttprint/two_edge.patch b/pkgs/muttprint/two_edge.patch deleted file mode 100644 index 4a7290d..0000000 --- a/pkgs/muttprint/two_edge.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/muttprint 2016-05-05 13:48:50.515950744 +1200 -+++ b/muttprint 2016-05-05 13:52:10.722623902 +1200 -@@ -643,14 +643,14 @@ - if ($Config{PAPERSAVE} eq "on") { - if ($useCups) { - $Config{PRINT_COMMAND} =~ -- s/\$CUPS_OPTIONS/ -o sides=two-sided-long-edge \$CUPS_OPTIONS/; -+ s/\$CUPS_OPTIONS/ -o sides=two-sided-short-edge \$CUPS_OPTIONS/; - } else { # no cups - modifyPS("landscape"); - } - } else { # no papersave - if ($useCups) { - $Config{PRINT_COMMAND} =~ -- s/\$CUPS_OPTIONS/ -o sides=two-sided-short-edge \$CUPS_OPTIONS/; -+ s/\$CUPS_OPTIONS/ -o sides=two-sided-long-edge \$CUPS_OPTIONS/; - } else { # no cups - modifyPS("portrait"); - } diff --git a/pkgs/naemon-livestatus/default.nix b/pkgs/naemon-livestatus/default.nix deleted file mode 100644 index 46ef51a..0000000 --- a/pkgs/naemon-livestatus/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ stdenv, mylibs, autoconf, automake, - libtool, pkg-config, naemon, - varDir ? "/var/lib/naemon", - etcDir ? "/etc/naemon" -}: -stdenv.mkDerivation (mylibs.fetchedGithub ./naemon-livestatus.json // { - preConfigure = '' - ./autogen.sh || true - ''; - - configureFlags = [ - "--localstatedir=${varDir}" - "--sysconfdir=${etcDir}" - ]; - - preInstall = '' - substituteInPlace Makefile --replace \ - '@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am' \ - '@$(MAKE) $(AM_MAKEFLAGS) install-exec-am' - ''; - - buildInputs = [ autoconf automake libtool pkg-config naemon ]; -}) diff --git a/pkgs/naemon-livestatus/naemon-livestatus.json b/pkgs/naemon-livestatus/naemon-livestatus.json deleted file mode 100644 index c648d2b..0000000 --- a/pkgs/naemon-livestatus/naemon-livestatus.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "33dbcfe-master", - "meta": { - "name": "naemon-livestatus", - "url": "https://github.com/naemon/naemon-livestatus", - "branch": "master" - }, - "github": { - "owner": "naemon", - "repo": "naemon-livestatus", - "rev": "33dbcfe18e42158f25c27cff95a1e07b73be53b0", - "sha256": "16jk0c6pwr7ck0g6s12hj6czbhgdr7c7f74zzsp5279af86y8fd6", - "fetchSubmodules": true - } -} diff --git a/pkgs/naemon/default.nix b/pkgs/naemon/default.nix deleted file mode 100644 index 0341296..0000000 --- a/pkgs/naemon/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ stdenv, mylibs, help2man, monitoring-plugins, autoconf, automake, - libtool, glib, pkg-config, gperf, - varDir ? "/var/lib/naemon", - etcDir ? "/etc/naemon", - cacheDir ? "/var/cache/naemon", - logDir ? "/var/log/naemon", - runDir ? "/run/naemon", - user ? "naemon", - group ? "naemon" -}: -stdenv.mkDerivation (mylibs.fetchedGithub ./naemon.json // { - passthru.status_engine_version = "1-1-0"; - preConfigure = '' - ./autogen.sh || true - ''; - - configureFlags = [ - "--localstatedir=${varDir}" - "--sysconfdir=${etcDir}" - "--with-pkgconfdir=${etcDir}" - "--with-pluginsdir=${monitoring-plugins}/libexec" - "--with-tempdir=${cacheDir}" - "--with-checkresultdir=${cacheDir}/checkresults" - "--with-logdir=${logDir}" - "--with-naemon-user=${user}" - "--with-naemon-group=${group}" - "--with-lockfile=${runDir}/naemon.pid" - ]; - - preInstall = '' - substituteInPlace Makefile --replace '$(MAKE) $(AM_MAKEFLAGS) install-exec-hook' "" - ''; - - buildInputs = [ autoconf automake help2man libtool glib pkg-config gperf ]; -}) diff --git a/pkgs/naemon/naemon.json b/pkgs/naemon/naemon.json deleted file mode 100644 index 2dc9809..0000000 --- a/pkgs/naemon/naemon.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "d7ac1c8-master", - "meta": { - "name": "naemon", - "url": "https://github.com/naemon/naemon-core", - "branch": "master" - }, - "github": { - "owner": "naemon", - "repo": "naemon-core", - "rev": "d7ac1c824e01dbb1c4a6bd0550b324e7cf165d54", - "sha256": "003grwciplnqfn9jh2km2pm6xxp8fxvmwihg3vmch8f0vfwcmv1m", - "fetchSubmodules": true - } -} diff --git a/pkgs/nagios-cli/default.nix b/pkgs/nagios-cli/default.nix deleted file mode 100644 index 7d7e7cc..0000000 --- a/pkgs/nagios-cli/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -{ python2Packages, mylibs }: -python2Packages.buildPythonApplication (mylibs.fetchedGithub ./nagios-cli.json) diff --git a/pkgs/nagios-cli/nagios-cli.json b/pkgs/nagios-cli/nagios-cli.json deleted file mode 100644 index fc91227..0000000 --- a/pkgs/nagios-cli/nagios-cli.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "edc51ea-master", - "meta": { - "name": "nagios-cli", - "url": "https://github.com/tehmaze/nagios-cli", - "branch": "master" - }, - "github": { - "owner": "tehmaze", - "repo": "nagios-cli", - "rev": "edc51eaccf1086bb4469ce45c5e5155f2d71a2f9", - "sha256": "1qw5fv4niz079zqwmfr3kzjv8cc31rbhi9whdbv9c32qdi3h7vsp", - "fetchSubmodules": true - } -} diff --git a/pkgs/nagnu/default.nix b/pkgs/nagnu/default.nix deleted file mode 100644 index 2b9c0ec..0000000 --- a/pkgs/nagnu/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ stdenv, mylibs, ncurses, curl }: -stdenv.mkDerivation (mylibs.fetchedGithub ./nagnu.json // rec { - buildInputs = [ ncurses curl ]; - installPhase = '' - mkdir -p $out/bin - cp nagnu $out/bin - mkdir -p $out/share/doc/nagnu - cp nagnu.conf.sample $out/share/doc/nagnu - mkdir -p $out/share/man/man8 - cp docs/nagnu.8 $out/share/man/man8 - ''; -}) diff --git a/pkgs/nagnu/nagnu.json b/pkgs/nagnu/nagnu.json deleted file mode 100644 index 60a8b07..0000000 --- a/pkgs/nagnu/nagnu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "c7e65fc-master", - "meta": { - "name": "nagnu", - "url": "https://github.com/frlen/nagnu", - "branch": "master" - }, - "github": { - "owner": "frlen", - "repo": "nagnu", - "rev": "c7e65fc02f46a3756a4cc47953ea2f3e57a84728", - "sha256": "1i2jm8ibvqcc734daamnzc3hx8q0nsry1x12q0kr5yvcsdjjgyy3", - "fetchSubmodules": true - } -} diff --git a/pkgs/nb/default.nix b/pkgs/nb/default.nix deleted file mode 100644 index 37cc89f..0000000 --- a/pkgs/nb/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ pkgs ? import {} }: with pkgs; -stdenv.mkDerivation { - pname = "nb"; - version = "e0d4e24-master"; - src = fetchFromGitHub { - owner = "xwmx"; - repo = "nb"; - rev = "e0d4e24201299916d736be6a9800793cec32927e"; - sha256 = "0gpnlzxjlfn3bagw74lsrmfhxj2xzvk6sjj24wp9rjpk42d9mfml"; - }; - phases = "installPhase"; - installPhase = '' - mkdir -p $out/bin $out/share/zsh/vendor-completions $out/share/bash-completion/completions - cp $src/nb $out/bin/nb - chmod +x $out/bin/nb - patchShebangs $out/bin/nb - cp $src/etc/nb-completion.zsh $out/share/zsh/vendor-completions/_nb - cp $src/etc/nb-completion.bash $out/share/bash-completion/completions/nb - ''; -} diff --git a/pkgs/note/default.nix b/pkgs/note/default.nix deleted file mode 100644 index d5fcccd..0000000 --- a/pkgs/note/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ lib, buildPerlPackage, fetchurl, perlPackages }: -buildPerlPackage rec { - pname = "note"; - version = "1.3.26"; - src = fetchurl { - url = "mirror://cpan/authors/id/T/TL/TLINDEN/${pname}-${version}.tar.gz"; - sha256 = "1h645rnb5vpms48fcyzvp7cwwcbf9k5xq49w2bpniyzzgk2brjrq"; - }; - outputs = ["out" "man"]; - propagatedBuildInputs = with perlPackages; [ YAML ]; - - meta = with lib; { - description = "A perl script for maintaining notes"; - homepage = http://www.daemon.de/NOTE; - license = licenses.gpl3; - maintainers = with maintainers; [ { name = "T.v.Dein"; email = "tlinden@cpan.org"; } ]; - platforms = platforms.unix; - }; -} diff --git a/pkgs/notmuch/notmuch-python/default.nix b/pkgs/notmuch/notmuch-python/default.nix deleted file mode 100644 index d639d9a..0000000 --- a/pkgs/notmuch/notmuch-python/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ stdenv, notmuch, pythonPackages }: -stdenv.mkDerivation rec { - name = "notmuch-${pythonPackages.python.name}-${version}"; - version = notmuch.version; - outputs = [ "out" ]; - buildInputs = with pythonPackages; [ sphinx python ]; - src = notmuch.src; - phases = [ "unpackPhase" "buildPhase" "installPhase" "fixupPhase" ]; - buildPhase = '' - cd bindings/python - python setup.py build - ''; - installPhase = '' - python setup.py install --prefix=$out --optimize=1 - ''; -} diff --git a/pkgs/notmuch/notmuch-vim/default.nix b/pkgs/notmuch/notmuch-vim/default.nix deleted file mode 100644 index e79a253..0000000 --- a/pkgs/notmuch/notmuch-vim/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ stdenv, notmuch }: -stdenv.mkDerivation rec { - name = "notmuch-vim-${version}"; - version = notmuch.version; - outputs = [ "out" ]; - src = notmuch.src; - phases = [ "unpackPhase" "installPhase" ]; - installPhase = '' - make -C vim DESTDIR=$out prefix="/share/vim/vimfiles" install - ''; -} diff --git a/pkgs/pgloader/default.nix b/pkgs/pgloader/default.nix deleted file mode 100644 index 6093ada..0000000 --- a/pkgs/pgloader/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -# https://github.com/NixOS/nixpkgs/pull/61702 -{ stdenv, fetchurl, makeWrapper, sbcl, sqlite, freetds, libzip, curl, git, cacert, openssl }: -stdenv.mkDerivation rec { - pname = "pgloader"; - version = "3.6.1"; - name = "${pname}-${version}"; - - src = fetchurl { - url = "https://github.com/dimitri/pgloader/releases/download/v3.6.1/pgloader-bundle-3.6.1.tgz"; - sha256 = "1sm8xmq30d1biin5br0y3vrv4fydbrzfqglz1hnvrkdyxrg7d6f9"; - }; - - nativeBuildInputs = [ git makeWrapper ]; - buildInputs = [ sbcl cacert sqlite freetds libzip curl openssl ]; - - LD_LIBRARY_PATH = stdenv.lib.makeLibraryPath [ sqlite libzip curl git openssl freetds ]; - - buildPhase = '' - export PATH=$PATH:$out/bin - export HOME=$TMPDIR - - make pgloader - ''; - - dontStrip = true; - enableParallelBuilding = false; - - installPhase = '' - install -Dm755 bin/pgloader "$out/bin/pgloader" - wrapProgram $out/bin/pgloader --prefix LD_LIBRARY_PATH : "${LD_LIBRARY_PATH}" - ''; - - meta = with stdenv.lib; { - homepage = https://pgloader.io/; - description = "pgloader loads data into PostgreSQL and allows you to implement Continuous Migration from your current database to PostgreSQL"; - maintainers = with maintainers; [ mguentner ]; - license = licenses.postgresql; - platforms = platforms.all; - }; -} diff --git a/pkgs/predixy/default.nix b/pkgs/predixy/default.nix deleted file mode 100644 index 7e7a9ba..0000000 --- a/pkgs/predixy/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ stdenv, mylibs }: -stdenv.mkDerivation (mylibs.fetchedGithub ./predixy.json // { - installPhase = '' - mkdir -p $out/bin - cp src/predixy $out/bin - mkdir -p $out/share - cp -r doc $out/share - cp -r conf $out/share/doc - ''; -}) diff --git a/pkgs/predixy/predixy.json b/pkgs/predixy/predixy.json deleted file mode 100644 index 9f9759c..0000000 --- a/pkgs/predixy/predixy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "dacf3fb-master", - "meta": { - "name": "predixy", - "url": "https://github.com/joyieldInc/predixy", - "branch": "master" - }, - "github": { - "owner": "joyieldInc", - "repo": "predixy", - "rev": "dacf3fb30c2602dc044040df04e194d44b49c1be", - "sha256": "0sbvy0jg551lwkfq8qh0a49cl9mhfnkhi3cnk25l8pz4jcdrr9k9", - "fetchSubmodules": true - } -} diff --git a/pkgs/proftpd/default.nix b/pkgs/proftpd/default.nix deleted file mode 100644 index af9d6c6..0000000 --- a/pkgs/proftpd/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ pkgs ? import {} }: -with pkgs; - -stdenv.mkDerivation rec { - pname = "proftpd"; - version = "1.3.7c"; - src = fetchurl { - url = "https://github.com/proftpd/proftpd/archive/refs/tags/v${version}.tar.gz"; - sha256 = "1nh02j00ly814fk885wn9zx1lb63cqd8qv3mgz719xkckf5rcw3h"; - }; - postPatch = '' - sed -i -e "s@/usr/bin/file@${file}/bin/file@" configure - ''; - dontDisableStatic = 1; - configureFlags = "--enable-openssl --with-modules=mod_ldap:mod_sftp:mod_tls --with-includes=${libsodium.dev}/include --with-libraries=${libsodium}/lib"; - preInstall = '' - installFlagsArray=(INSTALL_USER=$(id -u) INSTALL_GROUP=$(id -g)) - ''; - buildInputs = [ openssl libsodium ncurses cyrus_sasl openldap pkg-config ]; - postInstall = '' - rmdir $out/var $out/libexec $out/lib/proftpd $out/share/locale - ''; -} diff --git a/pkgs/pure-ftpd/default.nix b/pkgs/pure-ftpd/default.nix deleted file mode 100644 index 32a7a91..0000000 --- a/pkgs/pure-ftpd/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ ldapFtpId ? null -, stdenv, fetchurl, openssl, postgresql, openldap }: - -stdenv.mkDerivation rec { - name = "pure-ftpd-1.0.47"; - - src = fetchurl { - url = "https://download.pureftpd.org/pub/pure-ftpd/releases/${name}.tar.gz"; - sha256 = "1b97ixva8m10vln8xrfwwwzi344bkgxqji26d0nrm1yzylbc6h27"; - }; - - preConfigure = stdenv.lib.optionalString (!isNull ldapFtpId) '' - sed -i -e "s#FTPuid#${ldapFtpId}Uid#" src/log_ldap.h - sed -i -e "s#FTPgid#${ldapFtpId}Gid#" src/log_ldap.h - ''; - postConfigure = '' - sed -i 's/define MAX_DATA_SIZE (40/define MAX_DATA_SIZE (70/' src/ftpd.h - ''; - buildInputs = [ openssl postgresql openldap ]; - - configureFlags = [ "--with-everything" "--with-tls" "--with-pgsql" "--with-ldap" ]; - - meta = with stdenv.lib; { - description = "A free, secure, production-quality and standard-conformant FTP server"; - homepage = https://www.pureftpd.org; - license = licenses.isc; # with some parts covered by BSD3(?) - maintainers = [ maintainers.lethalman ]; - platforms = platforms.linux; - }; -} diff --git a/pkgs/python-packages/blivet/default.nix b/pkgs/python-packages/blivet/default.nix deleted file mode 100644 index 108d548..0000000 --- a/pkgs/python-packages/blivet/default.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ lib, writeText, poetry2nix, python, pythonPackages, - gobject-introspection, libblockdev, libbytesize, fetchFromGitHub, - pkg-config, parted, systemd, - with_dmraid ? false, - with_fs_btrfs ? false, - with_fs_fat ? false, - with_fs_f2fs ? false, - with_fs_hfs_plus ? false, - with_fs_jfs ? false, - with_fs_nfs ? false, - with_fs_nfsv4 ? false, - with_fs_ntfs ? false, - with_fs_reiserfs ? false, - with_fs_xfs ? false, - with_luks ? false, - with_lvm ? false, - with_mdadm ? false, - with_multipath ? false, - with_optical ? false, - with_iscsi ? false, - dmraid, multipath_tools, lvm2, eject, kmod, utillinux, lsof, - openiscsi, coreutils, dosfstools, e2fsprogs, jfsutils, btrfs-progs, - xfsprogs, f2fs-tools, hfsprogs, nfs-utils, ntfs3g, ntfsprogs, - reiserfsprogs, devicemapper, cryptsetup, mdadm -}@args: -let - # FIXME: blivet/tasks/fsmount.py links to /sbin - additionalPackages = - lib.optionals with_dmraid [ dmraid ] - ++ lib.optionals with_fs_btrfs [ btrfs-progs ] - ++ lib.optionals with_fs_fat [ dosfstools ] - ++ lib.optionals with_fs_f2fs [ f2fs-tools ] - ++ lib.optionals with_fs_hfs_plus [ hfsprogs ] - ++ lib.optionals with_fs_jfs [ jfsutils ] - ++ lib.optionals with_fs_nfs [ nfs-utils ] - ++ lib.optionals with_fs_ntfs [ ntfs3g ntfsprogs ] - ++ lib.optionals with_fs_reiserfs [ reiserfsprogs ] - ++ lib.optionals with_fs_xfs [ xfsprogs.bin ] - ++ lib.optionals with_luks [ devicemapper cryptsetup ] - ++ lib.optionals with_lvm [ lvm2 ] - ++ lib.optionals with_mdadm [ mdadm ] - ++ lib.optionals with_multipath [ multipath_tools ] - ++ lib.optionals with_optical [ eject ] - ++ lib.optionals with_iscsi [ openiscsi ]; -in -# nix-shell -E "with import {}; pkgs.mkShell { buildInputs = [ python3 python3Packages.blivet3 ]; }" -# nix-shell -E "with import {}; pkgs.mkShell { buildInputs = [ (python3.withPackages(p: [ p.blivet3 ])) ]; }" -poetry2nix.mkPoetryApplication { - inherit python; - propagatedBuildInputs = [ - gobject-introspection - (pythonPackages.toPythonModule libblockdev) - (pythonPackages.toPythonModule libbytesize) - ]; - src = fetchFromGitHub { - owner = "storaged-project"; - repo = "blivet"; - rev = "blivet-3.3.0"; - sha256 = "0ynxm37cxxr2sf2hj18hrdxs1qfw6dgdagkvv5f6g4fmp51m7c3c"; - }; - overrides = poetry2nix.overrides.withDefaults (self: super: { - pyparted = super.pyparted.overridePythonAttrs (old: { - buildInputs = old.buildInputs ++ [ parted ]; - nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; - }); - selinux = super.selinux.overridePythonAttrs (old: { - buildInputs = old.buildInputs ++ [ self.setuptools-scm-git-archive ]; - nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; - }); - }); - patches = [ ./fix_path.patch ]; - postPatch = let - runtimePaths = lib.makeBinPath ([ - systemd utillinux kmod e2fsprogs mdadm lsof coreutils - ] ++ additionalPackages); - libraryPath = builtins.concatStringsSep " " (map (v: "-rpath ${v}/lib -L ${v}/lib") [ systemd.lib ]); - giLibraryPath = lib.makeSearchPath "lib/girepository-1.0" [libblockdev gobject-introspection]; - addGiPath = writeText "add-gi-path" '' - import os - newGiPath = "${giLibraryPath}" - if newGiPath not in os.environ.get("GI_TYPELIB_PATH", ""): - os.environ["GI_TYPELIB_PATH"] = os.environ.get("GI_TYPELIB_PATH", "") + ":" + newGiPath - ''; - addPath = writeText "add-path" '' - import os - newPath = "${runtimePaths}" - newLibraryPath = "${libraryPath}" - if newPath not in os.environ.get("PATH", ""): - os.environ["PATH"] = os.environ.get("PATH", "") + ":" + newPath - os.environ["NIX_LDFLAGS"] = os.environ.get("NIX_LDFLAGS", "") + " " + newLibraryPath - ''; - in - '' - prepend() { - mv "$1" "$1.bak" - cat ${addPath} "$1.bak" > $1 - rm -f "$1.bak" - } - prepend "blivet/__init__.py" - prepend "blivet/iscsi.py" - prepend "blivet/tasks/availability.py" - prepend "blivet/util.py" - prepend "blivet/udev.py" - prependGi() { - mv "$1" "$1.bak" - cat ${addGiPath} "$1.bak" > $1 - rm -f "$1.bak" - } - grep -rl require_version blivet/ | while read i; do prependGi "$i"; done - sed -i -e "s@/lib/modules@/run/booted-system/kernel-modules/lib/modules/@" blivet/tasks/fsmount.py - ''; - postInstall = let - in '' - rm -rf $out/lib/python*/site-packages/{etc,usr} - ''; - pyproject = ./pyproject.toml; - poetrylock = ./poetry.lock; -} diff --git a/pkgs/python-packages/blivet/fix_path.patch b/pkgs/python-packages/blivet/fix_path.patch deleted file mode 100644 index 29c4052..0000000 --- a/pkgs/python-packages/blivet/fix_path.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/blivet/tasks/fsmount.py b/blivet/tasks/fsmount.py -index 15f79a3e..bb3fe873 100644 ---- a/blivet/tasks/fsmount.py -+++ b/blivet/tasks/fsmount.py -@@ -19,6 +19,7 @@ - # - # Red Hat Author(s): Anne Mulhern - -+from distutils.spawn import find_executable - import os - - from ..errors import FSError -@@ -58,7 +59,7 @@ class FSMount(task.BasicApplication, fstask.FSTask): - @property - def _can_mount(self): - return (self.mount_type in fslib.kernel_filesystems) or \ -- (os.access("/sbin/mount.%s" % (self.mount_type,), os.X_OK)) or \ -+ (find_executable("mount.%s" % (self.mount_type,)) is not None) or \ - self._has_driver - - @property diff --git a/pkgs/python-packages/blivet/poetry.lock b/pkgs/python-packages/blivet/poetry.lock deleted file mode 100644 index c45011a..0000000 --- a/pkgs/python-packages/blivet/poetry.lock +++ /dev/null @@ -1,96 +0,0 @@ -[[package]] -name = "distro" -version = "1.5.0" -description = "Distro - an OS platform information API" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pycairo" -version = "1.19.1" -description = "Python interface for cairo" -category = "main" -optional = false -python-versions = ">=3.5, <4" - -[[package]] -name = "pygobject" -version = "3.36.1" -description = "Python bindings for GObject Introspection" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.dependencies] -pycairo = ">=1.11.1" - -[[package]] -name = "pyparted" -version = "3.11.6" -description = "Python bindings for GNU parted" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyudev" -version = "0.22.0" -description = "A libudev binding" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" - -[[package]] -name = "selinux" -version = "0.2.1" -description = "shim selinux module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -distro = ">=1.3.0" -setuptools = ">=39.0" - -[[package]] -name = "six" -version = "1.15.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[metadata] -lock-version = "1.0" -python-versions = "^3.8" -content-hash = "636edb46b1deb0f6d5db636b0bc6639205335c9915480b156a417067137548f8" - -[metadata.files] -distro = [ - {file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"}, - {file = "distro-1.5.0.tar.gz", hash = "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"}, -] -pycairo = [ - {file = "pycairo-1.19.1.tar.gz", hash = "sha256:2c143183280feb67f5beb4e543fd49990c28e7df427301ede04fc550d3562e84"}, -] -pygobject = [ - {file = "PyGObject-3.36.1.tar.gz", hash = "sha256:012a589aec687bfa809a1ff9f5cd775dc7f6fcec1a6bc7fe88e1002a68f8ba34"}, -] -pyparted = [ - {file = "pyparted-3.11.6.tar.gz", hash = "sha256:727ccdf308c194069aa9797f7a6a973bc95b2e407cdf5d58d6c8bc4c9dec92dc"}, -] -pyudev = [ - {file = "pyudev-0.22.0.tar.gz", hash = "sha256:69bb1beb7ac52855b6d1b9fe909eefb0017f38d917cba9939602c6880035b276"}, -] -selinux = [ - {file = "selinux-0.2.1-py2.py3-none-any.whl", hash = "sha256:820adcf1b4451c9cc7759848797703263ba0eb6a4cad76d73548a9e0d57b7926"}, - {file = "selinux-0.2.1.tar.gz", hash = "sha256:d435f514e834e3fdc0941f6a29d086b80b2ea51b28112aee6254bd104ee42a74"}, -] -six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, -] diff --git a/pkgs/python-packages/blivet/pyproject.toml b/pkgs/python-packages/blivet/pyproject.toml deleted file mode 100644 index cf86aa1..0000000 --- a/pkgs/python-packages/blivet/pyproject.toml +++ /dev/null @@ -1,20 +0,0 @@ -[tool.poetry] -name = "blivet" -version = "3.3.0" -description = "A python module for system storage configuration" -authors = ["David Lehman "] -license = "GPL-2.0-or-later" - -[tool.poetry.dependencies] -python = "^3.8" -six = "^1.15.0" -pyudev = "^0.22.0" -pyparted = "^3.11.6" -selinux = "^0.2.1" -pygobject = "^3.36.1" - -[tool.poetry.dev-dependencies] - -[build-system] -requires = ["poetry>=0.12"] -build-backend = "poetry.masonry.api" diff --git a/pkgs/python-packages/buildbot/plugins/buildslist/bower.nix b/pkgs/python-packages/buildbot/plugins/buildslist/bower.nix deleted file mode 100644 index 8b26e0a..0000000 --- a/pkgs/python-packages/buildbot/plugins/buildslist/bower.nix +++ /dev/null @@ -1,9 +0,0 @@ -# Generated by bower2nix v3.2.0 (https://github.com/rvl/bower2nix) -{ fetchbower, buildEnv }: -buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [ - (fetchbower "jquery" "2.1.1" "2.1.1" "1qir36vi0bppjr9ckm6303vk1f1dkvq5wandpihb7dxl76s832bd") - (fetchbower "angular" "1.5.11" "~1.5.3" "1sw31v3dhmxwgrmncw2f9yl07i9px62ssbj0739zsgi59cq2khl7") - (fetchbower "lodash" "2.4.2" "~2.4.1" "0bhqarlvhlrxfvcgnxgsrsjgi6az4c117ffxyfi7gjwr9cvrzz4q") - (fetchbower "angular-mocks" "1.5.11" "~1.5.3" "0yv0396fw51i6d9lwiwf241rmc28rnxgg2aa9vsc7dnm4qjkn6gx") - (fetchbower "buildbot-data" "2.1.0" "~2.1.0" "0hkmm1byy7d712898lhkxf7i0wshmd1f8cr98iz67679nm6abimk") -]; } diff --git a/pkgs/python-packages/buildbot/plugins/buildslist/default.nix b/pkgs/python-packages/buildbot/plugins/buildslist/default.nix deleted file mode 100644 index 4ab4c54..0000000 --- a/pkgs/python-packages/buildbot/plugins/buildslist/default.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ stdenv, runCommand, writeScriptBin, buildBowerComponents, pythonPackages, libsass, python, fetchurl, jq, yarn, nodejs-10_x, yarn2nix-moretea, sources }: -let - yarn2nix-moretea' = yarn2nix-moretea.override({ - yarn = yarn.override({ nodejs = nodejs-10_x; }); - nodejs = nodejs-10_x; - }); - buildslist_src = sources.buildbot-plugin-buildslist; - packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' - cat ${buildslist_src}/package.json | jq -r '.version = "${pythonPackages.buildbot-pkg.version}"|.license= "MIT"' > $out - ''; - nodeHeaders = fetchurl { - url = "https://nodejs.org/download/release/v${nodejs-10_x.version}/node-v${nodejs-10_x.version}-headers.tar.gz"; - sha256 = "15hkcbs328d3rc1s14rmky8lh8d3rr86l8k0bia0ggxzwl23lj9c"; - }; - buildslist_yarn = yarn2nix-moretea'.mkYarnModules rec { - name = "buildslist-yarn-modules"; - pname = name; - inherit (pythonPackages.buildbot-pkg) version; - packageJSON = packagejson; - yarnLock = "${buildslist_src}/yarn.lock"; - yarnNix = ./yarn-packages.nix; - pkgConfig = { - node-sass = { - buildInputs = [ libsass python ]; - postInstall = - '' - node scripts/build.js --tarball=${nodeHeaders} - ''; - }; - }; - }; - buildslist_bower = buildBowerComponents { - name = "buildslist"; - generated = ./bower.nix; - src = "${buildslist_src}/guanlecoja/"; - }; - # the buildbot-pkg calls yarn and screws up everything... - fakeYarn = writeScriptBin "yarn" '' - #!${stdenv.shell} - if [ "$1" = "--version" ]; then - echo "1.17" - fi - ''; -in -pythonPackages.buildPythonPackage rec { - pname = "buildbot-buildslist"; - inherit (pythonPackages.buildbot-pkg) version; - - preConfigure = '' - export HOME=$PWD - ln -s ${buildslist_yarn}/node_modules . - cp -a ${buildslist_bower}/bower_components ./libs - PATH=${buildslist_yarn}/node_modules/.bin:$PATH - chmod -R u+w libs - ''; - propagatedBuildInputs = with pythonPackages; [ - (klein.overridePythonAttrs(old: { checkPhase = ""; })) - buildbot-pkg - ]; - nativeBuildInputs = [ fakeYarn nodejs-10_x ]; - buildInputs = [ buildslist_yarn buildslist_bower ]; - - doCheck = false; - src = buildslist_src; -} diff --git a/pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix b/pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix deleted file mode 100644 index 2ade970..0000000 --- a/pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix +++ /dev/null @@ -1,9293 +0,0 @@ -{fetchurl, linkFarm}: rec { - offline_cache = linkFarm "offline" packages; - packages = [ - - { - name = "_types_babel_types___babel_types_7.0.7.tgz"; - path = fetchurl { - name = "_types_babel_types___babel_types_7.0.7.tgz"; - url = "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz"; - sha1 = "667eb1640e8039436028055737d2b9986ee336e3"; - }; - } - - { - name = "_types_babylon___babylon_6.16.5.tgz"; - path = fetchurl { - name = "_types_babylon___babylon_6.16.5.tgz"; - url = "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz"; - sha1 = "1c5641db69eb8cdf378edd25b4be7754beeb48b4"; - }; - } - - { - name = "_types_color_name___color_name_1.1.1.tgz"; - path = fetchurl { - name = "_types_color_name___color_name_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz"; - sha1 = "1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"; - }; - } - - { - name = "Base64___Base64_0.2.1.tgz"; - path = fetchurl { - name = "Base64___Base64_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz"; - sha1 = "ba3a4230708e186705065e66babdd4c35cf60028"; - }; - } - - { - name = "JSONStream___JSONStream_0.6.4.tgz"; - path = fetchurl { - name = "JSONStream___JSONStream_0.6.4.tgz"; - url = "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.6.4.tgz"; - sha1 = "4b2c8063f8f512787b2375f7ee9db69208fa2dcb"; - }; - } - - { - name = "JSONStream___JSONStream_0.7.4.tgz"; - path = fetchurl { - name = "JSONStream___JSONStream_0.7.4.tgz"; - url = "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.7.4.tgz"; - sha1 = "734290e41511eea7c2cfe151fbf9a563a97b9786"; - }; - } - - { - 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 = "abbrev___abbrev_1.0.9.tgz"; - path = fetchurl { - name = "abbrev___abbrev_1.0.9.tgz"; - url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz"; - sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135"; - }; - } - - { - name = "accepts___accepts_1.3.3.tgz"; - path = fetchurl { - name = "accepts___accepts_1.3.3.tgz"; - url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz"; - sha1 = "c3ca7434938648c3e0d9c1e328dd68b622c284ca"; - }; - } - - { - name = "acorn_globals___acorn_globals_3.1.0.tgz"; - path = fetchurl { - name = "acorn_globals___acorn_globals_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz"; - sha1 = "fd8270f71fbb4996b004fa880ee5d46573a731bf"; - }; - } - - { - name = "acorn___acorn_2.7.0.tgz"; - path = fetchurl { - name = "acorn___acorn_2.7.0.tgz"; - url = "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz"; - sha1 = "ab6e7d9d886aaca8b085bc3312b79a198433f0e7"; - }; - } - - { - name = "acorn___acorn_3.3.0.tgz"; - path = fetchurl { - name = "acorn___acorn_3.3.0.tgz"; - url = "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz"; - sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; - }; - } - - { - 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_2.6.4.tgz"; - path = fetchurl { - name = "acorn___acorn_2.6.4.tgz"; - url = "https://registry.yarnpkg.com/acorn/-/acorn-2.6.4.tgz"; - sha1 = "eb1f45b4a43fa31d03701a5ec46f3b52673e90ee"; - }; - } - - { - name = "after___after_0.8.2.tgz"; - path = fetchurl { - name = "after___after_0.8.2.tgz"; - url = "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz"; - sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f"; - }; - } - - { - name = "ajv___ajv_6.12.0.tgz"; - path = fetchurl { - name = "ajv___ajv_6.12.0.tgz"; - url = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz"; - sha1 = "06d60b96d87b8454a5adaba86e7854da629db4b7"; - }; - } - - { - 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 = "alter___alter_0.2.0.tgz"; - path = fetchurl { - name = "alter___alter_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz"; - sha1 = "c7588808617572034aae62480af26b1d4d1cb3cd"; - }; - } - - { - 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_gray___ansi_gray_0.1.1.tgz"; - path = fetchurl { - name = "ansi_gray___ansi_gray_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz"; - sha1 = "2962cf54ec9792c48510a3deb524436861ef7251"; - }; - } - - { - name = "ansi_regex___ansi_regex_0.2.1.tgz"; - path = fetchurl { - name = "ansi_regex___ansi_regex_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz"; - sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9"; - }; - } - - { - name = "ansi_regex___ansi_regex_1.1.1.tgz"; - path = fetchurl { - name = "ansi_regex___ansi_regex_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz"; - sha1 = "41c847194646375e6a1a5d10c3ca054ef9fc980d"; - }; - } - - { - 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_1.1.0.tgz"; - path = fetchurl { - name = "ansi_styles___ansi_styles_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz"; - sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de"; - }; - } - - { - 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_4.2.1.tgz"; - path = fetchurl { - name = "ansi_styles___ansi_styles_4.2.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz"; - sha1 = "90ae75c424d008d2624c5bf29ead3177ebfcf359"; - }; - } - - { - name = "ansi_styles___ansi_styles_1.0.0.tgz"; - path = fetchurl { - name = "ansi_styles___ansi_styles_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz"; - sha1 = "cb102df1c56f5123eab8b67cd7b98027a0279178"; - }; - } - - { - name = "ansi_wrap___ansi_wrap_0.1.0.tgz"; - path = fetchurl { - name = "ansi_wrap___ansi_wrap_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz"; - sha1 = "a82250ddb0015e9a27ca82e82ea603bbfa45efaf"; - }; - } - - { - name = "ansicolors___ansicolors_0.2.1.tgz"; - path = fetchurl { - name = "ansicolors___ansicolors_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz"; - sha1 = "be089599097b74a5c9c4a84a0cdbcdb62bd87aef"; - }; - } - - { - name = "anymatch___anymatch_1.3.2.tgz"; - path = fetchurl { - name = "anymatch___anymatch_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz"; - sha1 = "553dcb8f91e3c889845dfdba34c77721b90b9d7a"; - }; - } - - { - 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 = "archy___archy_1.0.0.tgz"; - path = fetchurl { - name = "archy___archy_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz"; - sha1 = "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"; - }; - } - - { - name = "archy___archy_0.0.2.tgz"; - path = fetchurl { - name = "archy___archy_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/archy/-/archy-0.0.2.tgz"; - sha1 = "910f43bf66141fc335564597abc189df44b3d35e"; - }; - } - - { - 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 = "argparse___argparse_0.1.16.tgz"; - path = fetchurl { - name = "argparse___argparse_0.1.16.tgz"; - url = "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz"; - sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c"; - }; - } - - { - 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_differ___array_differ_1.0.0.tgz"; - path = fetchurl { - name = "array_differ___array_differ_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz"; - sha1 = "eff52e3758249d33be402b8bb8e564bb2b5d4031"; - }; - } - - { - name = "array_each___array_each_1.0.1.tgz"; - path = fetchurl { - name = "array_each___array_each_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz"; - sha1 = "a794af0c05ab1752846ee753a1f211a05ba0c44f"; - }; - } - - { - name = "array_filter___array_filter_0.0.1.tgz"; - path = fetchurl { - name = "array_filter___array_filter_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz"; - sha1 = "7da8cf2e26628ed732803581fd21f67cacd2eeec"; - }; - } - - { - 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_map___array_map_0.0.0.tgz"; - path = fetchurl { - name = "array_map___array_map_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz"; - sha1 = "88a2bab73d1cf7bcd5c1b118a003f66f665fa662"; - }; - } - - { - name = "array_reduce___array_reduce_0.0.0.tgz"; - path = fetchurl { - name = "array_reduce___array_reduce_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz"; - sha1 = "173899d3ffd1c7d9383e4479525dbe278cab5f2b"; - }; - } - - { - name = "array_slice___array_slice_0.2.3.tgz"; - path = fetchurl { - name = "array_slice___array_slice_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz"; - sha1 = "dd3cfb80ed7973a75117cdac69b0b99ec86186f5"; - }; - } - - { - name = "array_slice___array_slice_1.1.0.tgz"; - path = fetchurl { - name = "array_slice___array_slice_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz"; - sha1 = "e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"; - }; - } - - { - 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 = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; - path = fetchurl { - name = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; - url = "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz"; - sha1 = "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"; - }; - } - - { - name = "asap___asap_2.0.6.tgz"; - path = fetchurl { - name = "asap___asap_2.0.6.tgz"; - url = "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"; - sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46"; - }; - } - - { - name = "asn1___asn1_0.1.11.tgz"; - path = fetchurl { - name = "asn1___asn1_0.1.11.tgz"; - url = "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz"; - sha1 = "559be18376d08a4ec4dbe80877d27818639b2df7"; - }; - } - - { - name = "asn1___asn1_0.2.4.tgz"; - path = fetchurl { - name = "asn1___asn1_0.2.4.tgz"; - url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; - sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; - }; - } - - { - 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.1.5.tgz"; - path = fetchurl { - name = "assert_plus___assert_plus_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz"; - sha1 = "ee74009413002d84cec7219c6ac811812e723160"; - }; - } - - { - name = "assert___assert_1.1.2.tgz"; - path = fetchurl { - name = "assert___assert_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/assert/-/assert-1.1.2.tgz"; - sha1 = "adaa04c46bb58c6dd1f294da3eb26e6228eb6e44"; - }; - } - - { - 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 = "astw___astw_2.2.0.tgz"; - path = fetchurl { - name = "astw___astw_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz"; - sha1 = "7bd41784d32493987aeb239b6b4e1c57a873b917"; - }; - } - - { - name = "async_each___async_each_1.0.3.tgz"; - path = fetchurl { - name = "async_each___async_each_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"; - sha1 = "b727dbf87d7651602f06f4d4ac387f47d91b0cbf"; - }; - } - - { - 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_0.2.10.tgz"; - path = fetchurl { - name = "async___async_0.2.10.tgz"; - url = "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz"; - sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1"; - }; - } - - { - name = "async___async_0.8.0.tgz"; - path = fetchurl { - name = "async___async_0.8.0.tgz"; - url = "https://registry.yarnpkg.com/async/-/async-0.8.0.tgz"; - sha1 = "ee65ec77298c2ff1456bc4418a052d0f06435112"; - }; - } - - { - name = "async___async_0.9.2.tgz"; - path = fetchurl { - name = "async___async_0.9.2.tgz"; - url = "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz"; - sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d"; - }; - } - - { - 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.2.tgz"; - path = fetchurl { - name = "atob___atob_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; - sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; - }; - } - - { - name = "aws_sign2___aws_sign2_0.5.0.tgz"; - path = fetchurl { - name = "aws_sign2___aws_sign2_0.5.0.tgz"; - url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz"; - sha1 = "c57103f7a17fc037f02d7c2e64b602ea223f7d63"; - }; - } - - { - 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 = "aws_sign___aws_sign_0.3.0.tgz"; - path = fetchurl { - name = "aws_sign___aws_sign_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/aws-sign/-/aws-sign-0.3.0.tgz"; - sha1 = "3d81ca69b474b1e16518728b51c24ff0bbedc6e9"; - }; - } - - { - name = "aws4___aws4_1.9.1.tgz"; - path = fetchurl { - name = "aws4___aws4_1.9.1.tgz"; - url = "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz"; - sha1 = "7e33d8f7d449b3f673cd72deb9abdc552dbe528e"; - }; - } - - { - 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_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 = "backo2___backo2_1.0.2.tgz"; - path = fetchurl { - name = "backo2___backo2_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz"; - sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947"; - }; - } - - { - 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_arraybuffer___base64_arraybuffer_0.1.5.tgz"; - path = fetchurl { - name = "base64_arraybuffer___base64_arraybuffer_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz"; - sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8"; - }; - } - - { - name = "base64_js___base64_js_0.0.8.tgz"; - path = fetchurl { - name = "base64_js___base64_js_0.0.8.tgz"; - url = "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz"; - sha1 = "1101e9544f4a76b1bc3b26d452ca96d7a35e7978"; - }; - } - - { - name = "base64id___base64id_1.0.0.tgz"; - path = fetchurl { - name = "base64id___base64id_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz"; - sha1 = "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"; - }; - } - - { - 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.5.3.tgz"; - path = fetchurl { - name = "batch___batch_0.5.3.tgz"; - url = "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz"; - sha1 = "3f3414f380321743bfc1042f9a83ff1d5824d464"; - }; - } - - { - 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 = "beeper___beeper_1.1.1.tgz"; - path = fetchurl { - name = "beeper___beeper_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz"; - sha1 = "e6d5ea8c5dad001304a70b22638447f69cb2f809"; - }; - } - - { - name = "better_assert___better_assert_1.0.2.tgz"; - path = fetchurl { - name = "better_assert___better_assert_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz"; - sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522"; - }; - } - - { - name = "binary_extensions___binary_extensions_1.13.1.tgz"; - path = fetchurl { - name = "binary_extensions___binary_extensions_1.13.1.tgz"; - url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"; - sha1 = "598afe54755b2868a5330d2aff9d4ebb53209b65"; - }; - } - - { - name = "binary___binary_0.3.0.tgz"; - path = fetchurl { - name = "binary___binary_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz"; - sha1 = "9f60553bc5ce8c3386f3b553cff47462adecaa79"; - }; - } - - { - name = "binaryextensions___binaryextensions_1.0.1.tgz"; - path = fetchurl { - name = "binaryextensions___binaryextensions_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz"; - sha1 = "1e637488b35b58bda5f4774bf96a5212a8c90755"; - }; - } - - { - name = "bindings___bindings_1.5.0.tgz"; - path = fetchurl { - name = "bindings___bindings_1.5.0.tgz"; - url = "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"; - sha1 = "10353c9e945334bc0511a6d90b38fbc7c9c504df"; - }; - } - - { - name = "bl___bl_0.9.5.tgz"; - path = fetchurl { - name = "bl___bl_0.9.5.tgz"; - url = "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz"; - sha1 = "c06b797af085ea00bc527afc8efcf11de2232054"; - }; - } - - { - name = "blob___blob_0.0.4.tgz"; - path = fetchurl { - name = "blob___blob_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz"; - sha1 = "bcf13052ca54463f30f9fc7e95b9a47630a94921"; - }; - } - - { - 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 = "bluebird___bluebird_2.11.0.tgz"; - path = fetchurl { - name = "bluebird___bluebird_2.11.0.tgz"; - url = "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz"; - sha1 = "534b9033c022c9579c56ba3b3e5a5caafbb650e1"; - }; - } - - { - name = "body_parser___body_parser_1.19.0.tgz"; - path = fetchurl { - name = "body_parser___body_parser_1.19.0.tgz"; - url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"; - sha1 = "96b2709e57c9c4e09a6fd66a8fd979844f69f08a"; - }; - } - - { - name = "body_parser___body_parser_1.14.2.tgz"; - path = fetchurl { - name = "body_parser___body_parser_1.14.2.tgz"; - url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz"; - sha1 = "1015cb1fe2c443858259581db53332f8d0cf50f9"; - }; - } - - { - name = "boom___boom_0.4.2.tgz"; - path = fetchurl { - name = "boom___boom_0.4.2.tgz"; - url = "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz"; - sha1 = "7a636e9ded4efcefb19cef4947a3c67dfaee911b"; - }; - } - - { - name = "bower_config___bower_config_0.5.3.tgz"; - path = fetchurl { - name = "bower_config___bower_config_0.5.3.tgz"; - url = "https://registry.yarnpkg.com/bower-config/-/bower-config-0.5.3.tgz"; - sha1 = "98fc5b41a87870ef9cbb9297635cf81f5505fdb1"; - }; - } - - { - name = "bower_endpoint_parser___bower_endpoint_parser_0.2.2.tgz"; - path = fetchurl { - name = "bower_endpoint_parser___bower_endpoint_parser_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz"; - sha1 = "00b565adbfab6f2d35addde977e97962acbcb3f6"; - }; - } - - { - name = "bower_json___bower_json_0.4.0.tgz"; - path = fetchurl { - name = "bower_json___bower_json_0.4.0.tgz"; - url = "https://registry.yarnpkg.com/bower-json/-/bower-json-0.4.0.tgz"; - sha1 = "a99c3ccf416ef0590ed0ded252c760f1c6d93766"; - }; - } - - { - name = "bower_logger___bower_logger_0.2.2.tgz"; - path = fetchurl { - name = "bower_logger___bower_logger_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/bower-logger/-/bower-logger-0.2.2.tgz"; - sha1 = "39be07e979b2fc8e03a94634205ed9422373d381"; - }; - } - - { - name = "bower_registry_client___bower_registry_client_0.2.4.tgz"; - path = fetchurl { - name = "bower_registry_client___bower_registry_client_0.2.4.tgz"; - url = "https://registry.yarnpkg.com/bower-registry-client/-/bower-registry-client-0.2.4.tgz"; - sha1 = "269fc7e898b627fb939d1144a593254d7fbbeebc"; - }; - } - - { - name = "bower___bower_1.3.8.tgz"; - path = fetchurl { - name = "bower___bower_1.3.8.tgz"; - url = "https://registry.yarnpkg.com/bower/-/bower-1.3.8.tgz"; - sha1 = "afa3338a8a88a6e084c38112ea4a15998cbee3e6"; - }; - } - - { - 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_0.1.5.tgz"; - path = fetchurl { - name = "braces___braces_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz"; - sha1 = "c085711085291d8b75fdd74eab0f8597280711e6"; - }; - } - - { - 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 = "browser_pack___browser_pack_2.0.1.tgz"; - path = fetchurl { - name = "browser_pack___browser_pack_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/browser-pack/-/browser-pack-2.0.1.tgz"; - sha1 = "5d1c527f56c582677411c4db2a128648ff6bf150"; - }; - } - - { - name = "browser_resolve___browser_resolve_1.2.4.tgz"; - path = fetchurl { - name = "browser_resolve___browser_resolve_1.2.4.tgz"; - url = "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.2.4.tgz"; - sha1 = "59ae7820a82955ecd32f5fb7c468ac21c4723806"; - }; - } - - { - name = "browserify_shim___browserify_shim_2.0.10.tgz"; - path = fetchurl { - name = "browserify_shim___browserify_shim_2.0.10.tgz"; - url = "https://registry.yarnpkg.com/browserify-shim/-/browserify-shim-2.0.10.tgz"; - sha1 = "74a0ed5b9b784a5a287906513a896d31f54a84b8"; - }; - } - - { - name = "browserify_zlib___browserify_zlib_0.1.4.tgz"; - path = fetchurl { - name = "browserify_zlib___browserify_zlib_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz"; - sha1 = "bb35f8a519f600e0fa6b8485241c979d0141fb2d"; - }; - } - - { - name = "browserify___browserify_3.46.1.tgz"; - path = fetchurl { - name = "browserify___browserify_3.46.1.tgz"; - url = "https://registry.yarnpkg.com/browserify/-/browserify-3.46.1.tgz"; - sha1 = "2c2e4a7f2f408178e78c223b5b57b37c2185ad8e"; - }; - } - - { - name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; - path = fetchurl { - name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz"; - sha1 = "bd7dc26ae2972d0eda253be061dba992349c19f0"; - }; - } - - { - name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; - path = fetchurl { - name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz"; - sha1 = "890dd90d923a873e08e10e5fd51a57e5b7cce0ec"; - }; - } - - { - name = "buffer_fill___buffer_fill_1.0.0.tgz"; - path = fetchurl { - name = "buffer_fill___buffer_fill_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz"; - sha1 = "f8f78b76789888ef39f205cd637f68e702122b2c"; - }; - } - - { - name = "buffer___buffer_2.1.13.tgz"; - path = fetchurl { - name = "buffer___buffer_2.1.13.tgz"; - url = "https://registry.yarnpkg.com/buffer/-/buffer-2.1.13.tgz"; - sha1 = "c88838ebf79f30b8b4a707788470bea8a62c2355"; - }; - } - - { - name = "buffers___buffers_0.1.1.tgz"; - path = fetchurl { - name = "buffers___buffers_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz"; - sha1 = "b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"; - }; - } - - { - name = "bufferstreams___bufferstreams_0.0.2.tgz"; - path = fetchurl { - name = "bufferstreams___bufferstreams_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-0.0.2.tgz"; - sha1 = "7ce8dff968bbac00b9e90158a2c41456f740abdd"; - }; - } - - { - name = "builtins___builtins_0.0.7.tgz"; - path = fetchurl { - name = "builtins___builtins_0.0.7.tgz"; - url = "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz"; - sha1 = "355219cd6cf18dbe7c01cc7fd2dce765cfdc549a"; - }; - } - - { - name = "bytes___bytes_2.2.0.tgz"; - path = fetchurl { - name = "bytes___bytes_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz"; - sha1 = "fd35464a403f6f9117c2de3609ecff9cae000588"; - }; - } - - { - name = "bytes___bytes_2.4.0.tgz"; - path = fetchurl { - name = "bytes___bytes_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz"; - sha1 = "7d97196f9d5baf7f6935e25985549edd2a6c2339"; - }; - } - - { - name = "bytes___bytes_3.1.0.tgz"; - path = fetchurl { - name = "bytes___bytes_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"; - sha1 = "f6cf7933a360e0588fa9fde85651cdc7f805d1f6"; - }; - } - - { - 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 = "callsite___callsite_1.0.0.tgz"; - path = fetchurl { - name = "callsite___callsite_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz"; - sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20"; - }; - } - - { - 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 = "cardinal___cardinal_0.4.4.tgz"; - path = fetchurl { - name = "cardinal___cardinal_0.4.4.tgz"; - url = "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz"; - sha1 = "ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2"; - }; - } - - { - 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 = "caseless___caseless_0.8.0.tgz"; - path = fetchurl { - name = "caseless___caseless_0.8.0.tgz"; - url = "https://registry.yarnpkg.com/caseless/-/caseless-0.8.0.tgz"; - sha1 = "5bca2881d41437f54b2407ebe34888c7b9ad4f7d"; - }; - } - - { - 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 = "chainsaw___chainsaw_0.1.0.tgz"; - path = fetchurl { - name = "chainsaw___chainsaw_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz"; - sha1 = "5eab50b28afe58074d0d58291388828b5e5fbc98"; - }; - } - - { - name = "chalk___chalk_3.0.0.tgz"; - path = fetchurl { - name = "chalk___chalk_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz"; - sha1 = "3f73c2bf526591f574cc492c51e2456349f844e4"; - }; - } - - { - name = "chalk___chalk_0.5.1.tgz"; - path = fetchurl { - name = "chalk___chalk_0.5.1.tgz"; - url = "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz"; - sha1 = "663b3a648b68b55d04690d49167aa837858f2174"; - }; - } - - { - 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_0.4.0.tgz"; - path = fetchurl { - name = "chalk___chalk_0.4.0.tgz"; - url = "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz"; - sha1 = "5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"; - }; - } - - { - name = "character_parser___character_parser_2.2.0.tgz"; - path = fetchurl { - name = "character_parser___character_parser_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz"; - sha1 = "c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"; - }; - } - - { - name = "chmodr___chmodr_0.1.2.tgz"; - path = fetchurl { - name = "chmodr___chmodr_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/chmodr/-/chmodr-0.1.2.tgz"; - sha1 = "0dd8041c915087575bec383b47827bb7576a4fd6"; - }; - } - - { - name = "chokidar___chokidar_1.7.0.tgz"; - path = fetchurl { - name = "chokidar___chokidar_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz"; - sha1 = "798e689778151c8076b4b360e5edd28cda2bb468"; - }; - } - - { - name = "chownr___chownr_1.1.4.tgz"; - path = fetchurl { - name = "chownr___chownr_1.1.4.tgz"; - url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"; - sha1 = "6fc9d7b42d32a583596337666e7d08084da2cc6b"; - }; - } - - { - 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_css___clean_css_2.2.23.tgz"; - path = fetchurl { - name = "clean_css___clean_css_2.2.23.tgz"; - url = "https://registry.yarnpkg.com/clean-css/-/clean-css-2.2.23.tgz"; - sha1 = "0590b5478b516c4903edc2d89bd3fdbdd286328c"; - }; - } - - { - name = "clean_css___clean_css_4.2.3.tgz"; - path = fetchurl { - name = "clean_css___clean_css_4.2.3.tgz"; - url = "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz"; - sha1 = "507b5de7d97b48ee53d84adb0160ff6216380f78"; - }; - } - - { - name = "cli_color___cli_color_0.2.3.tgz"; - path = fetchurl { - name = "cli_color___cli_color_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/cli-color/-/cli-color-0.2.3.tgz"; - sha1 = "0a25ceae5a6a1602be7f77d28563c36700274e88"; - }; - } - - { - name = "cli_color___cli_color_0.3.3.tgz"; - path = fetchurl { - name = "cli_color___cli_color_0.3.3.tgz"; - url = "https://registry.yarnpkg.com/cli-color/-/cli-color-0.3.3.tgz"; - sha1 = "12d5bdd158ff8a0b0db401198913c03df069f6f5"; - }; - } - - { - 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_buffer___clone_buffer_1.0.0.tgz"; - path = fetchurl { - name = "clone_buffer___clone_buffer_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz"; - sha1 = "e3e25b207ac4e701af721e2cb5a16792cac3dc58"; - }; - } - - { - name = "clone_stats___clone_stats_0.0.1.tgz"; - path = fetchurl { - name = "clone_stats___clone_stats_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz"; - sha1 = "b88f94a82cf38b8791d58046ea4029ad88ca99d1"; - }; - } - - { - name = "clone_stats___clone_stats_1.0.0.tgz"; - path = fetchurl { - name = "clone_stats___clone_stats_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz"; - sha1 = "b3782dff8bb5474e18b9b6bf0fdfe782f8777680"; - }; - } - - { - name = "clone___clone_0.2.0.tgz"; - path = fetchurl { - name = "clone___clone_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz"; - sha1 = "c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"; - }; - } - - { - 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 = "clone___clone_2.1.2.tgz"; - path = fetchurl { - name = "clone___clone_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz"; - sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f"; - }; - } - - { - name = "cloneable_readable___cloneable_readable_1.1.3.tgz"; - path = fetchurl { - name = "cloneable_readable___cloneable_readable_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz"; - sha1 = "120a00cb053bfb63a222e709f9683ea2e11d8cec"; - }; - } - - { - 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 = "coffee_script___coffee_script_1.12.7.tgz"; - path = fetchurl { - name = "coffee_script___coffee_script_1.12.7.tgz"; - url = "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz"; - sha1 = "c05dae0cb79591d05b3070a8433a98c9a89ccc53"; - }; - } - - { - name = "coffee_script___coffee_script_1.10.0.tgz"; - path = fetchurl { - name = "coffee_script___coffee_script_1.10.0.tgz"; - url = "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.10.0.tgz"; - sha1 = "12938bcf9be1948fa006f92e0c4c9e81705108c0"; - }; - } - - { - name = "coffeescript___coffeescript_1.12.7.tgz"; - path = fetchurl { - name = "coffeescript___coffeescript_1.12.7.tgz"; - url = "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.12.7.tgz"; - sha1 = "e57ee4c4867cf7f606bfc4a0f2d550c0981ddd27"; - }; - } - - { - 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_2.0.1.tgz"; - path = fetchurl { - name = "color_convert___color_convert_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"; - sha1 = "72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"; - }; - } - - { - name = "color_name___color_name_1.1.4.tgz"; - path = fetchurl { - name = "color_name___color_name_1.1.4.tgz"; - url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"; - sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2"; - }; - } - - { - name = "color_support___color_support_1.1.3.tgz"; - path = fetchurl { - name = "color_support___color_support_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz"; - sha1 = "93834379a1cc9a0c61f82f52f0d04322251bd5a2"; - }; - } - - { - name = "colors___colors_1.4.0.tgz"; - path = fetchurl { - name = "colors___colors_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz"; - sha1 = "c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"; - }; - } - - { - name = "combine_source_map___combine_source_map_0.3.0.tgz"; - path = fetchurl { - name = "combine_source_map___combine_source_map_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.3.0.tgz"; - sha1 = "d9e74f593d9cd43807312cb5d846d451efaa9eb7"; - }; - } - - { - name = "combined_stream___combined_stream_1.0.8.tgz"; - path = fetchurl { - name = "combined_stream___combined_stream_1.0.8.tgz"; - url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"; - sha1 = "c3d45a8b34fd730631a110a8a2520682b31d5a7f"; - }; - } - - { - name = "combined_stream___combined_stream_0.0.7.tgz"; - path = fetchurl { - name = "combined_stream___combined_stream_0.0.7.tgz"; - url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz"; - sha1 = "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f"; - }; - } - - { - name = "commander___commander_2.2.0.tgz"; - path = fetchurl { - name = "commander___commander_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/commander/-/commander-2.2.0.tgz"; - sha1 = "175ad4b9317f3ff615f201c1e57224f55a3e91df"; - }; - } - - { - name = "commander___commander_2.20.3.tgz"; - path = fetchurl { - name = "commander___commander_2.20.3.tgz"; - url = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"; - sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33"; - }; - } - - { - name = "commondir___commondir_0.0.1.tgz"; - path = fetchurl { - name = "commondir___commondir_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/commondir/-/commondir-0.0.1.tgz"; - sha1 = "89f00fdcd51b519c578733fec563e6a6da7f5be2"; - }; - } - - { - name = "component_bind___component_bind_1.0.0.tgz"; - path = fetchurl { - name = "component_bind___component_bind_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz"; - sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"; - }; - } - - { - name = "component_emitter___component_emitter_1.1.2.tgz"; - path = fetchurl { - name = "component_emitter___component_emitter_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz"; - sha1 = "296594f2753daa63996d2af08d15a95116c9aec3"; - }; - } - - { - 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 = "component_emitter___component_emitter_1.3.0.tgz"; - path = fetchurl { - name = "component_emitter___component_emitter_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"; - sha1 = "16e4070fba8ae29b679f2215853ee181ab2eabc0"; - }; - } - - { - name = "component_inherit___component_inherit_0.0.3.tgz"; - path = fetchurl { - name = "component_inherit___component_inherit_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz"; - sha1 = "645fc4adf58b72b649d5cae65135619db26ff143"; - }; - } - - { - 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 = "concat_stream___concat_stream_1.4.11.tgz"; - path = fetchurl { - name = "concat_stream___concat_stream_1.4.11.tgz"; - url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.11.tgz"; - sha1 = "1dc9f666f2621da9c618b1e7f8f3b2ff70b5f76f"; - }; - } - - { - name = "concat_with_sourcemaps___concat_with_sourcemaps_1.1.0.tgz"; - path = fetchurl { - name = "concat_with_sourcemaps___concat_with_sourcemaps_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz"; - sha1 = "d4ea93f05ae25790951b99e7b3b09e3908a4082e"; - }; - } - - { - name = "configstore___configstore_0.3.2.tgz"; - path = fetchurl { - name = "configstore___configstore_0.3.2.tgz"; - url = "https://registry.yarnpkg.com/configstore/-/configstore-0.3.2.tgz"; - sha1 = "25e4c16c3768abf75c5a65bc61761f495055b459"; - }; - } - - { - name = "configstore___configstore_0.2.3.tgz"; - path = fetchurl { - name = "configstore___configstore_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/configstore/-/configstore-0.2.3.tgz"; - sha1 = "b1bdc4ad823a25423dc15d220fcc1ae1d7efab02"; - }; - } - - { - name = "connect___connect_3.7.0.tgz"; - path = fetchurl { - name = "connect___connect_3.7.0.tgz"; - url = "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz"; - sha1 = "5d49348910caa5e07a01800b030d0c35f20484f8"; - }; - } - - { - name = "console_browserify___console_browserify_1.0.3.tgz"; - path = fetchurl { - name = "console_browserify___console_browserify_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.0.3.tgz"; - sha1 = "d3898d2c3a93102f364197f8874b4f92b5286a8e"; - }; - } - - { - 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 = "constantinople___constantinople_3.1.2.tgz"; - path = fetchurl { - name = "constantinople___constantinople_3.1.2.tgz"; - url = "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz"; - sha1 = "d45ed724f57d3d10500017a7d3a889c1381ae647"; - }; - } - - { - name = "constants_browserify___constants_browserify_0.0.1.tgz"; - path = fetchurl { - name = "constants_browserify___constants_browserify_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz"; - sha1 = "92577db527ba6c4cf0a4568d84bc031f441e21f2"; - }; - } - - { - 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.4.1.tgz"; - path = fetchurl { - name = "convert_source_map___convert_source_map_0.4.1.tgz"; - url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.4.1.tgz"; - sha1 = "f919a0099fe31f80fc5a1d0eb303161b394070c7"; - }; - } - - { - name = "convert_source_map___convert_source_map_1.7.0.tgz"; - path = fetchurl { - name = "convert_source_map___convert_source_map_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"; - sha1 = "17a2cb882d7f77d3490585e2ce6c524424a3a442"; - }; - } - - { - 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.1.3.tgz"; - path = fetchurl { - name = "convert_source_map___convert_source_map_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz"; - sha1 = "4829c877e9fe49b3161f3bf3673888e204699860"; - }; - } - - { - name = "cookie_jar___cookie_jar_0.3.0.tgz"; - path = fetchurl { - name = "cookie_jar___cookie_jar_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/cookie-jar/-/cookie-jar-0.3.0.tgz"; - sha1 = "bc9a27d4e2b97e186cd57c9e2063cb99fa68cccc"; - }; - } - - { - 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.6.11.tgz"; - path = fetchurl { - name = "core_js___core_js_2.6.11.tgz"; - url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz"; - sha1 = "38831469f9922bded8ee21c9dc46985e0399308c"; - }; - } - - { - 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 = "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 = "cryptiles___cryptiles_0.2.2.tgz"; - path = fetchurl { - name = "cryptiles___cryptiles_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz"; - sha1 = "ed91ff1f17ad13d3748288594f8a48a0d26f325c"; - }; - } - - { - name = "crypto_browserify___crypto_browserify_1.0.9.tgz"; - path = fetchurl { - name = "crypto_browserify___crypto_browserify_1.0.9.tgz"; - url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz"; - sha1 = "cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0"; - }; - } - - { - name = "ctype___ctype_0.5.3.tgz"; - path = fetchurl { - name = "ctype___ctype_0.5.3.tgz"; - url = "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz"; - sha1 = "82c18c2461f74114ef16c135224ad0b9144ca12f"; - }; - } - - { - 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 = "custom_event___custom_event_1.0.1.tgz"; - path = fetchurl { - name = "custom_event___custom_event_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz"; - sha1 = "5d02a46850adf1b4a317946a3928fccb5bfd0425"; - }; - } - - { - name = "d___d_1.0.1.tgz"; - path = fetchurl { - name = "d___d_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz"; - sha1 = "8698095372d58dbee346ffd0c7093f99f8f9eb5a"; - }; - } - - { - name = "d___d_0.1.1.tgz"; - path = fetchurl { - name = "d___d_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz"; - sha1 = "da184c535d18d8ee7ba2aa229b914009fae11309"; - }; - } - - { - 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 = "dateformat___dateformat_1.0.12.tgz"; - path = fetchurl { - name = "dateformat___dateformat_1.0.12.tgz"; - url = "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz"; - sha1 = "9f124b67594c937ff706932e4a642cca8dbbfee9"; - }; - } - - { - name = "dateformat___dateformat_2.2.0.tgz"; - path = fetchurl { - name = "dateformat___dateformat_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz"; - sha1 = "4065e2013cf9fb916ddfd82efb506ad4c6769062"; - }; - } - - { - name = "deap___deap_1.0.1.tgz"; - path = fetchurl { - name = "deap___deap_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/deap/-/deap-1.0.1.tgz"; - sha1 = "0646e9e1a095ffe8a9e404d68d1f76dcf57e66fb"; - }; - } - - { - name = "debug___debug_2.2.0.tgz"; - path = fetchurl { - name = "debug___debug_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz"; - sha1 = "f87057e995b1a1f6ae6a4960664137bc56f039da"; - }; - } - - { - name = "debug___debug_2.3.3.tgz"; - path = fetchurl { - name = "debug___debug_2.3.3.tgz"; - url = "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz"; - sha1 = "40c453e67e6e13c901ddec317af8986cda9eff8c"; - }; - } - - { - 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.2.6.tgz"; - path = fetchurl { - name = "debug___debug_3.2.6.tgz"; - url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; - sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; - }; - } - - { - 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 = "decompress_zip___decompress_zip_0.0.8.tgz"; - path = fetchurl { - name = "decompress_zip___decompress_zip_0.0.8.tgz"; - url = "https://registry.yarnpkg.com/decompress-zip/-/decompress-zip-0.0.8.tgz"; - sha1 = "4a265b22c7b209d7b24fa66f2b2dfbced59044f3"; - }; - } - - { - name = "deep_equal___deep_equal_0.1.2.tgz"; - path = fetchurl { - name = "deep_equal___deep_equal_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.1.2.tgz"; - sha1 = "b246c2b80a570a47c11be1d9bd1070ec878b87ce"; - }; - } - - { - 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 = "deep_extend___deep_extend_0.2.11.tgz"; - path = fetchurl { - name = "deep_extend___deep_extend_0.2.11.tgz"; - url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.2.11.tgz"; - sha1 = "7a16ba69729132340506170494bc83f7076fe08f"; - }; - } - - { - name = "deep_is___deep_is_0.1.3.tgz"; - path = fetchurl { - name = "deep_is___deep_is_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; - sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; - }; - } - - { - name = "defaults___defaults_1.0.3.tgz"; - path = fetchurl { - name = "defaults___defaults_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz"; - sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; - }; - } - - { - 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_0.0.0.tgz"; - path = fetchurl { - name = "defined___defined_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/defined/-/defined-0.0.0.tgz"; - sha1 = "f35eea7d705e933baf13b2f03b3f83d921403b3e"; - }; - } - - { - name = "delayed_stream___delayed_stream_0.0.5.tgz"; - path = fetchurl { - name = "delayed_stream___delayed_stream_0.0.5.tgz"; - url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz"; - sha1 = "d4b1f43a93e8296dfe02694f4680bc37a313c73f"; - }; - } - - { - 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.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 = "deprecated___deprecated_0.0.1.tgz"; - path = fetchurl { - name = "deprecated___deprecated_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz"; - sha1 = "f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"; - }; - } - - { - name = "deps_sort___deps_sort_0.1.2.tgz"; - path = fetchurl { - name = "deps_sort___deps_sort_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/deps-sort/-/deps-sort-0.1.2.tgz"; - sha1 = "daa2fb614a17c9637d801e2f55339ae370f3611a"; - }; - } - - { - name = "derequire___derequire_0.8.0.tgz"; - path = fetchurl { - name = "derequire___derequire_0.8.0.tgz"; - url = "https://registry.yarnpkg.com/derequire/-/derequire-0.8.0.tgz"; - sha1 = "c1f7f1da2cede44adede047378f03f444e9c4c0d"; - }; - } - - { - 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_file___detect_file_1.0.0.tgz"; - path = fetchurl { - name = "detect_file___detect_file_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz"; - sha1 = "f0d66d03672a825cb1b73bdb3fe62310c8e552b7"; - }; - } - - { - 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 = "detective___detective_3.1.0.tgz"; - path = fetchurl { - name = "detective___detective_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/detective/-/detective-3.1.0.tgz"; - sha1 = "77782444ab752b88ca1be2e9d0a0395f1da25eed"; - }; - } - - { - name = "di___di_0.0.1.tgz"; - path = fetchurl { - name = "di___di_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz"; - sha1 = "806649326ceaa7caa3306d75d985ea2748ba913c"; - }; - } - - { - name = "doctypes___doctypes_1.1.0.tgz"; - path = fetchurl { - name = "doctypes___doctypes_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz"; - sha1 = "ea80b106a87538774e8a3a4a5afe293de489e0a9"; - }; - } - - { - name = "dom_serialize___dom_serialize_2.2.1.tgz"; - path = fetchurl { - name = "dom_serialize___dom_serialize_2.2.1.tgz"; - url = "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz"; - sha1 = "562ae8999f44be5ea3076f5419dcd59eb43ac95b"; - }; - } - - { - name = "domain_browser___domain_browser_1.1.7.tgz"; - path = fetchurl { - name = "domain_browser___domain_browser_1.1.7.tgz"; - url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz"; - sha1 = "867aa4b093faa05f1de08c06f4d7b21fdf8698bc"; - }; - } - - { - name = "duplexer2___duplexer2_0.0.2.tgz"; - path = fetchurl { - name = "duplexer2___duplexer2_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz"; - sha1 = "c614dcf67e2fb14995a91711e5a617e8a60a31db"; - }; - } - - { - name = "duplexer___duplexer_0.1.1.tgz"; - path = fetchurl { - name = "duplexer___duplexer_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz"; - sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1"; - }; - } - - { - name = "duplexify___duplexify_3.7.1.tgz"; - path = fetchurl { - name = "duplexify___duplexify_3.7.1.tgz"; - url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"; - sha1 = "2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"; - }; - } - - { - name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; - path = fetchurl { - name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; - sha1 = "3a83a904e54353287874c564b7549386849a98c9"; - }; - } - - { - 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 = "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 = "end_of_stream___end_of_stream_1.4.4.tgz"; - path = fetchurl { - name = "end_of_stream___end_of_stream_1.4.4.tgz"; - url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"; - sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"; - }; - } - - { - name = "end_of_stream___end_of_stream_0.1.5.tgz"; - path = fetchurl { - name = "end_of_stream___end_of_stream_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz"; - sha1 = "8e177206c3c80837d85632e8b9359dfe8b2f6eaf"; - }; - } - - { - name = "engine.io_client___engine.io_client_1.8.5.tgz"; - path = fetchurl { - name = "engine.io_client___engine.io_client_1.8.5.tgz"; - url = "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.5.tgz"; - sha1 = "fe7fb60cb0dcf2fa2859489329cb5968dedeb11f"; - }; - } - - { - name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; - path = fetchurl { - name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz"; - sha1 = "937b079f0007d0893ec56d46cb220b8cb435220a"; - }; - } - - { - name = "engine.io___engine.io_1.8.5.tgz"; - path = fetchurl { - name = "engine.io___engine.io_1.8.5.tgz"; - url = "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.5.tgz"; - sha1 = "4ebe5e75c6dc123dee4afdce6e5fdced21eb93f6"; - }; - } - - { - name = "ent___ent_2.2.0.tgz"; - path = fetchurl { - name = "ent___ent_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz"; - sha1 = "e964219325a21d05f44466a2f686ed6ce5f5dd1d"; - }; - } - - { - 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 = "es5_ext___es5_ext_0.10.53.tgz"; - path = fetchurl { - name = "es5_ext___es5_ext_0.10.53.tgz"; - url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz"; - sha1 = "93c5a3acfdbef275220ad72644ad02ee18368de1"; - }; - } - - { - name = "es5_ext___es5_ext_0.9.2.tgz"; - path = fetchurl { - name = "es5_ext___es5_ext_0.9.2.tgz"; - url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.9.2.tgz"; - sha1 = "d2e309d1f223b0718648835acf5b8823a8061f8a"; - }; - } - - { - name = "es6_iterator___es6_iterator_0.1.3.tgz"; - path = fetchurl { - name = "es6_iterator___es6_iterator_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-0.1.3.tgz"; - sha1 = "d6f58b8c4fc413c249b4baa19768f8e4d7c8944e"; - }; - } - - { - 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_symbol___es6_symbol_3.1.3.tgz"; - path = fetchurl { - name = "es6_symbol___es6_symbol_3.1.3.tgz"; - url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz"; - sha1 = "bad5d3c1bcdac28269f4cb331e431c78ac705d18"; - }; - } - - { - name = "es6_symbol___es6_symbol_2.0.1.tgz"; - path = fetchurl { - name = "es6_symbol___es6_symbol_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-2.0.1.tgz"; - sha1 = "761b5c67cfd4f1d18afb234f691d678682cb3bf3"; - }; - } - - { - name = "es6_weak_map___es6_weak_map_0.1.4.tgz"; - path = fetchurl { - name = "es6_weak_map___es6_weak_map_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-0.1.4.tgz"; - sha1 = "706cef9e99aa236ba7766c239c8b9e286ea7d228"; - }; - } - - { - 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 = "escodegen___escodegen_1.8.1.tgz"; - path = fetchurl { - name = "escodegen___escodegen_1.8.1.tgz"; - url = "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz"; - sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018"; - }; - } - - { - name = "escodegen___escodegen_1.1.0.tgz"; - path = fetchurl { - name = "escodegen___escodegen_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/escodegen/-/escodegen-1.1.0.tgz"; - sha1 = "c663923f6e20aad48d0c0fa49f31c6d4f49360cf"; - }; - } - - { - name = "escope___escope_0.0.16.tgz"; - path = fetchurl { - name = "escope___escope_0.0.16.tgz"; - url = "https://registry.yarnpkg.com/escope/-/escope-0.0.16.tgz"; - sha1 = "418c7a0afca721dafe659193fd986283e746538f"; - }; - } - - { - name = "esprima_fb___esprima_fb_3001.0001.0000_dev_harmony_fb.tgz"; - path = fetchurl { - name = "esprima_fb___esprima_fb_3001.0001.0000_dev_harmony_fb.tgz"; - url = "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"; - sha1 = "b77d37abcd38ea0b77426bb8bc2922ce6b426411"; - }; - } - - { - 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 = "esprima___esprima_4.0.1.tgz"; - path = fetchurl { - name = "esprima___esprima_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; - sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; - }; - } - - { - name = "esprima___esprima_1.0.4.tgz"; - path = fetchurl { - name = "esprima___esprima_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz"; - sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad"; - }; - } - - { - name = "esrefactor___esrefactor_0.1.0.tgz"; - path = fetchurl { - name = "esrefactor___esrefactor_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/esrefactor/-/esrefactor-0.1.0.tgz"; - sha1 = "d142795a282339ab81e936b5b7a21b11bf197b13"; - }; - } - - { - name = "estraverse___estraverse_5.0.0.tgz"; - path = fetchurl { - name = "estraverse___estraverse_5.0.0.tgz"; - url = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz"; - sha1 = "ac81750b482c11cca26e4b07e83ed8f75fbcdc22"; - }; - } - - { - name = "estraverse___estraverse_1.9.3.tgz"; - path = fetchurl { - name = "estraverse___estraverse_1.9.3.tgz"; - url = "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz"; - sha1 = "af67f2dc922582415950926091a4005d29c9bb44"; - }; - } - - { - name = "estraverse___estraverse_0.0.4.tgz"; - path = fetchurl { - name = "estraverse___estraverse_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/estraverse/-/estraverse-0.0.4.tgz"; - sha1 = "01a0932dfee574684a598af5a67c3bf9b6428db2"; - }; - } - - { - name = "estraverse___estraverse_1.5.1.tgz"; - path = fetchurl { - name = "estraverse___estraverse_1.5.1.tgz"; - url = "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz"; - sha1 = "867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71"; - }; - } - - { - name = "esutils___esutils_2.0.3.tgz"; - path = fetchurl { - name = "esutils___esutils_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"; - sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64"; - }; - } - - { - name = "esutils___esutils_1.0.0.tgz"; - path = fetchurl { - name = "esutils___esutils_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz"; - sha1 = "8151d358e20c8acc7fb745e7472c0025fe496570"; - }; - } - - { - name = "etag___etag_1.7.0.tgz"; - path = fetchurl { - name = "etag___etag_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz"; - sha1 = "03d30b5f67dd6e632d2945d30d6652731a34d5d8"; - }; - } - - { - name = "event_emitter___event_emitter_0.2.2.tgz"; - path = fetchurl { - name = "event_emitter___event_emitter_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.2.2.tgz"; - sha1 = "c81e3724eb55407c5a0d5ee3299411f700f54291"; - }; - } - - { - 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 = "event_stream___event_stream_4.0.1.tgz"; - path = fetchurl { - name = "event_stream___event_stream_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/event-stream/-/event-stream-4.0.1.tgz"; - sha1 = "4092808ec995d0dd75ea4580c1df6a74db2cde65"; - }; - } - - { - name = "event_stream___event_stream_3.3.2.tgz"; - path = fetchurl { - name = "event_stream___event_stream_3.3.2.tgz"; - url = "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.2.tgz"; - sha1 = "3cc310feb1f28d2f62b2a085d736a9ef566378b8"; - }; - } - - { - name = "event_stream___event_stream_3.3.5.tgz"; - path = fetchurl { - name = "event_stream___event_stream_3.3.5.tgz"; - url = "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.5.tgz"; - sha1 = "e5dd8989543630d94c6cf4d657120341fa31636b"; - }; - } - - { - name = "eventemitter3___eventemitter3_4.0.0.tgz"; - path = fetchurl { - name = "eventemitter3___eventemitter3_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz"; - sha1 = "d65176163887ee59f386d64c82610b696a4a74eb"; - }; - } - - { - name = "events___events_1.0.2.tgz"; - path = fetchurl { - name = "events___events_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/events/-/events-1.0.2.tgz"; - sha1 = "75849dcfe93d10fb057c30055afdbd51d06a8e24"; - }; - } - - { - name = "expand_braces___expand_braces_0.1.2.tgz"; - path = fetchurl { - name = "expand_braces___expand_braces_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz"; - sha1 = "488b1d1d2451cb3d3a6b192cfc030f44c5855fea"; - }; - } - - { - 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_0.1.1.tgz"; - path = fetchurl { - name = "expand_range___expand_range_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz"; - sha1 = "4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"; - }; - } - - { - 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 = "expand_tilde___expand_tilde_2.0.2.tgz"; - path = fetchurl { - name = "expand_tilde___expand_tilde_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz"; - sha1 = "97e801aa052df02454de46b02bf621642cdc8502"; - }; - } - - { - name = "ext___ext_1.4.0.tgz"; - path = fetchurl { - name = "ext___ext_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz"; - sha1 = "89ae7a07158f79d35517882904324077e4379244"; - }; - } - - { - 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 = "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 = "fancy_log___fancy_log_1.3.3.tgz"; - path = fetchurl { - name = "fancy_log___fancy_log_1.3.3.tgz"; - url = "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz"; - sha1 = "dbc19154f558690150a23953a0adbd035be45fc7"; - }; - } - - { - name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; - path = fetchurl { - name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; - sha1 = "545145077c501491e33b15ec408c294376e94ae4"; - }; - } - - { - name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; - path = fetchurl { - name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; - sha1 = "874bf69c6f404c2b5d99c481341399fd55892633"; - }; - } - - { - 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 = "faye_websocket___faye_websocket_0.7.3.tgz"; - path = fetchurl { - name = "faye_websocket___faye_websocket_0.7.3.tgz"; - url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz"; - sha1 = "cc4074c7f4a4dfd03af54dd65c354b135132ce11"; - }; - } - - { - name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; - path = fetchurl { - name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; - sha1 = "553a7b8446ff6f684359c445f1e37a05dacc33dd"; - }; - } - - { - 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.2.tgz"; - path = fetchurl { - name = "finalhandler___finalhandler_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz"; - sha1 = "b7e7d000ffd11938d0fdb053506f6ebabe9f587d"; - }; - } - - { - name = "find_index___find_index_0.1.1.tgz"; - path = fetchurl { - name = "find_index___find_index_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz"; - sha1 = "675d358b2ca3892d795a1ab47232f8b6e2e0dde4"; - }; - } - - { - 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 = "findup_sync___findup_sync_2.0.0.tgz"; - path = fetchurl { - name = "findup_sync___findup_sync_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz"; - sha1 = "9326b1488c22d1a6088650a86901b2d9a90a2cbc"; - }; - } - - { - name = "fined___fined_1.2.0.tgz"; - path = fetchurl { - name = "fined___fined_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz"; - sha1 = "d00beccf1aa2b475d16d423b0238b713a2c4a37b"; - }; - } - - { - name = "first_chunk_stream___first_chunk_stream_1.0.0.tgz"; - path = fetchurl { - name = "first_chunk_stream___first_chunk_stream_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz"; - sha1 = "59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"; - }; - } - - { - name = "fixtures2js___fixtures2js_0.0.0.tgz"; - path = fetchurl { - name = "fixtures2js___fixtures2js_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/fixtures2js/-/fixtures2js-0.0.0.tgz"; - sha1 = "602f7964c5b2963fe73224c8e4a3607d75c1b34f"; - }; - } - - { - name = "flagged_respawn___flagged_respawn_1.0.1.tgz"; - path = fetchurl { - name = "flagged_respawn___flagged_respawn_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz"; - sha1 = "e7de6f1279ddd9ca9aac8a5971d618606b3aab41"; - }; - } - - { - name = "follow_redirects___follow_redirects_1.11.0.tgz"; - path = fetchurl { - name = "follow_redirects___follow_redirects_1.11.0.tgz"; - url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz"; - sha1 = "afa14f08ba12a52963140fe43212658897bc0ecb"; - }; - } - - { - 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 = "forever_agent___forever_agent_0.5.2.tgz"; - path = fetchurl { - name = "forever_agent___forever_agent_0.5.2.tgz"; - url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz"; - sha1 = "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130"; - }; - } - - { - 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 = "fork_stream___fork_stream_0.0.4.tgz"; - path = fetchurl { - name = "fork_stream___fork_stream_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz"; - sha1 = "db849fce77f6708a5f8f386ae533a0907b54ae70"; - }; - } - - { - name = "form_data___form_data_0.1.4.tgz"; - path = fetchurl { - name = "form_data___form_data_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz"; - sha1 = "91abd788aba9702b1aabfa8bc01031a2ac9e3b12"; - }; - } - - { - name = "form_data___form_data_0.2.0.tgz"; - path = fetchurl { - name = "form_data___form_data_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz"; - sha1 = "26f8bc26da6440e299cbdcfb69035c4f77a6e466"; - }; - } - - { - name = "form_data___form_data_2.3.3.tgz"; - path = fetchurl { - name = "form_data___form_data_2.3.3.tgz"; - url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; - sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; - }; - } - - { - 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.3.0.tgz"; - path = fetchurl { - name = "fresh___fresh_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz"; - sha1 = "651f838e22424e7566de161d8358caa199f83d4f"; - }; - } - - { - name = "from___from_0.1.7.tgz"; - path = fetchurl { - name = "from___from_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz"; - sha1 = "83c60afc58b9c56997007ed1a768b3ab303a44fe"; - }; - } - - { - name = "fs_access___fs_access_1.0.1.tgz"; - path = fetchurl { - name = "fs_access___fs_access_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz"; - sha1 = "d6a87f262271cefebec30c553407fb995da8777a"; - }; - } - - { - name = "fs_minipass___fs_minipass_1.2.7.tgz"; - path = fetchurl { - name = "fs_minipass___fs_minipass_1.2.7.tgz"; - url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz"; - sha1 = "ccff8570841e7fe4265693da88936c55aed7f7c7"; - }; - } - - { - 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.12.tgz"; - path = fetchurl { - name = "fsevents___fsevents_1.2.12.tgz"; - url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz"; - sha1 = "db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c"; - }; - } - - { - name = "fstream_ignore___fstream_ignore_0.0.10.tgz"; - path = fetchurl { - name = "fstream_ignore___fstream_ignore_0.0.10.tgz"; - url = "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-0.0.10.tgz"; - sha1 = "b10f8f522cc55415f80b41f7d3a32e6cba254e8c"; - }; - } - - { - name = "fstream___fstream_1.0.12.tgz"; - path = fetchurl { - name = "fstream___fstream_1.0.12.tgz"; - url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz"; - sha1 = "4e8ba8ee2d48be4f7d0de505455548eae5932045"; - }; - } - - { - name = "fstream___fstream_0.1.31.tgz"; - path = fetchurl { - name = "fstream___fstream_0.1.31.tgz"; - url = "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz"; - sha1 = "7337f058fbbbbefa8c9f561a28cab0849202c988"; - }; - } - - { - 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_0.5.2.tgz"; - path = fetchurl { - name = "gaze___gaze_0.5.2.tgz"; - url = "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz"; - sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f"; - }; - } - - { - 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_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_stream___glob_stream_3.1.18.tgz"; - path = fetchurl { - name = "glob_stream___glob_stream_3.1.18.tgz"; - url = "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz"; - sha1 = "9170a5f12b790306fdfe598f313f8f7954fd143b"; - }; - } - - { - name = "glob_watcher___glob_watcher_0.0.6.tgz"; - path = fetchurl { - name = "glob_watcher___glob_watcher_0.0.6.tgz"; - url = "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz"; - sha1 = "b95b4a8df74b39c83298b0c05c978b4d9a3b710b"; - }; - } - - { - name = "glob2base___glob2base_0.0.12.tgz"; - path = fetchurl { - name = "glob2base___glob2base_0.0.12.tgz"; - url = "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz"; - sha1 = "9d419b3e28f12e83a362164a277055922c9c0d56"; - }; - } - - { - name = "glob___glob_4.5.3.tgz"; - path = fetchurl { - name = "glob___glob_4.5.3.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz"; - sha1 = "c6cb73d3226c1efef04de3c56d012f03377ee15f"; - }; - } - - { - name = "glob___glob_5.0.15.tgz"; - path = fetchurl { - name = "glob___glob_5.0.15.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz"; - sha1 = "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"; - }; - } - - { - 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.6.tgz"; - path = fetchurl { - name = "glob___glob_7.1.6.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz"; - sha1 = "141f33b81a7c2492e125594307480c46679278a6"; - }; - } - - { - name = "glob___glob_3.1.21.tgz"; - path = fetchurl { - name = "glob___glob_3.1.21.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz"; - sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd"; - }; - } - - { - name = "glob___glob_3.2.11.tgz"; - path = fetchurl { - name = "glob___glob_3.2.11.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz"; - sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d"; - }; - } - - { - name = "glob___glob_4.0.6.tgz"; - path = fetchurl { - name = "glob___glob_4.0.6.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz"; - sha1 = "695c50bdd4e2fb5c5d370b091f388d3707e291a7"; - }; - } - - { - name = "global_modules___global_modules_1.0.0.tgz"; - path = fetchurl { - name = "global_modules___global_modules_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz"; - sha1 = "6d770f0eb523ac78164d72b5e71a8877265cc3ea"; - }; - } - - { - name = "global_prefix___global_prefix_1.0.2.tgz"; - path = fetchurl { - name = "global_prefix___global_prefix_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz"; - sha1 = "dbf743c6c14992593c655568cb66ed32c0122ebe"; - }; - } - - { - name = "globule___globule_1.3.1.tgz"; - path = fetchurl { - name = "globule___globule_1.3.1.tgz"; - url = "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz"; - sha1 = "90a25338f22b7fbeb527cee63c629aea754d33b9"; - }; - } - - { - name = "globule___globule_0.1.0.tgz"; - path = fetchurl { - name = "globule___globule_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz"; - sha1 = "d9c8edde1da79d125a151b79533b978676346ae5"; - }; - } - - { - name = "glogg___glogg_1.0.2.tgz"; - path = fetchurl { - name = "glogg___glogg_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz"; - sha1 = "2d7dd702beda22eb3bffadf880696da6d846313f"; - }; - } - - { - name = "got___got_3.3.1.tgz"; - path = fetchurl { - name = "got___got_3.3.1.tgz"; - url = "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz"; - sha1 = "e5d0ed4af55fc3eef4d56007769d98192bcb2eca"; - }; - } - - { - name = "graceful_fs___graceful_fs_3.0.12.tgz"; - path = fetchurl { - name = "graceful_fs___graceful_fs_3.0.12.tgz"; - url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.12.tgz"; - sha1 = "0034947ce9ed695ec8ab0b854bc919e82b1ffaef"; - }; - } - - { - name = "graceful_fs___graceful_fs_4.2.3.tgz"; - path = fetchurl { - name = "graceful_fs___graceful_fs_4.2.3.tgz"; - url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz"; - sha1 = "4a12ff1b60376ef09862c2093edd908328be8423"; - }; - } - - { - name = "graceful_fs___graceful_fs_1.2.3.tgz"; - path = fetchurl { - name = "graceful_fs___graceful_fs_1.2.3.tgz"; - url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz"; - sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364"; - }; - } - - { - name = "graceful_fs___graceful_fs_2.0.3.tgz"; - path = fetchurl { - name = "graceful_fs___graceful_fs_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz"; - sha1 = "7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0"; - }; - } - - { - name = "guanlecoja___guanlecoja_0.9.2.tgz"; - path = fetchurl { - name = "guanlecoja___guanlecoja_0.9.2.tgz"; - url = "https://registry.yarnpkg.com/guanlecoja/-/guanlecoja-0.9.2.tgz"; - sha1 = "03febe92d9e7575a633b4d5ad8d19f5ee1cdf326"; - }; - } - - { - name = "gulp_angular_templatecache___gulp_angular_templatecache_1.9.1.tgz"; - path = fetchurl { - name = "gulp_angular_templatecache___gulp_angular_templatecache_1.9.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-angular-templatecache/-/gulp-angular-templatecache-1.9.1.tgz"; - sha1 = "60f631e97aaaa765d942e37042e4bfbb1a5df244"; - }; - } - - { - name = "gulp_bower_deps___gulp_bower_deps_0.3.3.tgz"; - path = fetchurl { - name = "gulp_bower_deps___gulp_bower_deps_0.3.3.tgz"; - url = "https://registry.yarnpkg.com/gulp-bower-deps/-/gulp-bower-deps-0.3.3.tgz"; - sha1 = "2109fe3fbee35069f67312bb977e591d890296cd"; - }; - } - - { - name = "gulp_browserify___gulp_browserify_0.5.1.tgz"; - path = fetchurl { - name = "gulp_browserify___gulp_browserify_0.5.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-browserify/-/gulp-browserify-0.5.1.tgz"; - sha1 = "820108ac2554a954adb8be17d23958b0c04be083"; - }; - } - - { - name = "gulp_cached___gulp_cached_1.1.1.tgz"; - path = fetchurl { - name = "gulp_cached___gulp_cached_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-cached/-/gulp-cached-1.1.1.tgz"; - sha1 = "fe7cd4f87f37601e6073cfedee5c2bdaf8b6acce"; - }; - } - - { - name = "gulp_clean_css___gulp_clean_css_2.4.0.tgz"; - path = fetchurl { - name = "gulp_clean_css___gulp_clean_css_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-2.4.0.tgz"; - sha1 = "2ae48109fe83ccc967ff5ad53c044949a4863b36"; - }; - } - - { - name = "gulp_coffee___gulp_coffee_2.3.5.tgz"; - path = fetchurl { - name = "gulp_coffee___gulp_coffee_2.3.5.tgz"; - url = "https://registry.yarnpkg.com/gulp-coffee/-/gulp-coffee-2.3.5.tgz"; - sha1 = "8c64e9ac884e1bab4e20b66ac7c386a816859041"; - }; - } - - { - name = "gulp_concat___gulp_concat_2.6.0.tgz"; - path = fetchurl { - name = "gulp_concat___gulp_concat_2.6.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.0.tgz"; - sha1 = "585cfb115411f348773131140566b6a81c69cb91"; - }; - } - - { - name = "gulp_concat___gulp_concat_2.6.1.tgz"; - path = fetchurl { - name = "gulp_concat___gulp_concat_2.6.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz"; - sha1 = "633d16c95d88504628ad02665663cee5a4793353"; - }; - } - - { - name = "gulp_fixtures2js___gulp_fixtures2js_0.0.1.tgz"; - path = fetchurl { - name = "gulp_fixtures2js___gulp_fixtures2js_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-fixtures2js/-/gulp-fixtures2js-0.0.1.tgz"; - sha1 = "4a3cbb4404bdfab92f7d2b6e09de2bfd0ae78506"; - }; - } - - { - name = "gulp_footer___gulp_footer_1.0.5.tgz"; - path = fetchurl { - name = "gulp_footer___gulp_footer_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/gulp-footer/-/gulp-footer-1.0.5.tgz"; - sha1 = "e84ca777e266be7bbc2d45d2df0e7eba8dfa3e54"; - }; - } - - { - name = "gulp_footer___gulp_footer_1.1.2.tgz"; - path = fetchurl { - name = "gulp_footer___gulp_footer_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/gulp-footer/-/gulp-footer-1.1.2.tgz"; - sha1 = "7fe28324ec67e3d618d31e0f5ea2ee5b454f6877"; - }; - } - - { - name = "gulp_header___gulp_header_1.8.2.tgz"; - path = fetchurl { - name = "gulp_header___gulp_header_1.8.2.tgz"; - url = "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.2.tgz"; - sha1 = "3ab222f53719d2d03d81d9134252fe7d52425aa4"; - }; - } - - { - name = "gulp_header___gulp_header_1.8.12.tgz"; - path = fetchurl { - name = "gulp_header___gulp_header_1.8.12.tgz"; - url = "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.12.tgz"; - sha1 = "ad306be0066599127281c4f8786660e705080a84"; - }; - } - - { - name = "gulp_help___gulp_help_1.6.1.tgz"; - path = fetchurl { - name = "gulp_help___gulp_help_1.6.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-help/-/gulp-help-1.6.1.tgz"; - sha1 = "261db186e18397fef3f6a2c22e9c315bfa88ae0c"; - }; - } - - { - name = "gulp_if___gulp_if_2.0.2.tgz"; - path = fetchurl { - name = "gulp_if___gulp_if_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/gulp-if/-/gulp-if-2.0.2.tgz"; - sha1 = "a497b7e7573005041caa2bc8b7dda3c80444d629"; - }; - } - - { - name = "gulp_less___gulp_less_1.3.9.tgz"; - path = fetchurl { - name = "gulp_less___gulp_less_1.3.9.tgz"; - url = "https://registry.yarnpkg.com/gulp-less/-/gulp-less-1.3.9.tgz"; - sha1 = "e129750f236693ead5b522af311cc33eeff1910e"; - }; - } - - { - name = "gulp_livereload___gulp_livereload_3.8.1.tgz"; - path = fetchurl { - name = "gulp_livereload___gulp_livereload_3.8.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-3.8.1.tgz"; - sha1 = "00f744b2d749d3e9e3746589c8a44acac779b50f"; - }; - } - - { - name = "gulp_match___gulp_match_1.1.0.tgz"; - path = fetchurl { - name = "gulp_match___gulp_match_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.1.0.tgz"; - sha1 = "552b7080fc006ee752c90563f9fec9d61aafdf4f"; - }; - } - - { - name = "gulp_ng_annotate___gulp_ng_annotate_1.1.0.tgz"; - path = fetchurl { - name = "gulp_ng_annotate___gulp_ng_annotate_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-ng-annotate/-/gulp-ng-annotate-1.1.0.tgz"; - sha1 = "5e801be073d8f6d343c4ff65b71717b90fac13ce"; - }; - } - - { - name = "gulp_ng_classify___gulp_ng_classify_4.0.1.tgz"; - path = fetchurl { - name = "gulp_ng_classify___gulp_ng_classify_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-ng-classify/-/gulp-ng-classify-4.0.1.tgz"; - sha1 = "3019161127c35c317ea08dc2a65ea35b592dbfd7"; - }; - } - - { - name = "gulp_pug___gulp_pug_3.3.0.tgz"; - path = fetchurl { - name = "gulp_pug___gulp_pug_3.3.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-pug/-/gulp-pug-3.3.0.tgz"; - sha1 = "46982c1439c094c360542ed8ba5c882d3bb711cf"; - }; - } - - { - name = "gulp_remember___gulp_remember_0.3.1.tgz"; - path = fetchurl { - name = "gulp_remember___gulp_remember_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-remember/-/gulp-remember-0.3.1.tgz"; - sha1 = "5776b6f64c5a1c5c4d4555406723ec8e2b0407e7"; - }; - } - - { - name = "gulp_rename___gulp_rename_1.2.3.tgz"; - path = fetchurl { - name = "gulp_rename___gulp_rename_1.2.3.tgz"; - url = "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.3.tgz"; - sha1 = "37b75298e9d3e6c0fe9ac4eac13ce3be5434646b"; - }; - } - - { - name = "gulp_replace___gulp_replace_0.5.4.tgz"; - path = fetchurl { - name = "gulp_replace___gulp_replace_0.5.4.tgz"; - url = "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-0.5.4.tgz"; - sha1 = "69a67914bbd13c562bff14f504a403796aa0daa9"; - }; - } - - { - name = "gulp_sass___gulp_sass_3.2.1.tgz"; - path = fetchurl { - name = "gulp_sass___gulp_sass_3.2.1.tgz"; - url = "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-3.2.1.tgz"; - sha1 = "2e3688a96fd8be1c0c01340750c191b2e79fab94"; - }; - } - - { - name = "gulp_sourcemaps___gulp_sourcemaps_1.6.0.tgz"; - path = fetchurl { - name = "gulp_sourcemaps___gulp_sourcemaps_1.6.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz"; - sha1 = "b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c"; - }; - } - - { - name = "gulp_uglify___gulp_uglify_1.4.2.tgz"; - path = fetchurl { - name = "gulp_uglify___gulp_uglify_1.4.2.tgz"; - url = "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-1.4.2.tgz"; - sha1 = "2807ea1016e4962c37766c02feeb5501818857c3"; - }; - } - - { - name = "gulp_util___gulp_util_3.0.8.tgz"; - path = fetchurl { - name = "gulp_util___gulp_util_3.0.8.tgz"; - url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz"; - sha1 = "0054e1e744502e27c04c187c3ecc505dd54bbb4f"; - }; - } - - { - name = "gulp_util___gulp_util_3.0.7.tgz"; - path = fetchurl { - name = "gulp_util___gulp_util_3.0.7.tgz"; - url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz"; - sha1 = "78925c4b8f8b49005ac01a011c557e6218941cbb"; - }; - } - - { - name = "gulp_util___gulp_util_2.2.20.tgz"; - path = fetchurl { - name = "gulp_util___gulp_util_2.2.20.tgz"; - url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz"; - sha1 = "d7146e5728910bd8f047a6b0b1e549bc22dbd64c"; - }; - } - - { - name = "gulp_wrap___gulp_wrap_0.8.0.tgz"; - path = fetchurl { - name = "gulp_wrap___gulp_wrap_0.8.0.tgz"; - url = "https://registry.yarnpkg.com/gulp-wrap/-/gulp-wrap-0.8.0.tgz"; - sha1 = "c41ce89a374947788b78c9e67f33bbe838c69b86"; - }; - } - - { - name = "gulp___gulp_3.9.1.tgz"; - path = fetchurl { - name = "gulp___gulp_3.9.1.tgz"; - url = "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz"; - sha1 = "571ce45928dd40af6514fc4011866016c13845b4"; - }; - } - - { - name = "gulplog___gulplog_1.0.0.tgz"; - path = fetchurl { - name = "gulplog___gulplog_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz"; - sha1 = "e28c4d45d05ecbbed818363ce8f9c5926229ffe5"; - }; - } - - { - name = "handlebars___handlebars_4.7.3.tgz"; - path = fetchurl { - name = "handlebars___handlebars_4.7.3.tgz"; - url = "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz"; - sha1 = "8ece2797826886cf8082d1726ff21d2a022550ee"; - }; - } - - { - name = "handlebars___handlebars_1.3.0.tgz"; - path = fetchurl { - name = "handlebars___handlebars_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz"; - sha1 = "9e9b130a93e389491322d975cf3ec1818c37ce34"; - }; - } - - { - 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_5.1.3.tgz"; - path = fetchurl { - name = "har_validator___har_validator_5.1.3.tgz"; - url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; - sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; - }; - } - - { - name = "has_ansi___has_ansi_0.1.0.tgz"; - path = fetchurl { - name = "has_ansi___has_ansi_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz"; - sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e"; - }; - } - - { - 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_binary___has_binary_0.1.7.tgz"; - path = fetchurl { - name = "has_binary___has_binary_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz"; - sha1 = "68e61eb16210c9545a0a5cce06a873912fe1e68c"; - }; - } - - { - name = "has_color___has_color_0.1.7.tgz"; - path = fetchurl { - name = "has_color___has_color_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz"; - sha1 = "67144a5260c34fc3cca677d041daf52fe7b78b2f"; - }; - } - - { - name = "has_cors___has_cors_1.1.0.tgz"; - path = fetchurl { - name = "has_cors___has_cors_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz"; - sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39"; - }; - } - - { - 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_4.0.0.tgz"; - path = fetchurl { - name = "has_flag___has_flag_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz"; - sha1 = "944771fd9c81c81265c4d6941860da06bb59479b"; - }; - } - - { - name = "has_gulplog___has_gulplog_0.1.0.tgz"; - path = fetchurl { - name = "has_gulplog___has_gulplog_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz"; - sha1 = "6414c82913697da51590397dafb12f22967811ce"; - }; - } - - { - 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 = "hawk___hawk_1.1.1.tgz"; - path = fetchurl { - name = "hawk___hawk_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz"; - sha1 = "87cd491f9b46e4e2aeaca335416766885d2d1ed9"; - }; - } - - { - name = "hawk___hawk_1.0.0.tgz"; - path = fetchurl { - name = "hawk___hawk_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/hawk/-/hawk-1.0.0.tgz"; - sha1 = "b90bb169807285411da7ffcb8dd2598502d3b52d"; - }; - } - - { - name = "hoek___hoek_0.9.1.tgz"; - path = fetchurl { - name = "hoek___hoek_0.9.1.tgz"; - url = "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz"; - sha1 = "3d322462badf07716ea7eb85baf88079cddce505"; - }; - } - - { - name = "homedir_polyfill___homedir_polyfill_1.0.3.tgz"; - path = fetchurl { - name = "homedir_polyfill___homedir_polyfill_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz"; - sha1 = "743298cef4e5af3e194161fbadcc2151d3a058e8"; - }; - } - - { - name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; - path = fetchurl { - name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; - url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz"; - sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488"; - }; - } - - { - name = "http_browserify___http_browserify_1.3.2.tgz"; - path = fetchurl { - name = "http_browserify___http_browserify_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.3.2.tgz"; - sha1 = "b562c34479349a690d7a6597df495aefa8c604f5"; - }; - } - - { - name = "http_errors___http_errors_1.7.2.tgz"; - path = fetchurl { - name = "http_errors___http_errors_1.7.2.tgz"; - url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz"; - sha1 = "4f5029cf13239f31036e5b2e55292bcfbcc85c8f"; - }; - } - - { - name = "http_errors___http_errors_1.3.1.tgz"; - path = fetchurl { - name = "http_errors___http_errors_1.3.1.tgz"; - url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz"; - sha1 = "197e22cdebd4198585e8694ef6786197b91ed942"; - }; - } - - { - name = "http_parser_js___http_parser_js_0.4.10.tgz"; - path = fetchurl { - name = "http_parser_js___http_parser_js_0.4.10.tgz"; - url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz"; - sha1 = "92c9c1374c35085f75db359ec56cc257cbb93fa4"; - }; - } - - { - name = "http_proxy___http_proxy_1.18.0.tgz"; - path = fetchurl { - name = "http_proxy___http_proxy_1.18.0.tgz"; - url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz"; - sha1 = "dbe55f63e75a347db7f3d99974f2692a314a6a3a"; - }; - } - - { - name = "http_signature___http_signature_0.10.1.tgz"; - path = fetchurl { - name = "http_signature___http_signature_0.10.1.tgz"; - url = "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz"; - sha1 = "4fbdac132559aa8323121e540779c0a012b27e66"; - }; - } - - { - 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_0.0.1.tgz"; - path = fetchurl { - name = "https_browserify___https_browserify_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz"; - sha1 = "3f91365cabe60b77ed0ebba24b454e3e09d95a82"; - }; - } - - { - name = "iconv_lite___iconv_lite_0.4.13.tgz"; - path = fetchurl { - name = "iconv_lite___iconv_lite_0.4.13.tgz"; - url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz"; - sha1 = "1f88aba4ab0b1508e8312acc39345f36e992e2f2"; - }; - } - - { - name = "iconv_lite___iconv_lite_0.4.24.tgz"; - path = fetchurl { - name = "iconv_lite___iconv_lite_0.4.24.tgz"; - url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; - sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; - }; - } - - { - name = "ieee754___ieee754_1.1.13.tgz"; - path = fetchurl { - name = "ieee754___ieee754_1.1.13.tgz"; - url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz"; - sha1 = "ec168558e95aa181fd87d37f55c32bbcb6708b84"; - }; - } - - { - name = "ignore_walk___ignore_walk_3.0.3.tgz"; - path = fetchurl { - name = "ignore_walk___ignore_walk_3.0.3.tgz"; - url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz"; - sha1 = "017e2447184bfeade7c238e4aefdd1e8f95b1e37"; - }; - } - - { - name = "in_publish___in_publish_2.0.1.tgz"; - path = fetchurl { - name = "in_publish___in_publish_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz"; - sha1 = "948b1a535c8030561cea522f73f78f4be357e00c"; - }; - } - - { - 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 = "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 = "infinity_agent___infinity_agent_2.0.3.tgz"; - path = fetchurl { - name = "infinity_agent___infinity_agent_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz"; - sha1 = "45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216"; - }; - } - - { - 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_1.0.2.tgz"; - path = fetchurl { - name = "inherits___inherits_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz"; - sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"; - }; - } - - { - name = "inherits___inherits_2.0.4.tgz"; - path = fetchurl { - name = "inherits___inherits_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz"; - sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c"; - }; - } - - { - 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 = "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 = "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 = "inline_source_map___inline_source_map_0.3.1.tgz"; - path = fetchurl { - name = "inline_source_map___inline_source_map_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.3.1.tgz"; - sha1 = "a528b514e689fce90db3089e870d92f527acb5eb"; - }; - } - - { - name = "inquirer___inquirer_0.4.1.tgz"; - path = fetchurl { - name = "inquirer___inquirer_0.4.1.tgz"; - url = "https://registry.yarnpkg.com/inquirer/-/inquirer-0.4.1.tgz"; - sha1 = "6cf74eb1a347f97a1a207bea8ad1c987d0ff4b81"; - }; - } - - { - name = "inquirer___inquirer_0.5.1.tgz"; - path = fetchurl { - name = "inquirer___inquirer_0.5.1.tgz"; - url = "https://registry.yarnpkg.com/inquirer/-/inquirer-0.5.1.tgz"; - sha1 = "e9f2cd1ee172c7a32e054b78a03d4ddb0d7707f1"; - }; - } - - { - name = "insert_module_globals___insert_module_globals_6.0.0.tgz"; - path = fetchurl { - name = "insert_module_globals___insert_module_globals_6.0.0.tgz"; - url = "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-6.0.0.tgz"; - sha1 = "ee8aeb9dee16819e33aa14588a558824af0c15dc"; - }; - } - - { - name = "insight___insight_0.3.1.tgz"; - path = fetchurl { - name = "insight___insight_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/insight/-/insight-0.3.1.tgz"; - sha1 = "1a14f32c06115c0850338c38a253d707b611d448"; - }; - } - - { - name = "interpret___interpret_1.2.0.tgz"; - path = fetchurl { - name = "interpret___interpret_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz"; - sha1 = "d5061a6224be58e8083985f5014d844359576296"; - }; - } - - { - name = "intersect___intersect_0.0.3.tgz"; - path = fetchurl { - name = "intersect___intersect_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/intersect/-/intersect-0.0.3.tgz"; - sha1 = "c1a4a5e5eac6ede4af7504cc07e0ada7bc9f4920"; - }; - } - - { - 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 = "is_absolute___is_absolute_1.0.0.tgz"; - path = fetchurl { - name = "is_absolute___is_absolute_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz"; - sha1 = "395e1ae84b11f26ad1795e73c17378e48a301576"; - }; - } - - { - 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_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_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_expression___is_expression_3.0.0.tgz"; - path = fetchurl { - name = "is_expression___is_expression_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz"; - sha1 = "39acaa6be7fd1f3471dc42c7416e61c24317ac9f"; - }; - } - - { - 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.1.0.tgz"; - path = fetchurl { - name = "is_finite___is_finite_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz"; - sha1 = "904135c77fb42c0641d6aa1bcdbc4daa8da082f3"; - }; - } - - { - 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_npm___is_npm_1.0.0.tgz"; - path = fetchurl { - name = "is_npm___is_npm_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz"; - sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4"; - }; - } - - { - name = "is_number___is_number_0.1.1.tgz"; - path = fetchurl { - name = "is_number___is_number_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz"; - sha1 = "69a7af116963d47206ec9bd9b48a14216f1e3806"; - }; - } - - { - 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_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_promise___is_promise_2.1.0.tgz"; - path = fetchurl { - name = "is_promise___is_promise_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz"; - sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"; - }; - } - - { - name = "is_redirect___is_redirect_1.0.0.tgz"; - path = fetchurl { - name = "is_redirect___is_redirect_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz"; - sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"; - }; - } - - { - name = "is_regex___is_regex_1.0.5.tgz"; - path = fetchurl { - name = "is_regex___is_regex_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz"; - sha1 = "39d589a358bf18967f726967120b8fc1aed74eae"; - }; - } - - { - name = "is_relative___is_relative_1.0.0.tgz"; - path = fetchurl { - name = "is_relative___is_relative_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz"; - sha1 = "a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"; - }; - } - - { - name = "is_root___is_root_0.1.0.tgz"; - path = fetchurl { - name = "is_root___is_root_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-root/-/is-root-0.1.0.tgz"; - sha1 = "825e394ab593df2d73c5d0092fce507270b53dcb"; - }; - } - - { - 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_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_unc_path___is_unc_path_1.0.0.tgz"; - path = fetchurl { - name = "is_unc_path___is_unc_path_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz"; - sha1 = "d731e8898ed090a12c352ad2eaed5095ad322c9d"; - }; - } - - { - 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___is_3.3.0.tgz"; - path = fetchurl { - name = "is___is_3.3.0.tgz"; - url = "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz"; - sha1 = "61cff6dd3c4193db94a3d62582072b44e5645d79"; - }; - } - - { - 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 = "isbinaryfile___isbinaryfile_3.0.3.tgz"; - path = fetchurl { - name = "isbinaryfile___isbinaryfile_3.0.3.tgz"; - url = "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz"; - sha1 = "5d6def3edebf6e8ca8cae9c30183a804b5f8be80"; - }; - } - - { - 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 = "istanbul___istanbul_0.4.5.tgz"; - path = fetchurl { - name = "istanbul___istanbul_0.4.5.tgz"; - url = "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz"; - sha1 = "65c7d73d4c4da84d4f3ac310b918fb0b8033733b"; - }; - } - - { - name = "istextorbinary___istextorbinary_1.0.2.tgz"; - path = fetchurl { - name = "istextorbinary___istextorbinary_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-1.0.2.tgz"; - sha1 = "ace19354d1a9a0173efeb1084ce0f87b0ad7decf"; - }; - } - - { - name = "jasmine_core___jasmine_core_2.99.1.tgz"; - path = fetchurl { - name = "jasmine_core___jasmine_core_2.99.1.tgz"; - url = "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz"; - sha1 = "e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"; - }; - } - - { - name = "js_base64___js_base64_2.5.2.tgz"; - path = fetchurl { - name = "js_base64___js_base64_2.5.2.tgz"; - url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz"; - sha1 = "313b6274dda718f714d00b3330bbae6e38e90209"; - }; - } - - { - name = "js_string_escape___js_string_escape_1.0.1.tgz"; - path = fetchurl { - name = "js_string_escape___js_string_escape_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz"; - sha1 = "e2625badbc0d67c7533e9edc1068c587ae4137ef"; - }; - } - - { - name = "js_stringify___js_stringify_1.0.2.tgz"; - path = fetchurl { - name = "js_stringify___js_stringify_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz"; - sha1 = "1736fddfd9724f28a3682adc6230ae7e4e9679db"; - }; - } - - { - name = "js_yaml___js_yaml_3.13.1.tgz"; - path = fetchurl { - name = "js_yaml___js_yaml_3.13.1.tgz"; - url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz"; - sha1 = "aff151b30bfdfa8e49e05da22e7415e9dfa37847"; - }; - } - - { - name = "js_yaml___js_yaml_3.0.2.tgz"; - path = fetchurl { - name = "js_yaml___js_yaml_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.0.2.tgz"; - sha1 = "9937865f8e897a5e894e73c2c5cf2e89b32eb771"; - }; - } - - { - 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 = "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_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 = "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 = "jsonparse___jsonparse_0.0.5.tgz"; - path = fetchurl { - name = "jsonparse___jsonparse_0.0.5.tgz"; - url = "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz"; - sha1 = "330542ad3f0a654665b778f3eb2d9a9fa507ac64"; - }; - } - - { - 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 = "jstransformer___jstransformer_1.0.0.tgz"; - path = fetchurl { - name = "jstransformer___jstransformer_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz"; - sha1 = "ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"; - }; - } - - { - name = "junk___junk_0.3.0.tgz"; - path = fetchurl { - name = "junk___junk_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/junk/-/junk-0.3.0.tgz"; - sha1 = "6c89c636f6e99898d8efbfc50430db40be71e10c"; - }; - } - - { - name = "karma_chrome_launcher___karma_chrome_launcher_2.1.1.tgz"; - path = fetchurl { - name = "karma_chrome_launcher___karma_chrome_launcher_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz"; - sha1 = "216879c68ac04d8d5140e99619ba04b59afd46cf"; - }; - } - - { - name = "karma_coffee_preprocessor___karma_coffee_preprocessor_0.3.0.tgz"; - path = fetchurl { - name = "karma_coffee_preprocessor___karma_coffee_preprocessor_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/karma-coffee-preprocessor/-/karma-coffee-preprocessor-0.3.0.tgz"; - sha1 = "a4d8dc2b145bfef458a203d308b63bc03c9b4259"; - }; - } - - { - name = "karma_coverage___karma_coverage_0.5.5.tgz"; - path = fetchurl { - name = "karma_coverage___karma_coverage_0.5.5.tgz"; - url = "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-0.5.5.tgz"; - sha1 = "b0d58b1025d59d5c6620263186f1d58f5d5348c5"; - }; - } - - { - name = "karma_jasmine___karma_jasmine_0.3.8.tgz"; - path = fetchurl { - name = "karma_jasmine___karma_jasmine_0.3.8.tgz"; - url = "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-0.3.8.tgz"; - sha1 = "5b6457791ad9b89aa173f079e3ebe1b8c805236c"; - }; - } - - { - name = "karma_sourcemap_loader___karma_sourcemap_loader_0.3.7.tgz"; - path = fetchurl { - name = "karma_sourcemap_loader___karma_sourcemap_loader_0.3.7.tgz"; - url = "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz"; - sha1 = "91322c77f8f13d46fed062b042e1009d4c4505d8"; - }; - } - - { - name = "karma___karma_0.13.22.tgz"; - path = fetchurl { - name = "karma___karma_0.13.22.tgz"; - url = "https://registry.yarnpkg.com/karma/-/karma-0.13.22.tgz"; - sha1 = "07750b1bd063d7e7e7b91bcd2e6354d8f2aa8744"; - }; - } - - { - 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.3.tgz"; - path = fetchurl { - name = "kind_of___kind_of_6.0.3.tgz"; - url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz"; - sha1 = "07c05034a6c349fa06e24fa35aa76db4580ce4dd"; - }; - } - - { - name = "latest_version___latest_version_1.0.1.tgz"; - path = fetchurl { - name = "latest_version___latest_version_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz"; - sha1 = "72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb"; - }; - } - - { - 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 = "lazypipe___lazypipe_1.0.2.tgz"; - path = fetchurl { - name = "lazypipe___lazypipe_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/lazypipe/-/lazypipe-1.0.2.tgz"; - sha1 = "b66f64ed7fd8b04869f1f1bcb795dbbaa80e418c"; - }; - } - - { - 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 = "less___less_1.7.5.tgz"; - path = fetchurl { - name = "less___less_1.7.5.tgz"; - url = "https://registry.yarnpkg.com/less/-/less-1.7.5.tgz"; - sha1 = "4f220cf7288a27eaca739df6e4808a2d4c0d5756"; - }; - } - - { - name = "levn___levn_0.3.0.tgz"; - path = fetchurl { - name = "levn___levn_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz"; - sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; - }; - } - - { - name = "lexical_scope___lexical_scope_1.1.1.tgz"; - path = fetchurl { - name = "lexical_scope___lexical_scope_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.1.1.tgz"; - sha1 = "debac1067435f1359d90fcfd9e94bcb2ee47b2bf"; - }; - } - - { - name = "liftoff___liftoff_2.5.0.tgz"; - path = fetchurl { - name = "liftoff___liftoff_2.5.0.tgz"; - url = "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz"; - sha1 = "2009291bb31cea861bbf10a7c15a28caf75c31ec"; - }; - } - - { - name = "livereload_js___livereload_js_2.4.0.tgz"; - path = fetchurl { - name = "livereload_js___livereload_js_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz"; - sha1 = "447c31cf1ea9ab52fc20db615c5ddf678f78009c"; - }; - } - - { - 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 = "lockfile___lockfile_0.4.3.tgz"; - path = fetchurl { - name = "lockfile___lockfile_0.4.3.tgz"; - url = "https://registry.yarnpkg.com/lockfile/-/lockfile-0.4.3.tgz"; - sha1 = "79b965ee9b32d9dd24b59cf81205e6dcb6d3b224"; - }; - } - - { - 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._basetostring___lodash._basetostring_3.0.1.tgz"; - path = fetchurl { - name = "lodash._basetostring___lodash._basetostring_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz"; - sha1 = "d1861d877f824a52f669832dcaf3ee15566a07d5"; - }; - } - - { - name = "lodash._basevalues___lodash._basevalues_3.0.0.tgz"; - path = fetchurl { - name = "lodash._basevalues___lodash._basevalues_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz"; - sha1 = "5b775762802bde3d3297503e26300820fdf661b7"; - }; - } - - { - 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._escapehtmlchar___lodash._escapehtmlchar_2.4.1.tgz"; - path = fetchurl { - name = "lodash._escapehtmlchar___lodash._escapehtmlchar_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz"; - sha1 = "df67c3bb6b7e8e1e831ab48bfa0795b92afe899d"; - }; - } - - { - name = "lodash._escapestringchar___lodash._escapestringchar_2.4.1.tgz"; - path = fetchurl { - name = "lodash._escapestringchar___lodash._escapestringchar_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz"; - sha1 = "ecfe22618a2ade50bfeea43937e51df66f0edb72"; - }; - } - - { - 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._htmlescapes___lodash._htmlescapes_2.4.1.tgz"; - path = fetchurl { - name = "lodash._htmlescapes___lodash._htmlescapes_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz"; - sha1 = "32d14bf0844b6de6f8b62a051b4f67c228b624cb"; - }; - } - - { - 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._isnative___lodash._isnative_2.4.1.tgz"; - path = fetchurl { - name = "lodash._isnative___lodash._isnative_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz"; - sha1 = "3ea6404b784a7be836c7b57580e1cdf79b14832c"; - }; - } - - { - name = "lodash._objecttypes___lodash._objecttypes_2.4.1.tgz"; - path = fetchurl { - name = "lodash._objecttypes___lodash._objecttypes_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz"; - sha1 = "7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11"; - }; - } - - { - name = "lodash._reescape___lodash._reescape_3.0.0.tgz"; - path = fetchurl { - name = "lodash._reescape___lodash._reescape_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz"; - sha1 = "2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"; - }; - } - - { - name = "lodash._reevaluate___lodash._reevaluate_3.0.0.tgz"; - path = fetchurl { - name = "lodash._reevaluate___lodash._reevaluate_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz"; - sha1 = "58bc74c40664953ae0b124d806996daca431e2ed"; - }; - } - - { - name = "lodash._reinterpolate___lodash._reinterpolate_2.4.1.tgz"; - path = fetchurl { - name = "lodash._reinterpolate___lodash._reinterpolate_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz"; - sha1 = "4f1227aa5a8711fc632f5b07a1f4607aab8b3222"; - }; - } - - { - name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; - path = fetchurl { - name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"; - sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d"; - }; - } - - { - name = "lodash._reunescapedhtml___lodash._reunescapedhtml_2.4.1.tgz"; - path = fetchurl { - name = "lodash._reunescapedhtml___lodash._reunescapedhtml_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz"; - sha1 = "747c4fc40103eb3bb8a0976e571f7a2659e93ba7"; - }; - } - - { - name = "lodash._root___lodash._root_3.0.1.tgz"; - path = fetchurl { - name = "lodash._root___lodash._root_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz"; - sha1 = "fba1c4524c19ee9a5f8136b4609f017cf4ded692"; - }; - } - - { - name = "lodash._shimkeys___lodash._shimkeys_2.4.1.tgz"; - path = fetchurl { - name = "lodash._shimkeys___lodash._shimkeys_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz"; - sha1 = "6e9cc9666ff081f0b5a6c978b83e242e6949d203"; - }; - } - - { - 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.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.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_2.4.1.tgz"; - path = fetchurl { - name = "lodash.debounce___lodash.debounce_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-2.4.1.tgz"; - sha1 = "d8cead246ec4b926e8b85678fc396bfeba8cc6fc"; - }; - } - - { - name = "lodash.defaults___lodash.defaults_2.4.1.tgz"; - path = fetchurl { - name = "lodash.defaults___lodash.defaults_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz"; - sha1 = "a7e8885f05e68851144b6e12a8f3678026bc4c54"; - }; - } - - { - 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.escape___lodash.escape_3.2.0.tgz"; - path = fetchurl { - name = "lodash.escape___lodash.escape_3.2.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz"; - sha1 = "995ee0dc18c1b48cc92effae71a10aab5b487698"; - }; - } - - { - name = "lodash.escape___lodash.escape_2.4.1.tgz"; - path = fetchurl { - name = "lodash.escape___lodash.escape_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz"; - sha1 = "2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4"; - }; - } - - { - 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.isfunction___lodash.isfunction_2.4.1.tgz"; - path = fetchurl { - name = "lodash.isfunction___lodash.isfunction_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz"; - sha1 = "2cfd575c73e498ab57e319b77fa02adef13a94d1"; - }; - } - - { - name = "lodash.isobject___lodash.isobject_2.4.1.tgz"; - path = fetchurl { - name = "lodash.isobject___lodash.isobject_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz"; - sha1 = "5a2e47fe69953f1ee631a7eba1fe64d2d06558f5"; - }; - } - - { - 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.keys___lodash.keys_2.4.1.tgz"; - path = fetchurl { - name = "lodash.keys___lodash.keys_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz"; - sha1 = "48dea46df8ff7632b10d706b8acb26591e2b3727"; - }; - } - - { - name = "lodash.now___lodash.now_2.4.1.tgz"; - path = fetchurl { - name = "lodash.now___lodash.now_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.now/-/lodash.now-2.4.1.tgz"; - sha1 = "6872156500525185faf96785bb7fe7fe15b562c6"; - }; - } - - { - 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.template___lodash.template_2.4.1.tgz"; - path = fetchurl { - name = "lodash.template___lodash.template_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz"; - sha1 = "9e611007edf629129a974ab3c48b817b3e1cf20d"; - }; - } - - { - name = "lodash.template___lodash.template_3.6.2.tgz"; - path = fetchurl { - name = "lodash.template___lodash.template_3.6.2.tgz"; - url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz"; - sha1 = "f8cdecc6169a255be9098ae8b0c53d378931d14f"; - }; - } - - { - name = "lodash.template___lodash.template_4.5.0.tgz"; - path = fetchurl { - name = "lodash.template___lodash.template_4.5.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz"; - sha1 = "f976195cf3f347d0d5f52483569fe8031ccce8ab"; - }; - } - - { - name = "lodash.templatesettings___lodash.templatesettings_3.1.1.tgz"; - path = fetchurl { - name = "lodash.templatesettings___lodash.templatesettings_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz"; - sha1 = "fb307844753b66b9f1afa54e262c745307dba8e5"; - }; - } - - { - name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; - path = fetchurl { - name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz"; - sha1 = "e481310f049d3cf6d47e912ad09313b154f0fb33"; - }; - } - - { - name = "lodash.templatesettings___lodash.templatesettings_2.4.1.tgz"; - path = fetchurl { - name = "lodash.templatesettings___lodash.templatesettings_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz"; - sha1 = "ea76c75d11eb86d4dbe89a83893bb861929ac699"; - }; - } - - { - name = "lodash.values___lodash.values_2.4.1.tgz"; - path = fetchurl { - name = "lodash.values___lodash.values_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz"; - sha1 = "abf514436b3cb705001627978cbcf30b1280eea4"; - }; - } - - { - name = "lodash___lodash_2.4.2.tgz"; - path = fetchurl { - name = "lodash___lodash_2.4.2.tgz"; - url = "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz"; - sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e"; - }; - } - - { - name = "lodash___lodash_3.10.1.tgz"; - path = fetchurl { - name = "lodash___lodash_3.10.1.tgz"; - url = "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz"; - sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6"; - }; - } - - { - name = "lodash___lodash_4.17.15.tgz"; - path = fetchurl { - name = "lodash___lodash_4.17.15.tgz"; - url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz"; - sha1 = "b447f6670a0455bbfeedd11392eff330ea097548"; - }; - } - - { - name = "lodash___lodash_1.0.2.tgz"; - path = fetchurl { - name = "lodash___lodash_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz"; - sha1 = "8f57560c83b59fc270bd3d561b690043430e2551"; - }; - } - - { - name = "log4js___log4js_0.6.38.tgz"; - path = fetchurl { - name = "log4js___log4js_0.6.38.tgz"; - url = "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz"; - sha1 = "2c494116695d6fb25480943d3fc872e662a522fd"; - }; - } - - { - 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 = "loophole___loophole_1.1.0.tgz"; - path = fetchurl { - name = "loophole___loophole_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/loophole/-/loophole-1.1.0.tgz"; - sha1 = "37949fea453b6256acc725c320ce0c5a7f70a2bd"; - }; - } - - { - 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 = "lowercase_keys___lowercase_keys_1.0.1.tgz"; - path = fetchurl { - name = "lowercase_keys___lowercase_keys_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz"; - sha1 = "6f9e30b47084d971a7c820ff15a6c5167b74c26f"; - }; - } - - { - name = "lru_cache___lru_cache_2.7.3.tgz"; - path = fetchurl { - name = "lru_cache___lru_cache_2.7.3.tgz"; - url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz"; - sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952"; - }; - } - - { - name = "lru_cache___lru_cache_4.1.5.tgz"; - path = fetchurl { - name = "lru_cache___lru_cache_4.1.5.tgz"; - url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; - sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; - }; - } - - { - name = "lru_cache___lru_cache_2.3.1.tgz"; - path = fetchurl { - name = "lru_cache___lru_cache_2.3.1.tgz"; - url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.3.1.tgz"; - sha1 = "b3adf6b3d856e954e2c390e6cef22081245a53d6"; - }; - } - - { - name = "lru_cache___lru_cache_2.5.2.tgz"; - path = fetchurl { - name = "lru_cache___lru_cache_2.5.2.tgz"; - url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.5.2.tgz"; - sha1 = "1fddad938aae1263ce138680be1b3f591c0ab41c"; - }; - } - - { - name = "lru_queue___lru_queue_0.1.0.tgz"; - path = fetchurl { - name = "lru_queue___lru_queue_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz"; - sha1 = "2738bd9f0d3cf4f84490c5736c48699ac632cda3"; - }; - } - - { - name = "make_iterator___make_iterator_1.0.1.tgz"; - path = fetchurl { - name = "make_iterator___make_iterator_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz"; - sha1 = "29b33f312aa8f547c4a5e490f56afcec99133ad6"; - }; - } - - { - 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_stream___map_stream_0.0.7.tgz"; - path = fetchurl { - name = "map_stream___map_stream_0.0.7.tgz"; - url = "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz"; - sha1 = "8a1f07896d82b10926bd3744a2420009f88974a8"; - }; - } - - { - name = "map_stream___map_stream_0.1.0.tgz"; - path = fetchurl { - name = "map_stream___map_stream_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz"; - sha1 = "e56aa94c4c8055a16404a0674b78f215f7c8e194"; - }; - } - - { - 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_random___math_random_1.0.4.tgz"; - path = fetchurl { - name = "math_random___math_random_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz"; - sha1 = "5dd6943c938548267016d4e34f057583080c514c"; - }; - } - - { - 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 = "memoizee___memoizee_0.2.6.tgz"; - path = fetchurl { - name = "memoizee___memoizee_0.2.6.tgz"; - url = "https://registry.yarnpkg.com/memoizee/-/memoizee-0.2.6.tgz"; - sha1 = "bb45a7ad02530082f1612671dab35219cd2e0741"; - }; - } - - { - name = "memoizee___memoizee_0.3.10.tgz"; - path = fetchurl { - name = "memoizee___memoizee_0.3.10.tgz"; - url = "https://registry.yarnpkg.com/memoizee/-/memoizee-0.3.10.tgz"; - sha1 = "4eca0d8aed39ec9d017f4c5c2f2f6432f42e5c8f"; - }; - } - - { - 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_stream___merge_stream_1.0.1.tgz"; - path = fetchurl { - name = "merge_stream___merge_stream_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz"; - sha1 = "4041202d508a342ba00174008df0c251b8c135e1"; - }; - } - - { - name = "merge___merge_1.2.1.tgz"; - path = fetchurl { - name = "merge___merge_1.2.1.tgz"; - url = "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz"; - sha1 = "38bebf80c3220a8a487b6fcfb3941bb11720c145"; - }; - } - - { - 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 = "mime_db___mime_db_1.43.0.tgz"; - path = fetchurl { - name = "mime_db___mime_db_1.43.0.tgz"; - url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz"; - sha1 = "0a12e0502650e473d735535050e7c8f4eb4fae58"; - }; - } - - { - name = "mime_db___mime_db_1.12.0.tgz"; - path = fetchurl { - name = "mime_db___mime_db_1.12.0.tgz"; - url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz"; - sha1 = "3d0c63180f458eb10d325aaa37d7c58ae312e9d7"; - }; - } - - { - name = "mime_types___mime_types_2.1.26.tgz"; - path = fetchurl { - name = "mime_types___mime_types_2.1.26.tgz"; - url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz"; - sha1 = "9c921fc09b7e149a65dfdc0da4d20997200b0a06"; - }; - } - - { - name = "mime_types___mime_types_1.0.2.tgz"; - path = fetchurl { - name = "mime_types___mime_types_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz"; - sha1 = "995ae1392ab8affcbfcb2641dd054e943c0d5dce"; - }; - } - - { - name = "mime_types___mime_types_2.0.14.tgz"; - path = fetchurl { - name = "mime_types___mime_types_2.0.14.tgz"; - url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz"; - sha1 = "310e159db23e077f8bb22b748dabfa4957140aa6"; - }; - } - - { - name = "mime___mime_1.3.4.tgz"; - path = fetchurl { - name = "mime___mime_1.3.4.tgz"; - url = "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz"; - sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53"; - }; - } - - { - 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 = "mime___mime_1.2.11.tgz"; - path = fetchurl { - name = "mime___mime_1.2.11.tgz"; - url = "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz"; - sha1 = "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"; - }; - } - - { - name = "mini_lr___mini_lr_0.1.9.tgz"; - path = fetchurl { - name = "mini_lr___mini_lr_0.1.9.tgz"; - url = "https://registry.yarnpkg.com/mini-lr/-/mini-lr-0.1.9.tgz"; - sha1 = "02199d27347953d1fd1d6dbded4261f187b2d0f6"; - }; - } - - { - name = "minimatch___minimatch_0.3.0.tgz"; - path = fetchurl { - name = "minimatch___minimatch_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz"; - sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd"; - }; - } - - { - 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 = "minimatch___minimatch_0.2.14.tgz"; - path = fetchurl { - name = "minimatch___minimatch_0.2.14.tgz"; - url = "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz"; - sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a"; - }; - } - - { - name = "minimatch___minimatch_1.0.0.tgz"; - path = fetchurl { - name = "minimatch___minimatch_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz"; - sha1 = "e0dd2120b49e1b724ce8d714c520822a9438576d"; - }; - } - - { - name = "minimatch___minimatch_2.0.10.tgz"; - path = fetchurl { - name = "minimatch___minimatch_2.0.10.tgz"; - url = "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz"; - sha1 = "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"; - }; - } - - { - name = "minimist___minimist_0.2.1.tgz"; - path = fetchurl { - name = "minimist___minimist_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz"; - sha1 = "827ba4e7593464e7c221e8c5bed930904ee2c455"; - }; - } - - { - name = "minimist___minimist_1.2.5.tgz"; - path = fetchurl { - name = "minimist___minimist_1.2.5.tgz"; - url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz"; - sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602"; - }; - } - - { - name = "minimist___minimist_0.0.10.tgz"; - path = fetchurl { - name = "minimist___minimist_0.0.10.tgz"; - url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz"; - sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf"; - }; - } - - { - name = "minipass___minipass_2.9.0.tgz"; - path = fetchurl { - name = "minipass___minipass_2.9.0.tgz"; - url = "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz"; - sha1 = "e713762e7d3e32fed803115cf93e04bca9fcc9a6"; - }; - } - - { - name = "minizlib___minizlib_1.3.3.tgz"; - path = fetchurl { - name = "minizlib___minizlib_1.3.3.tgz"; - url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz"; - sha1 = "2290de96818a34c29551c8a8d301216bd65a861d"; - }; - } - - { - name = "mixin_deep___mixin_deep_1.3.2.tgz"; - path = fetchurl { - name = "mixin_deep___mixin_deep_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz"; - sha1 = "1120b43dc359a785dce65b55b82e257ccf479566"; - }; - } - - { - name = "mkdirp___mkdirp_0.5.4.tgz"; - path = fetchurl { - name = "mkdirp___mkdirp_0.5.4.tgz"; - url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz"; - sha1 = "fd01504a6797ec5c9be81ff43d204961ed64a512"; - }; - } - - { - name = "mkdirp___mkdirp_0.3.5.tgz"; - path = fetchurl { - name = "mkdirp___mkdirp_0.3.5.tgz"; - url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz"; - sha1 = "de3e5f8961c88c787ee1368df849ac4413eca8d7"; - }; - } - - { - name = "mkpath___mkpath_0.1.0.tgz"; - path = fetchurl { - name = "mkpath___mkpath_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/mkpath/-/mkpath-0.1.0.tgz"; - sha1 = "7554a6f8d871834cc97b5462b122c4c124d6de91"; - }; - } - - { - name = "module_deps___module_deps_2.0.6.tgz"; - path = fetchurl { - name = "module_deps___module_deps_2.0.6.tgz"; - url = "https://registry.yarnpkg.com/module-deps/-/module-deps-2.0.6.tgz"; - sha1 = "b999321c73ac33580f00712c0f3075fdca42563f"; - }; - } - - { - name = "mout___mout_0.9.1.tgz"; - path = fetchurl { - name = "mout___mout_0.9.1.tgz"; - url = "https://registry.yarnpkg.com/mout/-/mout-0.9.1.tgz"; - sha1 = "84f0f3fd6acc7317f63de2affdcc0cee009b0477"; - }; - } - - { - name = "ms___ms_0.7.1.tgz"; - path = fetchurl { - name = "ms___ms_0.7.1.tgz"; - url = "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz"; - sha1 = "9cd13c03adbff25b65effde7ce864ee952017098"; - }; - } - - { - name = "ms___ms_0.7.2.tgz"; - path = fetchurl { - name = "ms___ms_0.7.2.tgz"; - url = "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz"; - sha1 = "ae25cf2512b3885a1d95d7f037868d8431124765"; - }; - } - - { - 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 = "ms___ms_2.1.2.tgz"; - path = fetchurl { - name = "ms___ms_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz"; - sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009"; - }; - } - - { - name = "multipipe___multipipe_0.1.2.tgz"; - path = fetchurl { - name = "multipipe___multipipe_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz"; - sha1 = "2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"; - }; - } - - { - name = "mute_stream___mute_stream_0.0.4.tgz"; - path = fetchurl { - name = "mute_stream___mute_stream_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz"; - sha1 = "a9219960a6d5d5d046597aee51252c6655f7177e"; - }; - } - - { - name = "mute_stream___mute_stream_0.0.8.tgz"; - path = fetchurl { - name = "mute_stream___mute_stream_0.0.8.tgz"; - url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz"; - sha1 = "1630c42b2251ff81e2a283de96a5497ea92e5e0d"; - }; - } - - { - name = "nan___nan_2.14.0.tgz"; - path = fetchurl { - name = "nan___nan_2.14.0.tgz"; - url = "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz"; - sha1 = "7818f722027b2459a86f0295d434d1fc2336c52c"; - }; - } - - { - 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 = "natives___natives_1.1.6.tgz"; - path = fetchurl { - name = "natives___natives_1.1.6.tgz"; - url = "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz"; - sha1 = "a603b4a498ab77173612b9ea1acdec4d980f00bb"; - }; - } - - { - name = "needle___needle_2.3.3.tgz"; - path = fetchurl { - name = "needle___needle_2.3.3.tgz"; - url = "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz"; - sha1 = "a041ad1d04a871b0ebb666f40baaf1fb47867117"; - }; - } - - { - 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.6.1.tgz"; - path = fetchurl { - name = "neo_async___neo_async_2.6.1.tgz"; - url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz"; - sha1 = "ac27ada66167fa8849a6addd837f6b189ad2081c"; - }; - } - - { - name = "nested_error_stacks___nested_error_stacks_1.0.2.tgz"; - path = fetchurl { - name = "nested_error_stacks___nested_error_stacks_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz"; - sha1 = "19f619591519f096769a5ba9a86e6eeec823c3cf"; - }; - } - - { - name = "next_tick___next_tick_0.1.0.tgz"; - path = fetchurl { - name = "next_tick___next_tick_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/next-tick/-/next-tick-0.1.0.tgz"; - sha1 = "1912cce8eb9b697d640fbba94f8f00dec3b94259"; - }; - } - - { - name = "next_tick___next_tick_1.1.0.tgz"; - path = fetchurl { - name = "next_tick___next_tick_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz"; - sha1 = "1836ee30ad56d67ef281b22bd199f709449b35eb"; - }; - } - - { - name = "next_tick___next_tick_0.2.2.tgz"; - path = fetchurl { - name = "next_tick___next_tick_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/next-tick/-/next-tick-0.2.2.tgz"; - sha1 = "75da4a927ee5887e39065880065b7336413b310d"; - }; - } - - { - 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 = "ng_annotate___ng_annotate_1.2.2.tgz"; - path = fetchurl { - name = "ng_annotate___ng_annotate_1.2.2.tgz"; - url = "https://registry.yarnpkg.com/ng-annotate/-/ng-annotate-1.2.2.tgz"; - sha1 = "dc3fc51ba0b2f8b385dbe047f4da06f580a1fd61"; - }; - } - - { - name = "ng_classify___ng_classify_4.1.1.tgz"; - path = fetchurl { - name = "ng_classify___ng_classify_4.1.1.tgz"; - url = "https://registry.yarnpkg.com/ng-classify/-/ng-classify-4.1.1.tgz"; - sha1 = "6688b924c3c9b5f94da5f8fbc0d55176f3dda122"; - }; - } - - { - name = "node_gyp___node_gyp_3.8.0.tgz"; - path = fetchurl { - name = "node_gyp___node_gyp_3.8.0.tgz"; - url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz"; - sha1 = "540304261c330e80d0d5edce253a68cb3964218c"; - }; - } - - { - name = "node_pre_gyp___node_pre_gyp_0.14.0.tgz"; - path = fetchurl { - name = "node_pre_gyp___node_pre_gyp_0.14.0.tgz"; - url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz"; - sha1 = "9a0596533b877289bcad4e143982ca3d904ddc83"; - }; - } - - { - name = "node_sass___node_sass_4.13.1.tgz"; - path = fetchurl { - name = "node_sass___node_sass_4.13.1.tgz"; - url = "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz"; - sha1 = "9db5689696bb2eec2c32b98bfea4c7a2e992d0a3"; - }; - } - - { - name = "node_uuid___node_uuid_1.4.8.tgz"; - path = fetchurl { - name = "node_uuid___node_uuid_1.4.8.tgz"; - url = "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz"; - sha1 = "b040eb0923968afabf8d32fb1f17f1167fdab907"; - }; - } - - { - name = "node.extend___node.extend_1.1.8.tgz"; - path = fetchurl { - name = "node.extend___node.extend_1.1.8.tgz"; - url = "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.8.tgz"; - sha1 = "0aab3e63789f4e6d68b42bc00073ad1881243cf0"; - }; - } - - { - 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.3.tgz"; - path = fetchurl { - name = "nopt___nopt_4.0.3.tgz"; - url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz"; - sha1 = "a375cad9d02fd921278d954c2254d5aa57e15e48"; - }; - } - - { - name = "nopt___nopt_1.0.10.tgz"; - path = fetchurl { - name = "nopt___nopt_1.0.10.tgz"; - url = "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz"; - sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee"; - }; - } - - { - name = "nopt___nopt_2.2.1.tgz"; - path = fetchurl { - name = "nopt___nopt_2.2.1.tgz"; - url = "https://registry.yarnpkg.com/nopt/-/nopt-2.2.1.tgz"; - sha1 = "2aa09b7d1768487b3b89a9c5aa52335bff0baea7"; - }; - } - - { - name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; - path = fetchurl { - name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; - url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz"; - sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8"; - }; - } - - { - 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 = "npm_bundled___npm_bundled_1.1.1.tgz"; - path = fetchurl { - name = "npm_bundled___npm_bundled_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz"; - sha1 = "1edd570865a94cdb1bc8220775e29466c9fb234b"; - }; - } - - { - name = "npm_normalize_package_bin___npm_normalize_package_bin_1.0.1.tgz"; - path = fetchurl { - name = "npm_normalize_package_bin___npm_normalize_package_bin_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"; - sha1 = "6e79a41f23fd235c0623218228da7d9c23b8f6e2"; - }; - } - - { - name = "npm_packlist___npm_packlist_1.4.8.tgz"; - path = fetchurl { - name = "npm_packlist___npm_packlist_1.4.8.tgz"; - url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz"; - sha1 = "56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"; - }; - } - - { - 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 = "null_check___null_check_1.0.0.tgz"; - path = fetchurl { - name = "null_check___null_check_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz"; - sha1 = "977dffd7176012b9ec30d2a39db5cf72a0439edd"; - }; - } - - { - 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.3.0.tgz"; - path = fetchurl { - name = "oauth_sign___oauth_sign_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz"; - sha1 = "cb540f93bb2b22a7d5941691a288d60e8ea9386e"; - }; - } - - { - name = "oauth_sign___oauth_sign_0.5.0.tgz"; - path = fetchurl { - name = "oauth_sign___oauth_sign_0.5.0.tgz"; - url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.5.0.tgz"; - sha1 = "d767f5169325620eab2e087ef0c472e773db6461"; - }; - } - - { - name = "oauth_sign___oauth_sign_0.9.0.tgz"; - path = fetchurl { - name = "oauth_sign___oauth_sign_0.9.0.tgz"; - url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; - sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; - }; - } - - { - 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_assign___object_assign_4.1.0.tgz"; - path = fetchurl { - name = "object_assign___object_assign_4.1.0.tgz"; - url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz"; - sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"; - }; - } - - { - name = "object_assign___object_assign_2.1.1.tgz"; - path = fetchurl { - name = "object_assign___object_assign_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz"; - sha1 = "43c36e5d569ff8e4816c4efa8be02d26967c18aa"; - }; - } - - { - name = "object_assign___object_assign_3.0.0.tgz"; - path = fetchurl { - name = "object_assign___object_assign_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz"; - sha1 = "9bedd5ca0897949bca47e7ff408062d549f587f2"; - }; - } - - { - name = "object_assign___object_assign_0.1.2.tgz"; - path = fetchurl { - name = "object_assign___object_assign_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/object-assign/-/object-assign-0.1.2.tgz"; - sha1 = "036992f073aff7b2db83d06b3fb3155a5ccac37f"; - }; - } - - { - name = "object_component___object_component_0.0.3.tgz"; - path = fetchurl { - name = "object_component___object_component_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz"; - sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291"; - }; - } - - { - 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_0.4.0.tgz"; - path = fetchurl { - name = "object_keys___object_keys_0.4.0.tgz"; - url = "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz"; - sha1 = "28a6aae7428dd2c3a92f3d95f21335dd204e0336"; - }; - } - - { - 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.defaults___object.defaults_1.1.0.tgz"; - path = fetchurl { - name = "object.defaults___object.defaults_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz"; - sha1 = "3a7f868334b407dea06da16d88d5cd29e435fecf"; - }; - } - - { - name = "object.map___object.map_1.0.1.tgz"; - path = fetchurl { - name = "object.map___object.map_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz"; - sha1 = "cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"; - }; - } - - { - 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 = "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 = "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 = "once___once_1.3.3.tgz"; - path = fetchurl { - name = "once___once_1.3.3.tgz"; - url = "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz"; - sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20"; - }; - } - - { - name = "opn___opn_0.1.2.tgz"; - path = fetchurl { - name = "opn___opn_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/opn/-/opn-0.1.2.tgz"; - sha1 = "c527832cfd964d52096b524d0035ecaece51db4f"; - }; - } - - { - name = "optimist___optimist_0.6.1.tgz"; - path = fetchurl { - name = "optimist___optimist_0.6.1.tgz"; - url = "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz"; - sha1 = "da3ea74686fa21a19a111c326e90eb15a0196686"; - }; - } - - { - name = "optimist___optimist_0.3.7.tgz"; - path = fetchurl { - name = "optimist___optimist_0.3.7.tgz"; - url = "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz"; - sha1 = "c90941ad59e4273328923074d2cf2e7cbc6ec0d9"; - }; - } - - { - name = "optionator___optionator_0.8.3.tgz"; - path = fetchurl { - name = "optionator___optionator_0.8.3.tgz"; - url = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz"; - sha1 = "84fa1d036fe9d3c7e21d99884b601167ec8fb495"; - }; - } - - { - name = "options___options_0.0.6.tgz"; - path = fetchurl { - name = "options___options_0.0.6.tgz"; - url = "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz"; - sha1 = "ec22d312806bb53e731773e7cdaefcf1c643128f"; - }; - } - - { - name = "orchestrator___orchestrator_0.3.8.tgz"; - path = fetchurl { - name = "orchestrator___orchestrator_0.3.8.tgz"; - url = "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz"; - sha1 = "14e7e9e2764f7315fbac184e506c7aa6df94ad7e"; - }; - } - - { - name = "ordered_ast_traverse___ordered_ast_traverse_1.1.1.tgz"; - path = fetchurl { - name = "ordered_ast_traverse___ordered_ast_traverse_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/ordered-ast-traverse/-/ordered-ast-traverse-1.1.1.tgz"; - sha1 = "6843a170bc0eee8b520cc8ddc1ddd3aa30fa057c"; - }; - } - - { - name = "ordered_esprima_props___ordered_esprima_props_1.1.0.tgz"; - path = fetchurl { - name = "ordered_esprima_props___ordered_esprima_props_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/ordered-esprima-props/-/ordered-esprima-props-1.1.0.tgz"; - sha1 = "a9827086df5f010aa60e9bd02b6e0335cea2ffcb"; - }; - } - - { - name = "ordered_read_streams___ordered_read_streams_0.1.0.tgz"; - path = fetchurl { - name = "ordered_read_streams___ordered_read_streams_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz"; - sha1 = "fd565a9af8eb4473ba69b6ed8a34352cb552f126"; - }; - } - - { - name = "os_browserify___os_browserify_0.1.2.tgz"; - path = fetchurl { - name = "os_browserify___os_browserify_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz"; - sha1 = "49ca0293e0b19590a5f5de10c7f265a617d8fe54"; - }; - } - - { - 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_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 = "osenv___osenv_0.0.3.tgz"; - path = fetchurl { - name = "osenv___osenv_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz"; - sha1 = "cd6ad8ddb290915ad9e22765576025d411f29cb6"; - }; - } - - { - name = "p_throttler___p_throttler_0.0.1.tgz"; - path = fetchurl { - name = "p_throttler___p_throttler_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/p-throttler/-/p-throttler-0.0.1.tgz"; - sha1 = "c341e3589ec843852a035e6f88e6c1e96150029b"; - }; - } - - { - name = "package_json___package_json_1.2.0.tgz"; - path = fetchurl { - name = "package_json___package_json_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz"; - sha1 = "c8ecac094227cdf76a316874ed05e27cc939a0e0"; - }; - } - - { - name = "pako___pako_0.2.9.tgz"; - path = fetchurl { - name = "pako___pako_0.2.9.tgz"; - url = "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz"; - sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75"; - }; - } - - { - name = "parents___parents_0.0.2.tgz"; - path = fetchurl { - name = "parents___parents_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/parents/-/parents-0.0.2.tgz"; - sha1 = "67147826e497d40759aaf5ba4c99659b6034d302"; - }; - } - - { - name = "parents___parents_0.0.3.tgz"; - path = fetchurl { - name = "parents___parents_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/parents/-/parents-0.0.3.tgz"; - sha1 = "fa212f024d9fa6318dbb6b4ce676c8be493b9c43"; - }; - } - - { - name = "parse_filepath___parse_filepath_1.0.2.tgz"; - path = fetchurl { - name = "parse_filepath___parse_filepath_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz"; - sha1 = "a632127f53aaf3d15876f5872f3ffac763d6c891"; - }; - } - - { - 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 = "parse_node_version___parse_node_version_1.0.1.tgz"; - path = fetchurl { - name = "parse_node_version___parse_node_version_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz"; - sha1 = "e2b5dbede00e7fa9bc363607f53327e8b073189b"; - }; - } - - { - name = "parse_passwd___parse_passwd_1.0.0.tgz"; - path = fetchurl { - name = "parse_passwd___parse_passwd_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz"; - sha1 = "6d5b934a456993b23d37f40a382d6f1666a8e5c6"; - }; - } - - { - name = "parsejson___parsejson_0.0.3.tgz"; - path = fetchurl { - name = "parsejson___parsejson_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz"; - sha1 = "ab7e3759f209ece99437973f7d0f1f64ae0e64ab"; - }; - } - - { - name = "parseqs___parseqs_0.0.5.tgz"; - path = fetchurl { - name = "parseqs___parseqs_0.0.5.tgz"; - url = "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz"; - sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d"; - }; - } - - { - name = "parseuri___parseuri_0.0.5.tgz"; - path = fetchurl { - name = "parseuri___parseuri_0.0.5.tgz"; - url = "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz"; - sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a"; - }; - } - - { - name = "parseurl___parseurl_1.3.3.tgz"; - path = fetchurl { - name = "parseurl___parseurl_1.3.3.tgz"; - url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz"; - sha1 = "9da19e7bee8d12dff0513ed5b76957793bc2e8d4"; - }; - } - - { - 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.1.tgz"; - path = fetchurl { - name = "path_browserify___path_browserify_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz"; - sha1 = "e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"; - }; - } - - { - 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_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_parse___path_parse_1.0.6.tgz"; - path = fetchurl { - name = "path_parse___path_parse_1.0.6.tgz"; - url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; - sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; - }; - } - - { - name = "path_platform___path_platform_0.0.1.tgz"; - path = fetchurl { - name = "path_platform___path_platform_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/path-platform/-/path-platform-0.0.1.tgz"; - sha1 = "b5585d7c3c463d89aa0060d86611cf1afd617e2a"; - }; - } - - { - name = "path_root_regex___path_root_regex_0.1.2.tgz"; - path = fetchurl { - name = "path_root_regex___path_root_regex_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz"; - sha1 = "bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"; - }; - } - - { - name = "path_root___path_root_0.1.1.tgz"; - path = fetchurl { - name = "path_root___path_root_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz"; - sha1 = "9a4a6814cac1c0cd73360a95f32083c8ea4745b7"; - }; - } - - { - 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 = "pause_stream___pause_stream_0.0.11.tgz"; - path = fetchurl { - name = "pause_stream___pause_stream_0.0.11.tgz"; - url = "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz"; - sha1 = "fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"; - }; - } - - { - 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 = "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 = "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 = "prelude_ls___prelude_ls_1.1.2.tgz"; - path = fetchurl { - name = "prelude_ls___prelude_ls_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz"; - sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; - }; - } - - { - 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_hrtime___pretty_hrtime_1.0.3.tgz"; - path = fetchurl { - name = "pretty_hrtime___pretty_hrtime_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"; - sha1 = "b7e3ea42435a4c9b2759d99e0f201eb195802ee1"; - }; - } - - { - name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; - path = fetchurl { - name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; - sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"; - }; - } - - { - name = "process___process_0.7.0.tgz"; - path = fetchurl { - name = "process___process_0.7.0.tgz"; - url = "https://registry.yarnpkg.com/process/-/process-0.7.0.tgz"; - sha1 = "c52208161a34adf3812344ae85d3e6150469389d"; - }; - } - - { - name = "process___process_0.5.2.tgz"; - path = fetchurl { - name = "process___process_0.5.2.tgz"; - url = "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz"; - sha1 = "1638d8a8e34c2f440a91db95ab9aeb677fc185cf"; - }; - } - - { - name = "process___process_0.6.0.tgz"; - path = fetchurl { - name = "process___process_0.6.0.tgz"; - url = "https://registry.yarnpkg.com/process/-/process-0.6.0.tgz"; - sha1 = "7dd9be80ffaaedd4cb628f1827f1cbab6dc0918f"; - }; - } - - { - name = "promise___promise_7.3.1.tgz"; - path = fetchurl { - name = "promise___promise_7.3.1.tgz"; - url = "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz"; - sha1 = "064b72602b18f90f29192b8b1bc418ffd1ebd3bf"; - }; - } - - { - name = "promptly___promptly_0.2.1.tgz"; - path = fetchurl { - name = "promptly___promptly_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/promptly/-/promptly-0.2.1.tgz"; - sha1 = "6444e7ca4dbd9899e7eeb5ec3922827ebdc22b3b"; - }; - } - - { - 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 = "psl___psl_1.8.0.tgz"; - path = fetchurl { - name = "psl___psl_1.8.0.tgz"; - url = "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz"; - sha1 = "9326f8bcfb013adcc005fdff056acce020e51c24"; - }; - } - - { - name = "pug_attrs___pug_attrs_2.0.4.tgz"; - path = fetchurl { - name = "pug_attrs___pug_attrs_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.4.tgz"; - sha1 = "b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336"; - }; - } - - { - name = "pug_code_gen___pug_code_gen_2.0.2.tgz"; - path = fetchurl { - name = "pug_code_gen___pug_code_gen_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.2.tgz"; - sha1 = "ad0967162aea077dcf787838d94ed14acb0217c2"; - }; - } - - { - name = "pug_error___pug_error_1.3.3.tgz"; - path = fetchurl { - name = "pug_error___pug_error_1.3.3.tgz"; - url = "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.3.tgz"; - sha1 = "f342fb008752d58034c185de03602dd9ffe15fa6"; - }; - } - - { - name = "pug_filters___pug_filters_3.1.1.tgz"; - path = fetchurl { - name = "pug_filters___pug_filters_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.1.tgz"; - sha1 = "ab2cc82db9eeccf578bda89130e252a0db026aa7"; - }; - } - - { - name = "pug_lexer___pug_lexer_4.1.0.tgz"; - path = fetchurl { - name = "pug_lexer___pug_lexer_4.1.0.tgz"; - url = "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.1.0.tgz"; - sha1 = "531cde48c7c0b1fcbbc2b85485c8665e31489cfd"; - }; - } - - { - name = "pug_linker___pug_linker_3.0.6.tgz"; - path = fetchurl { - name = "pug_linker___pug_linker_3.0.6.tgz"; - url = "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.6.tgz"; - sha1 = "f5bf218b0efd65ce6670f7afc51658d0f82989fb"; - }; - } - - { - name = "pug_load___pug_load_2.0.12.tgz"; - path = fetchurl { - name = "pug_load___pug_load_2.0.12.tgz"; - url = "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.12.tgz"; - sha1 = "d38c85eb85f6e2f704dea14dcca94144d35d3e7b"; - }; - } - - { - name = "pug_parser___pug_parser_5.0.1.tgz"; - path = fetchurl { - name = "pug_parser___pug_parser_5.0.1.tgz"; - url = "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.1.tgz"; - sha1 = "03e7ada48b6840bd3822f867d7d90f842d0ffdc9"; - }; - } - - { - name = "pug_runtime___pug_runtime_2.0.5.tgz"; - path = fetchurl { - name = "pug_runtime___pug_runtime_2.0.5.tgz"; - url = "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.5.tgz"; - sha1 = "6da7976c36bf22f68e733c359240d8ae7a32953a"; - }; - } - - { - name = "pug_strip_comments___pug_strip_comments_1.0.4.tgz"; - path = fetchurl { - name = "pug_strip_comments___pug_strip_comments_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz"; - sha1 = "cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8"; - }; - } - - { - name = "pug_walk___pug_walk_1.1.8.tgz"; - path = fetchurl { - name = "pug_walk___pug_walk_1.1.8.tgz"; - url = "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.8.tgz"; - sha1 = "b408f67f27912f8c21da2f45b7230c4bd2a5ea7a"; - }; - } - - { - name = "pug___pug_2.0.4.tgz"; - path = fetchurl { - name = "pug___pug_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/pug/-/pug-2.0.4.tgz"; - sha1 = "ee7682ec0a60494b38d48a88f05f3b0ac931377d"; - }; - } - - { - 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_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 = "punycode___punycode_1.2.4.tgz"; - path = fetchurl { - name = "punycode___punycode_1.2.4.tgz"; - url = "https://registry.yarnpkg.com/punycode/-/punycode-1.2.4.tgz"; - sha1 = "54008ac972aec74175def9cba6df7fa9d3918740"; - }; - } - - { - 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 = "q___q_0.9.7.tgz"; - path = fetchurl { - name = "q___q_0.9.7.tgz"; - url = "https://registry.yarnpkg.com/q/-/q-0.9.7.tgz"; - sha1 = "4de2e6cb3b29088c9e4cbc03bf9d42fb96ce2f75"; - }; - } - - { - name = "q___q_1.0.1.tgz"; - path = fetchurl { - name = "q___q_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz"; - sha1 = "11872aeedee89268110b10a718448ffb10112a14"; - }; - } - - { - name = "qs___qs_5.2.0.tgz"; - path = fetchurl { - name = "qs___qs_5.2.0.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz"; - sha1 = "a9f31142af468cb72b25b30136ba2456834916be"; - }; - } - - { - name = "qs___qs_6.7.0.tgz"; - path = fetchurl { - name = "qs___qs_6.7.0.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz"; - sha1 = "41dc1a015e3d581f1621776be31afb2876a9b1bc"; - }; - } - - { - name = "qs___qs_0.6.6.tgz"; - path = fetchurl { - name = "qs___qs_0.6.6.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz"; - sha1 = "6e015098ff51968b8a3c819001d5f2c89bc4b107"; - }; - } - - { - name = "qs___qs_1.0.2.tgz"; - path = fetchurl { - name = "qs___qs_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-1.0.2.tgz"; - sha1 = "50a93e2b5af6691c31bcea5dae78ee6ea1903768"; - }; - } - - { - name = "qs___qs_2.2.5.tgz"; - path = fetchurl { - name = "qs___qs_2.2.5.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz"; - sha1 = "1088abaf9dcc0ae5ae45b709e6c6b5888b23923c"; - }; - } - - { - name = "qs___qs_2.3.3.tgz"; - path = fetchurl { - name = "qs___qs_2.3.3.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz"; - sha1 = "e9e85adbe75da0bbe4c8e0476a086290f863b404"; - }; - } - - { - 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 = "querystring_es3___querystring_es3_0.2.0.tgz"; - path = fetchurl { - name = "querystring_es3___querystring_es3_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.0.tgz"; - sha1 = "c365a08a69c443accfeb3a9deab35e3f0abaa476"; - }; - } - - { - 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 = "randomatic___randomatic_3.1.1.tgz"; - path = fetchurl { - name = "randomatic___randomatic_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz"; - sha1 = "b776efc59375984e36c537b2f51a1f0aff0da1ed"; - }; - } - - { - name = "range_parser___range_parser_1.0.3.tgz"; - path = fetchurl { - name = "range_parser___range_parser_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz"; - sha1 = "6872823535c692e2c2a0103826afd82c2e0ff175"; - }; - } - - { - name = "raw_body___raw_body_2.4.0.tgz"; - path = fetchurl { - name = "raw_body___raw_body_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz"; - sha1 = "a1ce6fb9c9bc356ca52e89256ab59059e13d0332"; - }; - } - - { - name = "raw_body___raw_body_2.1.7.tgz"; - path = fetchurl { - name = "raw_body___raw_body_2.1.7.tgz"; - url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz"; - sha1 = "adfeace2e4fb3098058014d08c072dcc59758774"; - }; - } - - { - 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_all_stream___read_all_stream_3.1.0.tgz"; - path = fetchurl { - name = "read_all_stream___read_all_stream_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz"; - sha1 = "35c3e177f2078ef789ee4bfafa4373074eaef4fa"; - }; - } - - { - 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___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___read_1.0.7.tgz"; - path = fetchurl { - name = "read___read_1.0.7.tgz"; - url = "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz"; - sha1 = "b3da19bd052431a97671d44a42634adf710b40c4"; - }; - } - - { - 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_1.1.14.tgz"; - path = fetchurl { - name = "readable_stream___readable_stream_1.1.14.tgz"; - url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz"; - sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9"; - }; - } - - { - name = "readable_stream___readable_stream_2.3.7.tgz"; - path = fetchurl { - name = "readable_stream___readable_stream_2.3.7.tgz"; - url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz"; - sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57"; - }; - } - - { - name = "readdirp___readdirp_2.2.1.tgz"; - path = fetchurl { - name = "readdirp___readdirp_2.2.1.tgz"; - url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; - sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; - }; - } - - { - name = "readline2___readline2_0.1.1.tgz"; - path = fetchurl { - name = "readline2___readline2_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz"; - sha1 = "99443ba6e83b830ef3051bfd7dc241a82728d568"; - }; - } - - { - name = "rechoir___rechoir_0.6.2.tgz"; - path = fetchurl { - name = "rechoir___rechoir_0.6.2.tgz"; - url = "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz"; - sha1 = "85204b54dba82d5742e28c96756ef43af50e3384"; - }; - } - - { - 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 = "redeyed___redeyed_0.4.4.tgz"; - path = fetchurl { - name = "redeyed___redeyed_0.4.4.tgz"; - url = "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz"; - sha1 = "37e990a6f2b21b2a11c2e6a48fd4135698cba97f"; - }; - } - - { - 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 = "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 = "registry_url___registry_url_3.1.0.tgz"; - path = fetchurl { - name = "registry_url___registry_url_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz"; - sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942"; - }; - } - - { - 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 = "repeat_element___repeat_element_1.1.3.tgz"; - path = fetchurl { - name = "repeat_element___repeat_element_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; - sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; - }; - } - - { - name = "repeat_string___repeat_string_0.2.2.tgz"; - path = fetchurl { - name = "repeat_string___repeat_string_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz"; - sha1 = "c7a8d3236068362059a7e4651fc6884e8b1fb4ae"; - }; - } - - { - 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 = "replace_ext___replace_ext_0.0.1.tgz"; - path = fetchurl { - name = "replace_ext___replace_ext_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz"; - sha1 = "29bbd92078a739f0bcce2b4ee41e837953522924"; - }; - } - - { - name = "replace_ext___replace_ext_1.0.0.tgz"; - path = fetchurl { - name = "replace_ext___replace_ext_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz"; - sha1 = "de63128373fcbf7c3ccfa4de5a480c45a67958eb"; - }; - } - - { - name = "replacestream___replacestream_4.0.3.tgz"; - path = fetchurl { - name = "replacestream___replacestream_4.0.3.tgz"; - url = "https://registry.yarnpkg.com/replacestream/-/replacestream-4.0.3.tgz"; - sha1 = "3ee5798092be364b1cdb1484308492cb3dff2f36"; - }; - } - - { - name = "request_progress___request_progress_0.3.1.tgz"; - path = fetchurl { - name = "request_progress___request_progress_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.1.tgz"; - sha1 = "0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a"; - }; - } - - { - name = "request_replay___request_replay_0.2.0.tgz"; - path = fetchurl { - name = "request_replay___request_replay_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/request-replay/-/request-replay-0.2.0.tgz"; - sha1 = "9b693a5d118b39f5c596ead5ed91a26444057f60"; - }; - } - - { - name = "request___request_2.88.2.tgz"; - path = fetchurl { - name = "request___request_2.88.2.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz"; - sha1 = "d73c918731cb5a87da047e207234146f664d12b3"; - }; - } - - { - name = "request___request_2.27.0.tgz"; - path = fetchurl { - name = "request___request_2.27.0.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.27.0.tgz"; - sha1 = "dfb1a224dd3a5a9bade4337012503d710e538668"; - }; - } - - { - name = "request___request_2.36.0.tgz"; - path = fetchurl { - name = "request___request_2.36.0.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.36.0.tgz"; - sha1 = "28c6c04262c7b9ffdd21b9255374517ee6d943f5"; - }; - } - - { - name = "request___request_2.40.0.tgz"; - path = fetchurl { - name = "request___request_2.40.0.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.40.0.tgz"; - sha1 = "4dd670f696f1e6e842e66b4b5e839301ab9beb67"; - }; - } - - { - name = "request___request_2.51.0.tgz"; - path = fetchurl { - name = "request___request_2.51.0.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.51.0.tgz"; - sha1 = "35d00bbecc012e55f907b1bd9e0dbd577bfef26e"; - }; - } - - { - 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_dir___resolve_dir_1.0.1.tgz"; - path = fetchurl { - name = "resolve_dir___resolve_dir_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz"; - sha1 = "79a40644c362be82f26effe739c9bb5382046f43"; - }; - } - - { - 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 = "resolve___resolve_0.6.3.tgz"; - path = fetchurl { - name = "resolve___resolve_0.6.3.tgz"; - url = "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz"; - sha1 = "dd957982e7e736debdf53b58a4dd91754575dd46"; - }; - } - - { - name = "resolve___resolve_1.1.7.tgz"; - path = fetchurl { - name = "resolve___resolve_1.1.7.tgz"; - url = "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz"; - sha1 = "203114d82ad2c5ed9e8e0411b3932875e889e97b"; - }; - } - - { - name = "resolve___resolve_1.15.1.tgz"; - path = fetchurl { - name = "resolve___resolve_1.15.1.tgz"; - url = "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz"; - sha1 = "27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"; - }; - } - - { - name = "resolve___resolve_0.3.1.tgz"; - path = fetchurl { - name = "resolve___resolve_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/resolve/-/resolve-0.3.1.tgz"; - sha1 = "34c63447c664c70598d1c9b126fc43b2a24310a4"; - }; - } - - { - 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 = "retry___retry_0.6.1.tgz"; - path = fetchurl { - name = "retry___retry_0.6.1.tgz"; - url = "https://registry.yarnpkg.com/retry/-/retry-0.6.1.tgz"; - sha1 = "fdc90eed943fde11b893554b8cc63d0e899ba918"; - }; - } - - { - name = "rfile___rfile_1.0.0.tgz"; - path = fetchurl { - name = "rfile___rfile_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/rfile/-/rfile-1.0.0.tgz"; - sha1 = "59708cf90ca1e74c54c3cfc5c36fdb9810435261"; - }; - } - - { - 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.7.1.tgz"; - path = fetchurl { - name = "rimraf___rimraf_2.7.1.tgz"; - url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz"; - sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec"; - }; - } - - { - name = "rimraf___rimraf_2.2.8.tgz"; - path = fetchurl { - name = "rimraf___rimraf_2.2.8.tgz"; - url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz"; - sha1 = "e439be2aaee327321952730f99a8929e4fc50582"; - }; - } - - { - name = "rimraf___rimraf_2.4.5.tgz"; - path = fetchurl { - name = "rimraf___rimraf_2.4.5.tgz"; - url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz"; - sha1 = "ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"; - }; - } - - { - name = "ruglify___ruglify_1.0.0.tgz"; - path = fetchurl { - name = "ruglify___ruglify_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/ruglify/-/ruglify-1.0.0.tgz"; - sha1 = "dc8930e2a9544a274301cc9972574c0d0986b675"; - }; - } - - { - name = "run_sequence___run_sequence_1.1.5.tgz"; - path = fetchurl { - name = "run_sequence___run_sequence_1.1.5.tgz"; - url = "https://registry.yarnpkg.com/run-sequence/-/run-sequence-1.1.5.tgz"; - sha1 = "556bd47eb47877349e36c9c582748897db7be4f7"; - }; - } - - { - name = "safe_buffer___safe_buffer_5.2.0.tgz"; - path = fetchurl { - name = "safe_buffer___safe_buffer_5.2.0.tgz"; - url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz"; - sha1 = "b74daec49b1148f88c64b68d49b1e815c1f2f519"; - }; - } - - { - 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 = "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 = "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 = "semver_diff___semver_diff_2.1.0.tgz"; - path = fetchurl { - name = "semver_diff___semver_diff_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz"; - sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"; - }; - } - - { - name = "semver___semver_5.7.1.tgz"; - path = fetchurl { - name = "semver___semver_5.7.1.tgz"; - url = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz"; - sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7"; - }; - } - - { - name = "semver___semver_4.3.6.tgz"; - path = fetchurl { - name = "semver___semver_4.3.6.tgz"; - url = "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz"; - sha1 = "300bc6e0e86374f7ba61068b5b1ecd57fc6532da"; - }; - } - - { - name = "semver___semver_2.3.2.tgz"; - path = fetchurl { - name = "semver___semver_2.3.2.tgz"; - url = "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz"; - sha1 = "b9848f25d6cf36333073ec9ef8856d42f1233e52"; - }; - } - - { - 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.13.2.tgz"; - path = fetchurl { - name = "send___send_0.13.2.tgz"; - url = "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz"; - sha1 = "765e7607c8055452bba6f0b052595350986036de"; - }; - } - - { - name = "sequencify___sequencify_0.0.7.tgz"; - path = fetchurl { - name = "sequencify___sequencify_0.0.7.tgz"; - url = "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz"; - sha1 = "90cff19d02e07027fd767f5ead3e7b95d1e7380c"; - }; - } - - { - name = "serve_static___serve_static_1.10.3.tgz"; - path = fetchurl { - name = "serve_static___serve_static_1.10.3.tgz"; - url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz"; - sha1 = "ce5a6ecd3101fed5ec09827dac22a9c29bfb0535"; - }; - } - - { - 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_value___set_value_2.0.1.tgz"; - path = fetchurl { - name = "set_value___set_value_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz"; - sha1 = "a18d40530e6f07de4228c7defe4227af8cad005b"; - }; - } - - { - name = "setprototypeof___setprototypeof_1.1.1.tgz"; - path = fetchurl { - name = "setprototypeof___setprototypeof_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz"; - sha1 = "7e95acb24aa92f5885e0abef5ba131330d4ae683"; - }; - } - - { - name = "shallow_copy___shallow_copy_0.0.1.tgz"; - path = fetchurl { - name = "shallow_copy___shallow_copy_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz"; - sha1 = "415f42702d73d810330292cc5ee86eae1a11a170"; - }; - } - - { - name = "shell_quote___shell_quote_0.0.1.tgz"; - path = fetchurl { - name = "shell_quote___shell_quote_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-0.0.1.tgz"; - sha1 = "1a41196f3c0333c482323593d6886ecf153dd986"; - }; - } - - { - name = "shell_quote___shell_quote_1.4.3.tgz"; - path = fetchurl { - name = "shell_quote___shell_quote_1.4.3.tgz"; - url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.3.tgz"; - sha1 = "952c44e0b1ed9013ef53958179cc643e8777466b"; - }; - } - - { - name = "sigmund___sigmund_1.0.1.tgz"; - path = fetchurl { - name = "sigmund___sigmund_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz"; - sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; - }; - } - - { - name = "signal_exit___signal_exit_3.0.3.tgz"; - path = fetchurl { - name = "signal_exit___signal_exit_3.0.3.tgz"; - url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz"; - sha1 = "a1410c2edd8f077b08b4e253c8eacfcaf057461c"; - }; - } - - { - name = "simple_fmt___simple_fmt_0.1.0.tgz"; - path = fetchurl { - name = "simple_fmt___simple_fmt_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz"; - sha1 = "191bf566a59e6530482cb25ab53b4a8dc85c3a6b"; - }; - } - - { - name = "simple_is___simple_is_0.2.0.tgz"; - path = fetchurl { - name = "simple_is___simple_is_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz"; - sha1 = "2abb75aade39deb5cc815ce10e6191164850baf0"; - }; - } - - { - 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_0.2.4.tgz"; - path = fetchurl { - name = "sntp___sntp_0.2.4.tgz"; - url = "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz"; - sha1 = "fb885f18b0f3aad189f824862536bceeec750900"; - }; - } - - { - name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; - path = fetchurl { - name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; - url = "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz"; - sha1 = "cb6d4bb8bec81e1078b99677f9ced0046066bb8b"; - }; - } - - { - name = "socket.io_client___socket.io_client_1.7.4.tgz"; - path = fetchurl { - name = "socket.io_client___socket.io_client_1.7.4.tgz"; - url = "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz"; - sha1 = "ec9f820356ed99ef6d357f0756d648717bdd4281"; - }; - } - - { - name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; - path = fetchurl { - name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; - url = "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz"; - sha1 = "dd532025103ce429697326befd64005fcfe5b4a0"; - }; - } - - { - name = "socket.io___socket.io_1.7.4.tgz"; - path = fetchurl { - name = "socket.io___socket.io_1.7.4.tgz"; - url = "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz"; - sha1 = "2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00"; - }; - } - - { - name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; - path = fetchurl { - name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; - url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; - sha1 = "190866bece7553e1f8f267a2ee82c606b5509a1a"; - }; - } - - { - 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.34.tgz"; - path = fetchurl { - name = "source_map___source_map_0.1.34.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz"; - sha1 = "a7cfe89aec7b1682c3b198d0acfb47d7d090566b"; - }; - } - - { - 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 = "source_map___source_map_0.2.0.tgz"; - path = fetchurl { - name = "source_map___source_map_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz"; - sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"; - }; - } - - { - name = "source_map___source_map_0.3.0.tgz"; - path = fetchurl { - name = "source_map___source_map_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.3.0.tgz"; - sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9"; - }; - } - - { - name = "sparkles___sparkles_1.0.1.tgz"; - path = fetchurl { - name = "sparkles___sparkles_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz"; - sha1 = "008db65edce6c50eec0c5e228e1945061dd0437c"; - }; - } - - { - name = "spdx_correct___spdx_correct_3.1.0.tgz"; - path = fetchurl { - name = "spdx_correct___spdx_correct_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz"; - sha1 = "fb83e504445268f154b074e218c87c003cd31df4"; - }; - } - - { - name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; - path = fetchurl { - name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz"; - sha1 = "2ea450aee74f2a89bfb94519c07fcd6f41322977"; - }; - } - - { - 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.5.tgz"; - path = fetchurl { - name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz"; - url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz"; - sha1 = "3694b5804567a458d3c8045842a6358632f62654"; - }; - } - - { - 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 = "split___split_0.3.3.tgz"; - path = fetchurl { - name = "split___split_0.3.3.tgz"; - url = "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz"; - sha1 = "cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"; - }; - } - - { - name = "split___split_1.0.1.tgz"; - path = fetchurl { - name = "split___split_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz"; - sha1 = "605bd9be303aa59fb35f9229fbea0ddec9ea07d9"; - }; - } - - { - 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.16.1.tgz"; - path = fetchurl { - name = "sshpk___sshpk_1.16.1.tgz"; - url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz"; - sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877"; - }; - } - - { - name = "stable___stable_0.1.8.tgz"; - path = fetchurl { - name = "stable___stable_0.1.8.tgz"; - url = "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz"; - sha1 = "836eb3c8382fe2936feaf544631017ce7d47a3cf"; - }; - } - - { - 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.2.1.tgz"; - path = fetchurl { - name = "statuses___statuses_1.2.1.tgz"; - url = "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz"; - sha1 = "dded45cc18256d51ed40aec142489d5c61026d28"; - }; - } - - { - name = "stdout_stream___stdout_stream_1.4.1.tgz"; - path = fetchurl { - name = "stdout_stream___stdout_stream_1.4.1.tgz"; - url = "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz"; - sha1 = "5ac174cdd5cd726104aa0c0b2bd83815d8d535de"; - }; - } - - { - name = "stream_browserify___stream_browserify_0.1.3.tgz"; - path = fetchurl { - name = "stream_browserify___stream_browserify_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-0.1.3.tgz"; - sha1 = "95cf1b369772e27adaf46352265152689c6c4be9"; - }; - } - - { - name = "stream_combiner___stream_combiner_0.2.2.tgz"; - path = fetchurl { - name = "stream_combiner___stream_combiner_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz"; - sha1 = "aec8cbac177b56b6f4fa479ced8c1912cee52858"; - }; - } - - { - name = "stream_combiner___stream_combiner_0.0.4.tgz"; - path = fetchurl { - name = "stream_combiner___stream_combiner_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz"; - sha1 = "4d5e433c185261dde623ca3f44c586bcf5c4ad14"; - }; - } - - { - name = "stream_combiner___stream_combiner_0.1.0.tgz"; - path = fetchurl { - name = "stream_combiner___stream_combiner_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.1.0.tgz"; - sha1 = "0dc389a3c203f8f4d56368f95dde52eb9269b5be"; - }; - } - - { - name = "stream_consume___stream_consume_0.1.1.tgz"; - path = fetchurl { - name = "stream_consume___stream_consume_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz"; - sha1 = "d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48"; - }; - } - - { - name = "stream_shift___stream_shift_1.0.1.tgz"; - path = fetchurl { - name = "stream_shift___stream_shift_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz"; - sha1 = "d7088281559ab2778424279b0877da3c392d5a3d"; - }; - } - - { - name = "string_length___string_length_1.0.1.tgz"; - path = fetchurl { - name = "string_length___string_length_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz"; - sha1 = "56970fb1c38558e9e70b728bf3de269ac45adfac"; - }; - } - - { - 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_0.0.1.tgz"; - path = fetchurl { - name = "string_decoder___string_decoder_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.0.1.tgz"; - sha1 = "f5472d0a8d1650ec823752d24e6fd627b39bf141"; - }; - } - - { - 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 = "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 = "stringify_object___stringify_object_0.2.1.tgz"; - path = fetchurl { - name = "stringify_object___stringify_object_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-0.2.1.tgz"; - sha1 = "b58be50b3ff5f371038c545d4332656bfded5620"; - }; - } - - { - name = "stringmap___stringmap_0.2.2.tgz"; - path = fetchurl { - name = "stringmap___stringmap_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz"; - sha1 = "556c137b258f942b8776f5b2ef582aa069d7d1b1"; - }; - } - - { - name = "stringset___stringset_0.2.1.tgz"; - path = fetchurl { - name = "stringset___stringset_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz"; - sha1 = "ef259c4e349344377fcd1c913dd2e848c9c042b5"; - }; - } - - { - 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_0.3.0.tgz"; - path = fetchurl { - name = "strip_ansi___strip_ansi_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz"; - sha1 = "25f48ea22ca79187f3174a4db8759347bb126220"; - }; - } - - { - name = "strip_ansi___strip_ansi_2.0.1.tgz"; - path = fetchurl { - name = "strip_ansi___strip_ansi_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz"; - sha1 = "df62c1aa94ed2f114e1d0f21fd1d50482b79a60e"; - }; - } - - { - 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_ansi___strip_ansi_0.1.1.tgz"; - path = fetchurl { - name = "strip_ansi___strip_ansi_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz"; - sha1 = "39e8a98d044d150660abe4a6808acf70bb7bc991"; - }; - } - - { - name = "strip_bom___strip_bom_1.0.0.tgz"; - path = fetchurl { - name = "strip_bom___strip_bom_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz"; - sha1 = "85b8862f3844b5a6d5ec8467a93598173a36f794"; - }; - } - - { - 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_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 = "subarg___subarg_0.0.1.tgz"; - path = fetchurl { - name = "subarg___subarg_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/subarg/-/subarg-0.0.1.tgz"; - sha1 = "3d56b07dacfbc45bbb63f7672b43b63e46368e3a"; - }; - } - - { - name = "supports_color___supports_color_0.2.0.tgz"; - path = fetchurl { - name = "supports_color___supports_color_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz"; - sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a"; - }; - } - - { - 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_7.1.0.tgz"; - path = fetchurl { - name = "supports_color___supports_color_7.1.0.tgz"; - url = "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz"; - sha1 = "68e32591df73e25ad1c4b49108a2ec507962bfd1"; - }; - } - - { - name = "syntax_error___syntax_error_1.1.6.tgz"; - path = fetchurl { - name = "syntax_error___syntax_error_1.1.6.tgz"; - url = "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.1.6.tgz"; - sha1 = "b4549706d386cc1c1dc7c2423f18579b6cade710"; - }; - } - - { - name = "tar___tar_2.2.2.tgz"; - path = fetchurl { - name = "tar___tar_2.2.2.tgz"; - url = "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz"; - sha1 = "0ca8848562c7299b8b446ff6a4d60cdbb23edc40"; - }; - } - - { - name = "tar___tar_4.4.13.tgz"; - path = fetchurl { - name = "tar___tar_4.4.13.tgz"; - url = "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz"; - sha1 = "43b364bc52888d555298637b10d60790254ab525"; - }; - } - - { - name = "tar___tar_0.1.20.tgz"; - path = fetchurl { - name = "tar___tar_0.1.20.tgz"; - url = "https://registry.yarnpkg.com/tar/-/tar-0.1.20.tgz"; - sha1 = "42940bae5b5f22c74483699126f9f3f27449cb13"; - }; - } - - { - name = "ternary_stream___ternary_stream_2.1.1.tgz"; - path = fetchurl { - name = "ternary_stream___ternary_stream_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-2.1.1.tgz"; - sha1 = "4ad64b98668d796a085af2c493885a435a8a8bfc"; - }; - } - - { - name = "textextensions___textextensions_1.0.2.tgz"; - path = fetchurl { - name = "textextensions___textextensions_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/textextensions/-/textextensions-1.0.2.tgz"; - sha1 = "65486393ee1f2bb039a60cbba05b0b68bd9501d2"; - }; - } - - { - name = "throttleit___throttleit_0.0.2.tgz"; - path = fetchurl { - name = "throttleit___throttleit_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz"; - sha1 = "cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"; - }; - } - - { - name = "through2___through2_0.4.2.tgz"; - path = fetchurl { - name = "through2___through2_0.4.2.tgz"; - url = "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz"; - sha1 = "dbf5866031151ec8352bb6c4db64a2292a840b9b"; - }; - } - - { - name = "through2___through2_0.5.1.tgz"; - path = fetchurl { - name = "through2___through2_0.5.1.tgz"; - url = "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz"; - sha1 = "dfdd012eb9c700e2323fd334f38ac622ab372da7"; - }; - } - - { - name = "through2___through2_0.6.5.tgz"; - path = fetchurl { - name = "through2___through2_0.6.5.tgz"; - url = "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz"; - sha1 = "41ab9c67b29d57209071410e1d7a7a968cd3ad48"; - }; - } - - { - name = "through2___through2_2.0.5.tgz"; - path = fetchurl { - name = "through2___through2_2.0.5.tgz"; - url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; - sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; - }; - } - - { - name = "through___through_2.3.8.tgz"; - path = fetchurl { - name = "through___through_2.3.8.tgz"; - url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; - sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; - }; - } - - { - name = "through___through_2.2.7.tgz"; - path = fetchurl { - name = "through___through_2.2.7.tgz"; - url = "https://registry.yarnpkg.com/through/-/through-2.2.7.tgz"; - sha1 = "6e8e21200191d4eb6a99f6f010df46aa1c6eb2bd"; - }; - } - - { - name = "tildify___tildify_1.2.0.tgz"; - path = fetchurl { - name = "tildify___tildify_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz"; - sha1 = "dcec03f55dca9b7aa3e5b04f21817eb56e63588a"; - }; - } - - { - name = "time_stamp___time_stamp_1.1.0.tgz"; - path = fetchurl { - name = "time_stamp___time_stamp_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz"; - sha1 = "764a5a11af50561921b133f3b44e618687e0f5c3"; - }; - } - - { - name = "timed_out___timed_out_2.0.0.tgz"; - path = fetchurl { - name = "timed_out___timed_out_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz"; - sha1 = "f38b0ae81d3747d628001f41dafc652ace671c0a"; - }; - } - - { - name = "timers_browserify___timers_browserify_1.0.3.tgz"; - path = fetchurl { - name = "timers_browserify___timers_browserify_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.0.3.tgz"; - sha1 = "ffba70c9c12eed916fd67318e629ac6f32295551"; - }; - } - - { - name = "timers_ext___timers_ext_0.1.7.tgz"; - path = fetchurl { - name = "timers_ext___timers_ext_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz"; - sha1 = "6f57ad8578e07a3fb9f91d9387d65647555e25c6"; - }; - } - - { - name = "tmp___tmp_0.0.23.tgz"; - path = fetchurl { - name = "tmp___tmp_0.0.23.tgz"; - url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.23.tgz"; - sha1 = "de874aa5e974a85f0a32cdfdbd74663cb3bd9c74"; - }; - } - - { - name = "tmp___tmp_0.0.33.tgz"; - path = fetchurl { - name = "tmp___tmp_0.0.33.tgz"; - url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; - sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; - }; - } - - { - name = "to_array___to_array_0.1.4.tgz"; - path = fetchurl { - name = "to_array___to_array_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz"; - sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"; - }; - } - - { - 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 = "toidentifier___toidentifier_1.0.0.tgz"; - path = fetchurl { - name = "toidentifier___toidentifier_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz"; - sha1 = "7e1be3470f1e77948bc43d94a3c8f4d7752ba553"; - }; - } - - { - name = "token_stream___token_stream_0.0.1.tgz"; - path = fetchurl { - name = "token_stream___token_stream_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz"; - sha1 = "ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"; - }; - } - - { - name = "touch___touch_0.0.2.tgz"; - path = fetchurl { - name = "touch___touch_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/touch/-/touch-0.0.2.tgz"; - sha1 = "a65a777795e5cbbe1299499bdc42281ffb21b5f4"; - }; - } - - { - name = "tough_cookie___tough_cookie_4.0.0.tgz"; - path = fetchurl { - name = "tough_cookie___tough_cookie_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz"; - sha1 = "d822234eeca882f991f0f908824ad2622ddbece4"; - }; - } - - { - name = "tough_cookie___tough_cookie_2.5.0.tgz"; - path = fetchurl { - name = "tough_cookie___tough_cookie_2.5.0.tgz"; - url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz"; - sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"; - }; - } - - { - name = "traverse___traverse_0.3.9.tgz"; - path = fetchurl { - name = "traverse___traverse_0.3.9.tgz"; - url = "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz"; - sha1 = "717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"; - }; - } - - { - 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 = "true_case_path___true_case_path_1.0.3.tgz"; - path = fetchurl { - name = "true_case_path___true_case_path_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz"; - sha1 = "f813b5a8c86b40da59606722b144e3225799f47d"; - }; - } - - { - name = "tryor___tryor_0.1.2.tgz"; - path = fetchurl { - name = "tryor___tryor_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz"; - sha1 = "8145e4ca7caff40acde3ccf946e8b8bb75b4172b"; - }; - } - - { - name = "tty_browserify___tty_browserify_0.0.1.tgz"; - path = fetchurl { - name = "tty_browserify___tty_browserify_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz"; - sha1 = "3f05251ee17904dfd0677546670db9651682b811"; - }; - } - - { - 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 = "tunnel_agent___tunnel_agent_0.3.0.tgz"; - path = fetchurl { - name = "tunnel_agent___tunnel_agent_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.3.0.tgz"; - sha1 = "ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee"; - }; - } - - { - name = "tunnel_agent___tunnel_agent_0.4.3.tgz"; - path = fetchurl { - name = "tunnel_agent___tunnel_agent_0.4.3.tgz"; - url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz"; - sha1 = "6373db76909fe570e08d73583365ed828a74eeeb"; - }; - } - - { - 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_check___type_check_0.3.2.tgz"; - path = fetchurl { - name = "type_check___type_check_0.3.2.tgz"; - url = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz"; - sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; - }; - } - - { - name = "type_is___type_is_1.6.18.tgz"; - path = fetchurl { - name = "type_is___type_is_1.6.18.tgz"; - url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz"; - sha1 = "4e552cd05df09467dcbc4ef739de89f2cf37c131"; - }; - } - - { - name = "type___type_1.2.0.tgz"; - path = fetchurl { - name = "type___type_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz"; - sha1 = "848dd7698dafa3e54a6c479e759c4bc3f18847a0"; - }; - } - - { - name = "type___type_2.0.0.tgz"; - path = fetchurl { - name = "type___type_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz"; - sha1 = "5f16ff6ef2eb44f260494dae271033b29c09a9c3"; - }; - } - - { - name = "typedarray___typedarray_0.0.6.tgz"; - path = fetchurl { - name = "typedarray___typedarray_0.0.6.tgz"; - url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz"; - sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; - }; - } - - { - name = "uglify_js___uglify_js_2.5.0.tgz"; - path = fetchurl { - name = "uglify_js___uglify_js_2.5.0.tgz"; - url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.5.0.tgz"; - sha1 = "4ab5d65a4730ecb7a4fb62d3f499e2054d98fba1"; - }; - } - - { - 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_js___uglify_js_3.8.1.tgz"; - path = fetchurl { - name = "uglify_js___uglify_js_3.8.1.tgz"; - url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.1.tgz"; - sha1 = "43bb15ce6f545eaa0a64c49fd29375ea09fa0f93"; - }; - } - - { - name = "uglify_js___uglify_js_2.2.5.tgz"; - path = fetchurl { - name = "uglify_js___uglify_js_2.2.5.tgz"; - url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.2.5.tgz"; - sha1 = "a6e02a70d839792b9780488b7b8b184c095c99c7"; - }; - } - - { - name = "uglify_js___uglify_js_2.3.6.tgz"; - path = fetchurl { - name = "uglify_js___uglify_js_2.3.6.tgz"; - url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz"; - sha1 = "fa0984770b428b7a9b2a8058f46355d14fef211a"; - }; - } - - { - name = "uglify_js___uglify_js_2.4.24.tgz"; - path = fetchurl { - name = "uglify_js___uglify_js_2.4.24.tgz"; - url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.4.24.tgz"; - sha1 = "fad5755c1e1577658bb06ff9ab6e548c95bebd6e"; - }; - } - - { - name = "uglify_save_license___uglify_save_license_0.4.1.tgz"; - path = fetchurl { - name = "uglify_save_license___uglify_save_license_0.4.1.tgz"; - url = "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz"; - sha1 = "95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1"; - }; - } - - { - 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 = "ultron___ultron_1.0.2.tgz"; - path = fetchurl { - name = "ultron___ultron_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz"; - sha1 = "ace116ab557cd197386a4e88f4685378c8b2e4fa"; - }; - } - - { - name = "umd___umd_2.0.0.tgz"; - path = fetchurl { - name = "umd___umd_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/umd/-/umd-2.0.0.tgz"; - sha1 = "749683b0d514728ae0e1b6195f5774afc0ad4f8f"; - }; - } - - { - name = "unc_path_regex___unc_path_regex_0.1.2.tgz"; - path = fetchurl { - name = "unc_path_regex___unc_path_regex_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz"; - sha1 = "e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"; - }; - } - - { - name = "underscore.string___underscore.string_2.4.0.tgz"; - path = fetchurl { - name = "underscore.string___underscore.string_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz"; - sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b"; - }; - } - - { - name = "underscore___underscore_1.7.0.tgz"; - path = fetchurl { - name = "underscore___underscore_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz"; - sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209"; - }; - } - - { - name = "union_value___union_value_1.0.1.tgz"; - path = fetchurl { - name = "union_value___union_value_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz"; - sha1 = "0b6fe7b835aecda61c6ea4d4f02c14221e109847"; - }; - } - - { - name = "unique_stream___unique_stream_1.0.0.tgz"; - path = fetchurl { - name = "unique_stream___unique_stream_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz"; - sha1 = "d59a4a75427447d9aa6c91e70263f8d26a4b104b"; - }; - } - - { - name = "universalify___universalify_0.1.2.tgz"; - path = fetchurl { - name = "universalify___universalify_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz"; - sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66"; - }; - } - - { - 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 = "update_notifier___update_notifier_0.2.2.tgz"; - path = fetchurl { - name = "update_notifier___update_notifier_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.2.2.tgz"; - sha1 = "e69b3a784b4e686a2acd98f5e66944591996e187"; - }; - } - - { - 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___url_0.10.3.tgz"; - path = fetchurl { - name = "url___url_0.10.3.tgz"; - url = "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz"; - sha1 = "021e4d9c7705f21bbf37d03ceb58767402774c64"; - }; - } - - { - 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 = "user_home___user_home_1.1.1.tgz"; - path = fetchurl { - name = "user_home___user_home_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz"; - sha1 = "2b5be23a32b63a7c9deb8d0f28d485724a3df190"; - }; - } - - { - name = "useragent___useragent_2.3.0.tgz"; - path = fetchurl { - name = "useragent___useragent_2.3.0.tgz"; - url = "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz"; - sha1 = "217f943ad540cb2128658ab23fc960f6a88c9972"; - }; - } - - { - 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 = "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_2.0.3.tgz"; - path = fetchurl { - name = "uuid___uuid_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz"; - sha1 = "67e2e863797215530dff318e5bf9dcebfd47b21a"; - }; - } - - { - name = "uuid___uuid_3.4.0.tgz"; - path = fetchurl { - name = "uuid___uuid_3.4.0.tgz"; - url = "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz"; - sha1 = "b23e4358afa8a202fe7a100af1f5f883f02007ee"; - }; - } - - { - name = "uuid___uuid_1.4.2.tgz"; - path = fetchurl { - name = "uuid___uuid_1.4.2.tgz"; - url = "https://registry.yarnpkg.com/uuid/-/uuid-1.4.2.tgz"; - sha1 = "453019f686966a6df83cdc5244e7c990ecc332fc"; - }; - } - - { - name = "v8flags___v8flags_2.1.1.tgz"; - path = fetchurl { - name = "v8flags___v8flags_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz"; - sha1 = "aab1a1fa30d45f88dd321148875ac02c0b55e5b4"; - }; - } - - { - name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; - path = fetchurl { - name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; - url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; - sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; - }; - } - - { - 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 = "vinyl_fs___vinyl_fs_0.3.14.tgz"; - path = fetchurl { - name = "vinyl_fs___vinyl_fs_0.3.14.tgz"; - url = "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz"; - sha1 = "9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"; - }; - } - - { - name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.1.4.tgz"; - path = fetchurl { - name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz"; - sha1 = "c5fcbd43e2f238423c2dc98bddd6f79b72bc345b"; - }; - } - - { - name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.2.1.tgz"; - path = fetchurl { - name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz"; - sha1 = "ab6549d61d172c2b1b87be5c508d239c8ef87705"; - }; - } - - { - name = "vinyl___vinyl_0.2.3.tgz"; - path = fetchurl { - name = "vinyl___vinyl_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz"; - sha1 = "bca938209582ec5a49ad538a00fa1f125e513252"; - }; - } - - { - name = "vinyl___vinyl_0.4.6.tgz"; - path = fetchurl { - name = "vinyl___vinyl_0.4.6.tgz"; - url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz"; - sha1 = "2f356c87a550a255461f36bbeb2a5ba8bf784847"; - }; - } - - { - name = "vinyl___vinyl_0.5.3.tgz"; - path = fetchurl { - name = "vinyl___vinyl_0.5.3.tgz"; - url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz"; - sha1 = "b0455b38fc5e0cf30d4325132e461970c2091cde"; - }; - } - - { - name = "vinyl___vinyl_1.2.0.tgz"; - path = fetchurl { - name = "vinyl___vinyl_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz"; - sha1 = "5c88036cf565e5df05558bfc911f8656df218884"; - }; - } - - { - name = "vinyl___vinyl_2.2.0.tgz"; - path = fetchurl { - name = "vinyl___vinyl_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz"; - sha1 = "d85b07da96e458d25b2ffe19fece9f2caa13ed86"; - }; - } - - { - 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 = "void_elements___void_elements_2.0.1.tgz"; - path = fetchurl { - name = "void_elements___void_elements_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz"; - sha1 = "c066afb582bb1cb4128d60ea92392e94d5e9dbec"; - }; - } - - { - name = "websocket_driver___websocket_driver_0.7.3.tgz"; - path = fetchurl { - name = "websocket_driver___websocket_driver_0.7.3.tgz"; - url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz"; - sha1 = "a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"; - }; - } - - { - 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 = "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___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 = "which___which_1.0.9.tgz"; - path = fetchurl { - name = "which___which_1.0.9.tgz"; - url = "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz"; - sha1 = "460c1da0f810103d0321a9b633af9e575e64486f"; - }; - } - - { - 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 = "with___with_5.1.1.tgz"; - path = fetchurl { - name = "with___with_5.1.1.tgz"; - url = "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz"; - sha1 = "fa4daa92daf32c4ea94ed453c81f04686b575dfe"; - }; - } - - { - name = "word_wrap___word_wrap_1.2.3.tgz"; - path = fetchurl { - name = "word_wrap___word_wrap_1.2.3.tgz"; - url = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz"; - sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c"; - }; - } - - { - 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 = "wordwrap___wordwrap_1.0.0.tgz"; - path = fetchurl { - name = "wordwrap___wordwrap_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz"; - sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; - }; - } - - { - name = "wordwrap___wordwrap_0.0.3.tgz"; - path = fetchurl { - name = "wordwrap___wordwrap_0.0.3.tgz"; - url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz"; - sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107"; - }; - } - - { - 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 = "ws___ws_1.1.5.tgz"; - path = fetchurl { - name = "ws___ws_1.1.5.tgz"; - url = "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz"; - sha1 = "cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"; - }; - } - - { - name = "wtf_8___wtf_8_1.0.0.tgz"; - path = fetchurl { - name = "wtf_8___wtf_8_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz"; - sha1 = "392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"; - }; - } - - { - name = "xdg_basedir___xdg_basedir_1.0.1.tgz"; - path = fetchurl { - name = "xdg_basedir___xdg_basedir_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-1.0.1.tgz"; - sha1 = "14ff8f63a4fdbcb05d5b6eea22b36f3033b9f04e"; - }; - } - - { - name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; - path = fetchurl { - name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; - url = "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz"; - sha1 = "185a888c04eca46c3e4070d99f7b49de3528992d"; - }; - } - - { - name = "xtend___xtend_4.0.2.tgz"; - path = fetchurl { - name = "xtend___xtend_4.0.2.tgz"; - url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz"; - sha1 = "bb72779f5fa465186b1f438f674fa347fdb5db54"; - }; - } - - { - name = "xtend___xtend_3.0.0.tgz"; - path = fetchurl { - name = "xtend___xtend_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz"; - sha1 = "5cce7407baf642cba7becda568111c493f59665a"; - }; - } - - { - name = "xtend___xtend_2.1.2.tgz"; - path = fetchurl { - name = "xtend___xtend_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz"; - sha1 = "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"; - }; - } - - { - 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.1.1.tgz"; - path = fetchurl { - name = "yallist___yallist_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz"; - sha1 = "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"; - }; - } - - { - 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___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_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"; - }; - } - - { - name = "yargs___yargs_3.5.4.tgz"; - path = fetchurl { - name = "yargs___yargs_3.5.4.tgz"; - url = "https://registry.yarnpkg.com/yargs/-/yargs-3.5.4.tgz"; - sha1 = "d8aff8f665e94c34bd259bdebd1bfaf0ddd35361"; - }; - } - - { - name = "yeast___yeast_0.1.2.tgz"; - path = fetchurl { - name = "yeast___yeast_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz"; - sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419"; - }; - } - ]; -} diff --git a/pkgs/python-packages/buildbot/plugins/default.nix b/pkgs/python-packages/buildbot/plugins/default.nix deleted file mode 100644 index 22a8507..0000000 --- a/pkgs/python-packages/buildbot/plugins/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ callPackage, python }: -{ - buildslist = callPackage ./buildslist { - pythonPackages = python.pkgs; - }; -} diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix deleted file mode 100644 index 441c5bc..0000000 --- a/pkgs/python-packages/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ mylibs, callPackage, python }: -{ - blivet3 = callPackage ./blivet { inherit python; pythonPackages = python.pkgs; }; - buildbot-plugins = callPackage ./buildbot/plugins { inherit python; }; - wokkel = callPackage ./wokkel.nix { pythonPackages = python.pkgs; }; - pymilter = callPackage ./pymilter.nix { pythonPackages = python.pkgs; }; -} diff --git a/pkgs/python-packages/pymilter.nix b/pkgs/python-packages/pymilter.nix deleted file mode 100644 index 736794e..0000000 --- a/pkgs/python-packages/pymilter.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pythonPackages, libmilter }: with pythonPackages; -buildPythonPackage rec { - pname = "pymilter"; - version = "1.0.4"; - src = fetchPypi { - inherit pname version; - sha256 = "1bpcvq7d72q0zi7c8h5knhasywwz9gxc23n9fxmw874n5k8hsn7k"; - }; - doCheck = false; - buildInputs = [ libmilter ]; -} diff --git a/pkgs/python-packages/wokkel.nix b/pkgs/python-packages/wokkel.nix deleted file mode 100644 index 3237f2b..0000000 --- a/pkgs/python-packages/wokkel.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pythonPackages }: with pythonPackages; -buildPythonPackage rec { - pname = "wokkel"; - version = "18.0.0"; - src = fetchPypi { - inherit pname version; - sha256 = "1spq44gg8gsviqx1dvlmjpgfc0wk0jpyx4ap01y2pad1ai9cw016"; - }; - propagatedBuildInputs = [ twisted.extras.tls twisted incremental dateutil ]; - doCheck = false; -} diff --git a/pkgs/rrsync_sudo/default.nix b/pkgs/rrsync_sudo/default.nix deleted file mode 100644 index 7a47320..0000000 --- a/pkgs/rrsync_sudo/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ rrsync }: - -rrsync.overrideAttrs(old: { - patches = old.patches or [] ++ [ ./sudo.patch ]; - postPatch = old.postPatch + '' - substituteInPlace support/rrsync --replace /usr/bin/sudo /run/wrappers/bin/sudo - ''; -}) diff --git a/pkgs/rrsync_sudo/sudo.patch b/pkgs/rrsync_sudo/sudo.patch deleted file mode 100644 index 6de9cc9..0000000 --- a/pkgs/rrsync_sudo/sudo.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/support/rrsync 2015-09-14 01:23:54.000000000 +0200 -+++ b/support/rrsync 2020-02-08 13:55:14.302163313 +0100 -@@ -48,7 +48,7 @@ - - my $command = $ENV{SSH_ORIGINAL_COMMAND}; - die "$0: Not invoked via sshd\n$Usage" unless defined $command; --die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command =~ s/^rsync\s+//; -+die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command =~ s/^sudo rsync\s+//; - die "$0: --server option is not first\n" unless $command =~ /^--server\s/; - our $am_sender = $command =~ /^--server\s+--sender\s/; # Restrictive on purpose! - die "$0 sending to read-only server not allowed\n" if $only eq 'r' && !$am_sender; -@@ -227,7 +227,7 @@ - } - - # Note: This assumes that the rsync protocol will not be maliciously hijacked. --exec(RSYNC, @opts, @args) or die "exec(rsync @opts @args) failed: $? $!"; -+exec("/usr/bin/sudo", RSYNC, @opts, @args) or die "exec(sudo rsync @opts @args) failed: $? $!"; - - sub check_arg - { diff --git a/pkgs/signaldctl/default.nix b/pkgs/signaldctl/default.nix deleted file mode 100644 index 3ae85d8..0000000 --- a/pkgs/signaldctl/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ buildGoModule, fetchgit, lib }: - -buildGoModule { - pname = "signaldctl"; - version = "main-3ca2d6f6"; - src = fetchgit { - url = "https://gitlab.com/signald/signald-go.git"; - branchName = "main"; - rev = "3ca2d6f6c91d44f34fca3221c430d1c47fa31a5a"; - sha256 = "0hh2jqfdsvclilqllyfxswpw6fk0ncyhbiy08mwfp3dnk8nlz5vk"; - }; - vendorSha256 = "0m3spzv79fgnrg0sxhi3nrpdrvmrznwdca6rrz8qxgqb7a58qcxv"; -} diff --git a/pkgs/slang_1/default.nix b/pkgs/slang_1/default.nix deleted file mode 100644 index cd626e0..0000000 --- a/pkgs/slang_1/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ stdenv, fetchpatch, fetchurl }: -stdenv.mkDerivation rec { - name = "slang-debian-patched-${version}"; - version = "1.4.9"; - src = fetchurl { - url = "ftp://space.mit.edu/pub/davis/slang/v1.4/slang-1.4.9.tar.gz"; - sha256 = "1y2mg0whqh4b3acd0k17i4biz55bimxg8aaxhmwd165cvspxns9r"; - }; - debian_patches = fetchurl { - url = "http://archive.debian.org/debian-archive/debian-amd64/pool/main/s/slang/slang_1.4.9dbs-8.diff.gz"; - sha256 = "0xdq14k5ynqfwpmis1rcggs7m4n921i3bs27icbmbhfg5gb2hap2"; - }; - patchPhase = '' - gunzip -c ${debian_patches} | patch -p1 - for i in debian/patches/*; do - patch -p1 < $i - done - ''; - preConfigure = '' - makeFlagsArray=(CFLAGS=" -g -O2 -fno-strength-reduce -DUTF8 -D_REENTRANT -D_XOPEN_SOURCE=500") - ''; - postBuild = '' - sed -i "1i#ifndef UTF8\n#define UTF8\n#endif" src/slang.h - ''; -} diff --git a/pkgs/status_engine/host_perfdata.patch b/pkgs/status_engine/host_perfdata.patch deleted file mode 100644 index 0c8a20b..0000000 --- a/pkgs/status_engine/host_perfdata.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/src/statusengine.c b/src/statusengine.c -index cc0b06e..2a18dec 100644 ---- a/src/statusengine.c -+++ b/src/statusengine.c -@@ -304,6 +304,7 @@ int enable_ocsp = 0; - - int use_restart_data=1; - int use_service_perfdata=0; -+int use_host_perfdata=0; - - int statusengine_process_config_var(char *arg); - int statusengine_process_module_args(char *args); -@@ -612,6 +613,9 @@ int statusengine_process_config_var(char *arg) { - } else if (!strcmp(var, "use_service_perfdata")) { - use_service_perfdata = atoi(val); - logswitch(NSLOG_INFO_MESSAGE, "start with enabled use_service_perfdata"); -+ } else if (!strcmp(var, "use_host_perfdata")) { -+ use_host_perfdata = atoi(val); -+ logswitch(NSLOG_INFO_MESSAGE, "start with enabled use_host_perfdata"); - } else { - return ERROR; - } -@@ -1067,6 +1071,24 @@ int statusengine_handle_data(int event_type, void *data){ - json_object_put(my_object); - free(raw_command); - -+ if(use_host_perfdata){ -+ my_object = json_object_new_object(); -+ json_object_object_add(my_object, "type", json_object_new_int(hostcheck->type)); -+ json_object_object_add(my_object, "flags", json_object_new_int(hostcheck->flags)); -+ json_object_object_add(my_object, "attr", json_object_new_int(hostcheck->attr)); -+ json_object_object_add(my_object, "timestamp", json_object_new_int(hostcheck->timestamp.tv_sec)); -+ -+ json_object *hostcheck_object = json_object_new_object(); -+ HOSTCHECKFIELD_STRING(host_name); -+ HOSTCHECKFIELD_STRING(perf_data); -+ json_object_object_add(hostcheck_object, "start_time", json_object_new_int64(nag_hostcheck->start_time.tv_sec)); -+ -+ json_object_object_add(my_object, "hostcheck", hostcheck_object); -+ const char* json_string = json_object_to_json_string(my_object); -+ statusengine_send_job("statusngin_host_perfdata", (void *)json_string); -+ -+ json_object_put(my_object); -+ } - } - break; - diff --git a/pkgs/status_engine/interface.nix b/pkgs/status_engine/interface.nix deleted file mode 100644 index 7ee4889..0000000 --- a/pkgs/status_engine/interface.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenv, composerEnv, fetchurl, callPackage, config_file ? "/var/lib/status_engine/interface.yml" }: -composerEnv.buildPackage ( - import ./interface_php_packages.nix { inherit composerEnv fetchurl; } // rec { - pname = "interface"; - version = "3.4.0"; - name = "${pname}-${version}"; - src = fetchurl { - url = "https://github.com/statusengine/${pname}/archive/${version}.tar.gz"; - sha256 = "1l11cskv740xvqs9a2yj9zkvgvxvymaq5qap36g2r4hkqbfbbjj2"; - }; - unpackPhase = null; - postUnpack = '' - src=$(pwd)/$sourceRoot - ''; - postInstall = '' - ln -s ${config_file} $out/etc/config.yml - ''; - preInstall = '' - cp ${./interface_composer.lock} $out/composer.lock - ''; - }) diff --git a/pkgs/status_engine/interface_composer.lock b/pkgs/status_engine/interface_composer.lock deleted file mode 100644 index 8911d9f..0000000 --- a/pkgs/status_engine/interface_composer.lock +++ /dev/null @@ -1,1323 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "668fd19407022566bb6a70398e2f954e", - "packages": [ - { - "name": "crate/crate-dbal", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/crate/crate-dbal.git", - "reference": "f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/crate/crate-dbal/zipball/f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417", - "reference": "f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417", - "shasum": "" - }, - "require": { - "crate/crate-pdo": "^1.0.0", - "doctrine/dbal": "^2.10.1", - "php": "^7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.0", - "squizlabs/php_codesniffer": "~1.5.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "Crate\\DBAL": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Crate.io", - "email": "office@crate.io", - "homepage": "https://crate.io", - "role": "maintainer" - } - ], - "description": "Doctrine Database Abstraction Layer (DBAL) adapter for CrateDB", - "homepage": "https://github.com/crate/crate-dbal", - "keywords": [ - "crate", - "database", - "dbal", - "doctrine" - ], - "time": "2020-01-08T08:31:16+00:00" - }, - { - "name": "crate/crate-pdo", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/crate/crate-pdo.git", - "reference": "33332cef1a27844e473265e584223f142c37317f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/crate/crate-pdo/zipball/33332cef1a27844e473265e584223f142c37317f", - "reference": "33332cef1a27844e473265e584223f142c37317f", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "guzzlehttp/guzzle": "~6.0", - "php": "^7.2" - }, - "require-dev": { - "phpstan/phpstan": "^0.9.2", - "phpunit/phpunit": "~7.0", - "squizlabs/php_codesniffer": "^2.8.1" - }, - "type": "library", - "autoload": { - "psr-0": { - "Crate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Crate.io", - "email": "office@crate.io", - "homepage": "https://crate.io", - "role": "maintainer" - } - ], - "description": "PDO adapter for CrateDB", - "homepage": "https://github.com/crate/crate-pdo", - "keywords": [ - "crate", - "database", - "pdo" - ], - "time": "2019-04-09T07:48:20+00:00" - }, - { - "name": "doctrine/cache", - "version": "1.10.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2020-05-27T16:24:54+00:00" - }, - { - "name": "doctrine/dbal", - "version": "2.10.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.2" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "jetbrains/phpstorm-stubs": "^2019.1", - "nikic/php-parser": "^4.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.4.1", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.11" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.10.x-dev", - "dev-develop": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlanywhere", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2020-04-20T17:19:26+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "629572819973f13486371cb611386eb17851e85c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", - "reference": "629572819973f13486371cb611386eb17851e85c", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "conflict": { - "doctrine/common": "<2.9@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "time": "2019-11-10T09:48:07+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.4", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2020-05-25T19:35:05+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2019-07-01T23:21:34+00:00" - }, - { - "name": "nikic/fast-route", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/FastRoute.git", - "reference": "181d480e08d9476e61381e04a71b34dc0432e812" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", - "reference": "181d480e08d9476e61381e04a71b34dc0432e812", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35|~5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "description": "Fast request router for PHP", - "keywords": [ - "router", - "routing" - ], - "time": "2018-02-13T20:26:39+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-07-02T15:55:56+00:00" - }, - { - "name": "pimple/pimple", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930", - "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "psr/container": "^1.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4|^4.4|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "time": "2020-03-03T09:12:48+00:00" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "time": "2017-02-14T16:28:37+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "slim/csrf", - "version": "0.8.3", - "source": { - "type": "git", - "url": "https://github.com/slimphp/Slim-Csrf.git", - "reference": "5f2bcf5d89adf86dc0455a32bea84d912ab466a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim-Csrf/zipball/5f2bcf5d89adf86dc0455a32bea84d912ab466a7", - "reference": "5f2bcf5d89adf86dc0455a32bea84d912ab466a7", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "^1.1|^2.0|^9.99", - "php": ">=5.5.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0", - "slim/slim": "~3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Slim\\Csrf\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "http://joshlockhart.com" - } - ], - "description": "Slim Framework 3 CSRF protection middleware", - "homepage": "http://slimframework.com", - "keywords": [ - "csrf", - "framework", - "middleware", - "slim" - ], - "time": "2018-08-22T16:12:18+00:00" - }, - { - "name": "slim/slim", - "version": "3.12.3", - "source": { - "type": "git", - "url": "https://github.com/slimphp/Slim.git", - "reference": "1c9318a84ffb890900901136d620b4f03a59da38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38", - "reference": "1c9318a84ffb890900901136d620b4f03a59da38", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-libxml": "*", - "ext-simplexml": "*", - "nikic/fast-route": "^1.0", - "php": ">=5.5.0", - "pimple/pimple": "^3.0", - "psr/container": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0", - "squizlabs/php_codesniffer": "^2.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Slim\\": "Slim" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "https://joshlockhart.com" - }, - { - "name": "Andrew Smith", - "email": "a.smith@silentworks.co.uk", - "homepage": "http://silentworks.co.uk" - }, - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, - { - "name": "Gabriel Manricks", - "email": "gmanricks@me.com", - "homepage": "http://gabrielmanricks.com" - } - ], - "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "https://slimframework.com", - "keywords": [ - "api", - "framework", - "micro", - "router" - ], - "time": "2019-11-28T17:40:33+00:00" - }, - { - "name": "symfony/console", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41", - "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-11-30T12:35:10+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-12T16:47:27+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-12T16:47:27+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "f048e612a3905f34931127360bdd2def19a5e582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", - "reference": "f048e612a3905f34931127360bdd2def19a5e582", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-12T16:47:27+00:00" - }, - { - "name": "symfony/yaml", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "f79824187de95064a2f5038904c4d7f0227fedb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5", - "reference": "f79824187de95064a2f5038904c4d7f0227fedb5", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-11-30T12:35:10+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.5.9", - "ext-ldap": "*" - }, - "platform-dev": [], - "plugin-api-version": "1.1.0" -} diff --git a/pkgs/status_engine/interface_php_packages.nix b/pkgs/status_engine/interface_php_packages.nix deleted file mode 100644 index d81e83c..0000000 --- a/pkgs/status_engine/interface_php_packages.nix +++ /dev/null @@ -1,217 +0,0 @@ -# Generated with composer2nix and adapted to return only the list of -# packages -{ composerEnv, fetchurl }: -{ - packages = { - "crate/crate-dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "crate-crate-dbal-f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417"; - src = fetchurl { - url = https://api.github.com/repos/crate/crate-dbal/zipball/f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417; - sha256 = "0778m29av1nj6596b7x6xz6frd41nrswn20r327lpdfw7y6b19ni"; - }; - }; - }; - "crate/crate-pdo" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "crate-crate-pdo-33332cef1a27844e473265e584223f142c37317f"; - src = fetchurl { - url = https://api.github.com/repos/crate/crate-pdo/zipball/33332cef1a27844e473265e584223f142c37317f; - sha256 = "11w30hyr0lfw800aakl0ii8pwdv7vzpbjklw0z96hzsky788hfa7"; - }; - }; - }; - "doctrine/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-cache-35a4a70cd94e09e2259dfae7488afc6b474ecbd3"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3; - sha256 = "1fk0c8vhjgl7j4b2vd4k7sshdrqysqwcp9mlxbapf8x7nmpa6i9b"; - }; - }; - }; - "doctrine/dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-dbal-aab745e7b6b2de3b47019da81e7225e14dcfdac8"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8; - sha256 = "04c6r4p1b0iknjk95hpc4fsyxg8s2x1skfmnx2g11z64jvldzs62"; - }; - }; - }; - "doctrine/event-manager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-event-manager-629572819973f13486371cb611386eb17851e85c"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c; - sha256 = "02zglsk2zfnpabs83an7zg18h2k31h00vzk6qpawvmy35r1vmrfn"; - }; - }; - }; - "guzzlehttp/guzzle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "guzzlehttp-guzzle-a4a1b6930528a8f7ee03518e6442ec7a44155d9d"; - src = fetchurl { - url = https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d; - sha256 = "0midln6ji6b990vkc0syn631nf6r94lv5600dcc26lcivz8c4gk3"; - }; - }; - }; - "guzzlehttp/promises" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "guzzlehttp-promises-a59da6cf61d80060647ff4d3eb2c03a2bc694646"; - src = fetchurl { - url = https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646; - sha256 = "1kpl91fzalcgkcs16lpakvzcnbkry3id4ynx6xhq477p4fipdciz"; - }; - }; - }; - "guzzlehttp/psr7" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "guzzlehttp-psr7-239400de7a173fe9901b9ac7c06497751f00727a"; - src = fetchurl { - url = https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a; - sha256 = "0mfq93x7ayix6l3v5jkk40a9hnmrxaqr9vk1r26q39d1s6292ma7"; - }; - }; - }; - "nikic/fast-route" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "nikic-fast-route-181d480e08d9476e61381e04a71b34dc0432e812"; - src = fetchurl { - url = https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812; - sha256 = "0sjqivm0gp6d6nal58n4r5wzyi21r4hdzn4v31ydgjgni7877p4i"; - }; - }; - }; - "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"; - }; - }; - }; - "pimple/pimple" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "pimple-pimple-e55d12f9d6a0e7f9c85992b73df1267f46279930"; - src = fetchurl { - url = https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930; - sha256 = "0xmx8jc9shh2a63wg6574g6qc63w3nvr7w4062d97sbgnn62r6hw"; - }; - }; - }; - "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/http-message" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363; - sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45"; - }; - }; - }; - "ralouphie/getallheaders" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822"; - src = fetchurl { - url = https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822; - sha256 = "1bv7ndkkankrqlr2b4kw7qp3fl0dxi6bp26bnim6dnlhavd6a0gg"; - }; - }; - }; - "slim/csrf" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "slim-csrf-5f2bcf5d89adf86dc0455a32bea84d912ab466a7"; - src = fetchurl { - url = https://api.github.com/repos/slimphp/Slim-Csrf/zipball/5f2bcf5d89adf86dc0455a32bea84d912ab466a7; - sha256 = "1n8q8cgc2y60z7waqw9xyq9pl9dvww85rbdcnap55d5a55api8j5"; - }; - }; - }; - "slim/slim" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "slim-slim-1c9318a84ffb890900901136d620b4f03a59da38"; - src = fetchurl { - url = https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38; - sha256 = "08s7y7apz609vg745wr61nn0ji029zvnd0435fn3kmn57f8lgq7x"; - }; - }; - }; - "symfony/console" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-console-d232bfc100dfd32b18ccbcab4bcc8f28697b7e41"; - src = fetchurl { - url = https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41; - sha256 = "16kgs7x60y3vj0bbmljj80hq1x8fb6w1g0fd1j2hc1cbphgj8x67"; - }; - }; - }; - "symfony/polyfill-intl-idn" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-intl-idn-3bff59ea7047e925be6b7f2059d60af31bb46d6a"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a; - sha256 = "0c26v3xpchyiqckp663n7i3hgswbzy56r0jdwjizrsgqq731h6fp"; - }; - }; - }; - "symfony/polyfill-mbstring" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-mbstring-fa79b11539418b02fc5e1897267673ba2c19419c"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c; - sha256 = "17m46mkkcv7fsxf71si0cq8xdf6b1k272mc5bfwgl00h8s9bk0rs"; - }; - }; - }; - "symfony/polyfill-php72" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php72-f048e612a3905f34931127360bdd2def19a5e582"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582; - sha256 = "1lkjxh17nfaglh7v2m3zw2fy6b2w8nmxr7jb1gqqpvg74yqqz83f"; - }; - }; - }; - "symfony/yaml" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-yaml-f79824187de95064a2f5038904c4d7f0227fedb5"; - src = fetchurl { - url = https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5; - sha256 = "1pwx4bckfjz0afz62q02vl0i4wmg3c6f963jrhlx247b1z6isram"; - }; - }; - }; - }; -} diff --git a/pkgs/status_engine/module.json b/pkgs/status_engine/module.json deleted file mode 100644 index 5ed06d2..0000000 --- a/pkgs/status_engine/module.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "d461e95-master", - "meta": { - "name": "statusengine-module", - "url": "https://github.com/statusengine/module", - "branch": "master" - }, - "github": { - "owner": "statusengine", - "repo": "module", - "rev": "d461e95a11fffaac604d11ac42d237b5e13071bc", - "sha256": "1awmq9rck9xy82pambnd2wh66ndif8x8jpk4qbbghs9f2sd48x1n", - "fetchSubmodules": true - } -} diff --git a/pkgs/status_engine/module.nix b/pkgs/status_engine/module.nix deleted file mode 100644 index 43d2b09..0000000 --- a/pkgs/status_engine/module.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ stdenv, mylibs, gearmand, json_c, libuuid, libevent, pkgconfig, glib }: -stdenv.mkDerivation (mylibs.fetchedGithub ./module.json // { - patches = [ ./host_perfdata.patch ]; - buildInputs = [ gearmand json_c libuuid libevent pkgconfig glib ]; - makeFlags = "all"; - installPhase = '' - mkdir -p $out/lib/status-engine - cp -a src/bin/* $out/lib/status-engine - ''; -}) diff --git a/pkgs/status_engine/worker.json b/pkgs/status_engine/worker.json deleted file mode 100644 index 301bab5..0000000 --- a/pkgs/status_engine/worker.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "02267d4-master", - "meta": { - "name": "worker", - "url": "https://github.com/statusengine/worker", - "branch": "master" - }, - "github": { - "owner": "statusengine", - "repo": "worker", - "rev": "02267d495ae69137d6765dc6b0f453f80216f1cf", - "sha256": "06ci4mkmifdf1z15yc8rxl44ppi45vjz4s136yaccq9d8vk9iyd4", - "fetchSubmodules": true - } -} diff --git a/pkgs/status_engine/worker.nix b/pkgs/status_engine/worker.nix deleted file mode 100644 index 1232303..0000000 --- a/pkgs/status_engine/worker.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ stdenv, mylibs, composerEnv, fetchurl, gearmand, callPackage, php73, config_file ? "/var/lib/status_engine/ui.yml" }: -let - gearman = php73.buildPecl rec { - version = "2.0.6"; - pname = "gearman"; - src = fetchurl { - url = "https://github.com/wcgallego/pecl-gearman/archive/${pname}-${version}.tar.gz"; - sha256 = "0bliga4j41xkvdfh6bqi6k8x6mfxbi5sl9gix97axs7w0ncyfprz"; - }; - configureFlags = [ "--with-gearman=${gearmand}" ]; - nativeBuildInputs = [ gearmand ]; - }; -in -(composerEnv.override { - php = php73.withExtensions({ enabled, all }: enabled ++ (with all; [gearman redis mbstring bcmath json iconv])); -}).buildPackage (mylibs.fetchedGithub ./worker.json // - import ./worker_php_packages.nix { inherit composerEnv fetchurl; } // rec { - postInstall = '' - ln -s ${config_file} $out/etc/config.yml - ''; - preInstall = '' - cp ${./worker_composer.lock} $out/composer.lock - ''; -}) diff --git a/pkgs/status_engine/worker_composer.lock b/pkgs/status_engine/worker_composer.lock deleted file mode 100644 index 63f2646..0000000 --- a/pkgs/status_engine/worker_composer.lock +++ /dev/null @@ -1,1457 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "0b9940904a72531dd233d2c1b0ea28a0", - "packages": [ - { - "name": "crate/crate-dbal", - "version": "0.3.1", - "source": { - "type": "git", - "url": "https://github.com/crate/crate-dbal.git", - "reference": "3329f19d39f648bdd7613e5c8dc7e230f45814d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/crate/crate-dbal/zipball/3329f19d39f648bdd7613e5c8dc7e230f45814d9", - "reference": "3329f19d39f648bdd7613e5c8dc7e230f45814d9", - "shasum": "" - }, - "require": { - "crate/crate-pdo": "~0.6.0", - "doctrine/dbal": "~2.5.5", - "php": "~5.5|~7.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "Crate\\DBAL": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "description": "A Doctrine Database Abstraction Layer for the Crate.io DBMS", - "homepage": "https://github.com/crate/crate-dbal", - "keywords": [ - "crate", - "database", - "dbal", - "doctrine" - ], - "time": "2017-04-07T13:26:54+00:00" - }, - { - "name": "crate/crate-pdo", - "version": "0.6.3", - "source": { - "type": "git", - "url": "https://github.com/crate/crate-pdo.git", - "reference": "31a88d1004235327a4651a10a5b98a7803b3cde3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/crate/crate-pdo/zipball/31a88d1004235327a4651a10a5b98a7803b3cde3", - "reference": "31a88d1004235327a4651a10a5b98a7803b3cde3", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "guzzlehttp/guzzle": "~6.0", - "php": "~5.5|~7.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "Crate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "description": "A PDO adapter for interacting with the Crate.io DBMS", - "homepage": "https://github.com/crate/crate-pdo", - "keywords": [ - "crate", - "database", - "pdo" - ], - "time": "2017-07-17T12:50:03+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.10.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2020-05-25T17:24:27+00:00" - }, - { - "name": "doctrine/cache", - "version": "1.10.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2020-05-27T16:24:54+00:00" - }, - { - "name": "doctrine/collections", - "version": "1.6.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "fc0206348e17e530d09463fef07ba8968406cd6d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d", - "reference": "fc0206348e17e530d09463fef07ba8968406cd6d", - "shasum": "" - }, - "require": { - "php": "^7.1.3 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan-shim": "^0.9.2", - "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", - "homepage": "https://www.doctrine-project.org/projects/collections.html", - "keywords": [ - "array", - "collections", - "iterators", - "php" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", - "type": "tidelift" - } - ], - "time": "2020-05-25T19:24:35+00:00" - }, - { - "name": "doctrine/common", - "version": "v2.7.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", - "shasum": "" - }, - "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": "~5.6|~7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ], - "time": "2017-07-22T08:35:12+00:00" - }, - { - "name": "doctrine/dbal", - "version": "v2.5.13", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "729340d8d1eec8f01bff708e12e449a3415af873" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873", - "reference": "729340d8d1eec8f01bff708e12e449a3415af873", - "shasum": "" - }, - "require": { - "doctrine/common": ">=2.4,<2.8-dev", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "symfony/console": "2.*||^3.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\DBAL\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Database Abstraction Layer", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "persistence", - "queryobject" - ], - "time": "2017-07-22T20:44:48+00:00" - }, - { - "name": "doctrine/inflector", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^7.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-strict-rules": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2020-05-29T07:19:59+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2020-05-25T17:44:05+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.4", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2020-05-25T19:35:05+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2019-07-01T23:21:34+00:00" - }, - { - "name": "php-amqplib/php-amqplib", - "version": "v2.11.3", - "source": { - "type": "git", - "url": "https://github.com/php-amqplib/php-amqplib.git", - "reference": "6353c5d2d3021a301914bc6566e695c99cfeb742" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/6353c5d2d3021a301914bc6566e695c99cfeb742", - "reference": "6353c5d2d3021a301914bc6566e695c99cfeb742", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-sockets": "*", - "php": ">=5.6.3", - "phpseclib/phpseclib": "^2.0.0" - }, - "conflict": { - "php": "7.4.0 - 7.4.1" - }, - "replace": { - "videlalvaro/php-amqplib": "self.version" - }, - "require-dev": { - "ext-curl": "*", - "nategood/httpful": "^0.2.20", - "phpunit/phpunit": "^5.7|^6.5|^7.0", - "squizlabs/php_codesniffer": "^2.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.11-dev" - } - }, - "autoload": { - "psr-4": { - "PhpAmqpLib\\": "PhpAmqpLib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Alvaro Videla", - "role": "Original Maintainer" - }, - { - "name": "Raúl Araya", - "email": "nubeiro@gmail.com", - "role": "Maintainer" - }, - { - "name": "Luke Bakken", - "email": "luke@bakken.io", - "role": "Maintainer" - }, - { - "name": "Ramūnas Dronga", - "email": "github@ramuno.lt", - "role": "Maintainer" - } - ], - "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.", - "homepage": "https://github.com/php-amqplib/php-amqplib/", - "keywords": [ - "message", - "queue", - "rabbitmq" - ], - "time": "2020-05-13T13:56:11+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "2.0.27", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", - "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2020-04-04T23:17:33+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "symfony/console", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41", - "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-11-30T12:35:10+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-12T16:47:27+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-12T16:47:27+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "f048e612a3905f34931127360bdd2def19a5e582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", - "reference": "f048e612a3905f34931127360bdd2def19a5e582", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-12T16:47:27+00:00" - }, - { - "name": "symfony/yaml", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "f79824187de95064a2f5038904c4d7f0227fedb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5", - "reference": "f79824187de95064a2f5038904c4d7f0227fedb5", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-11-30T12:35:10+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.5.9", - "ext-redis": "*", - "ext-gearman": "*", - "ext-mbstring": "*", - "ext-bcmath": "*", - "ext-json": "*", - "ext-iconv": "*" - }, - "platform-dev": [], - "plugin-api-version": "1.1.0" -} diff --git a/pkgs/status_engine/worker_php_packages.nix b/pkgs/status_engine/worker_php_packages.nix deleted file mode 100644 index 1d956ad..0000000 --- a/pkgs/status_engine/worker_php_packages.nix +++ /dev/null @@ -1,217 +0,0 @@ -# Generated with composer2nix and adapted to return only the list of -# packages -{ composerEnv, fetchurl }: -{ - packages = { - "crate/crate-dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "crate-crate-dbal-3329f19d39f648bdd7613e5c8dc7e230f45814d9"; - src = fetchurl { - url = https://api.github.com/repos/crate/crate-dbal/zipball/3329f19d39f648bdd7613e5c8dc7e230f45814d9; - sha256 = "013z63zcvrnmxphdm6qqy0if1397lmbb0g3yrpjbka98pg8zm99g"; - }; - }; - }; - "crate/crate-pdo" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "crate-crate-pdo-31a88d1004235327a4651a10a5b98a7803b3cde3"; - src = fetchurl { - url = https://api.github.com/repos/crate/crate-pdo/zipball/31a88d1004235327a4651a10a5b98a7803b3cde3; - sha256 = "194f6daj9ghlwyplp86nazh1av6jadqznwqijqgr1g3dfmgb3y16"; - }; - }; - }; - "doctrine/annotations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-annotations-5db60a4969eba0e0c197a19c077780aadbc43c5d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d; - sha256 = "1a8psmvs90x4nflfvjvp6j9yjmq6z9jgsb3plrp5c7iy7snkq1v2"; - }; - }; - }; - "doctrine/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-cache-35a4a70cd94e09e2259dfae7488afc6b474ecbd3"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3; - sha256 = "1fk0c8vhjgl7j4b2vd4k7sshdrqysqwcp9mlxbapf8x7nmpa6i9b"; - }; - }; - }; - "doctrine/collections" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-collections-fc0206348e17e530d09463fef07ba8968406cd6d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d; - sha256 = "1aqnjna5cc5hyy6wypmayvl5lgz2qbym6innmr3qaq9nff6r9qlf"; - }; - }; - }; - "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/inflector" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-inflector-4650c8b30c753a76bf44fb2ed00117d6f367490c"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c; - sha256 = "13jnzwpzz63i6zipmhb22lv35l5gq6wmji0532c94331wcq5bvv9"; - }; - }; - }; - "doctrine/lexer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-lexer-e864bbf5904cb8f5bb334f99209b48018522f042"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042; - sha256 = "11lg9fcy0crb8inklajhx3kyffdbx7xzdj8kwl21xsgq9nm9iwvv"; - }; - }; - }; - "guzzlehttp/guzzle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "guzzlehttp-guzzle-a4a1b6930528a8f7ee03518e6442ec7a44155d9d"; - src = fetchurl { - url = https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d; - sha256 = "0midln6ji6b990vkc0syn631nf6r94lv5600dcc26lcivz8c4gk3"; - }; - }; - }; - "guzzlehttp/promises" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "guzzlehttp-promises-a59da6cf61d80060647ff4d3eb2c03a2bc694646"; - src = fetchurl { - url = https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646; - sha256 = "1kpl91fzalcgkcs16lpakvzcnbkry3id4ynx6xhq477p4fipdciz"; - }; - }; - }; - "guzzlehttp/psr7" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "guzzlehttp-psr7-239400de7a173fe9901b9ac7c06497751f00727a"; - src = fetchurl { - url = https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a; - sha256 = "0mfq93x7ayix6l3v5jkk40a9hnmrxaqr9vk1r26q39d1s6292ma7"; - }; - }; - }; - "php-amqplib/php-amqplib" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "php-amqplib-php-amqplib-6353c5d2d3021a301914bc6566e695c99cfeb742"; - src = fetchurl { - url = https://api.github.com/repos/php-amqplib/php-amqplib/zipball/6353c5d2d3021a301914bc6566e695c99cfeb742; - sha256 = "1nadc5afkn1fiws2w1wh0n032pr5b4dzfg1dcqyf2jnh0nsgq0xp"; - }; - }; - }; - "phpseclib/phpseclib" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpseclib-phpseclib-34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc"; - src = fetchurl { - url = https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc; - sha256 = "1jlc8plx0v0rq3zqhc19a01r7xx7a2p6gl7mkzf2hn0kss50plz5"; - }; - }; - }; - "psr/http-message" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363; - sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45"; - }; - }; - }; - "ralouphie/getallheaders" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822"; - src = fetchurl { - url = https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822; - sha256 = "1bv7ndkkankrqlr2b4kw7qp3fl0dxi6bp26bnim6dnlhavd6a0gg"; - }; - }; - }; - "symfony/console" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-console-d232bfc100dfd32b18ccbcab4bcc8f28697b7e41"; - src = fetchurl { - url = https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41; - sha256 = "16kgs7x60y3vj0bbmljj80hq1x8fb6w1g0fd1j2hc1cbphgj8x67"; - }; - }; - }; - "symfony/polyfill-intl-idn" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-intl-idn-3bff59ea7047e925be6b7f2059d60af31bb46d6a"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a; - sha256 = "0c26v3xpchyiqckp663n7i3hgswbzy56r0jdwjizrsgqq731h6fp"; - }; - }; - }; - "symfony/polyfill-mbstring" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-mbstring-fa79b11539418b02fc5e1897267673ba2c19419c"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c; - sha256 = "17m46mkkcv7fsxf71si0cq8xdf6b1k272mc5bfwgl00h8s9bk0rs"; - }; - }; - }; - "symfony/polyfill-php72" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php72-f048e612a3905f34931127360bdd2def19a5e582"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582; - sha256 = "1lkjxh17nfaglh7v2m3zw2fy6b2w8nmxr7jb1gqqpvg74yqqz83f"; - }; - }; - }; - "symfony/yaml" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-yaml-f79824187de95064a2f5038904c4d7f0227fedb5"; - src = fetchurl { - url = https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5; - sha256 = "1pwx4bckfjz0afz62q02vl0i4wmg3c6f963jrhlx247b1z6isram"; - }; - }; - }; - }; -} diff --git a/pkgs/telegram-history-dump/default.nix b/pkgs/telegram-history-dump/default.nix deleted file mode 100644 index 050b351..0000000 --- a/pkgs/telegram-history-dump/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ stdenv, ruby, mylibs }: -stdenv.mkDerivation (mylibs.fetchedGithub ./telegram-history-dump.json // { - installPhase = '' - mkdir -p $out/lib $out/bin - cp -a $src $out/lib/telegram-history-dump - ln -s $out/lib/telegram-history-dump/telegram-history-dump.rb $out/bin/telegram-history-dump - ''; - buildInputs = [ ruby ]; -}) diff --git a/pkgs/telegram-history-dump/telegram-history-dump.json b/pkgs/telegram-history-dump/telegram-history-dump.json deleted file mode 100644 index 487df73..0000000 --- a/pkgs/telegram-history-dump/telegram-history-dump.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "468ea91-master", - "meta": { - "name": "telegram-history-dump", - "url": "https://github.com/tvdstaaij/telegram-history-dump", - "branch": "master" - }, - "github": { - "owner": "tvdstaaij", - "repo": "telegram-history-dump", - "rev": "468ea91e543529b54bc2c5ea28b1ea17f362fd3e", - "sha256": "1wmwiqacfa56bmwx50njnb15cg0fy6rbdrmrjd4xfbh8bs6yp0gh", - "fetchSubmodules": true - } -} diff --git a/pkgs/telegramircd/default.nix b/pkgs/telegramircd/default.nix deleted file mode 100644 index 2f1d7ca..0000000 --- a/pkgs/telegramircd/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ openssl, telethon, python3Packages, mylibs }: -with python3Packages; -buildPythonApplication rec { - format = "other"; - pname = "telegramircd"; - version = "master"; - propagatedBuildInputs = [ telethon aiohttp ConfigArgParse openssl ]; - src = (mylibs.fetchedGithub ./telegramircd.json).src; - LD_LIBRARY_PATH = "${openssl.out}/lib"; - installPhase = '' - install -D $src/telegramircd.py $out/bin/telegramircd - wrapProgram "$out/bin/telegramircd" \ - --prefix LD_LIBRARY_PATH : "${openssl.out}/lib" - install -Dm644 "$src/config" -t "$out/etc/telegramircd/" - ''; -} diff --git a/pkgs/telegramircd/telegramircd.json b/pkgs/telegramircd/telegramircd.json deleted file mode 100644 index 3d219f8..0000000 --- a/pkgs/telegramircd/telegramircd.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "40a0c7c-master", - "meta": { - "name": "telegramircd", - "url": "https://github.com/MaskRay/telegramircd", - "branch": "master" - }, - "github": { - "owner": "MaskRay", - "repo": "telegramircd", - "rev": "40a0c7cf60492bde3f44d43f06f62e3792480139", - "sha256": "123fjhgxq2fzn0ar8274jv7jjbxnlpidrj5333kbch7rpcipks0y", - "fetchSubmodules": true - } -} diff --git a/pkgs/telethon_sync/default.nix b/pkgs/telethon_sync/default.nix deleted file mode 100644 index a03e1c3..0000000 --- a/pkgs/telethon_sync/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ lib, python3Packages, fetchgit }: -with python3Packages; -buildPythonPackage rec { - pname = "Telethon-sync"; - version = "1.1.1"; - - src = fetchgit { - url = "https://github.com/LonamiWebs/Telethon"; - branchName = "sync-stale"; - rev = "6a785a01aa56cfd21c8c5beb9d722c68d664ba5e"; - sha256 = "0g7gnln5kbh1gy6sfb3jg6knmi33n6sgzy2rni2x6af84lza0lgc"; - }; - - propagatedBuildInputs = [ - rsa pyaes async_generator - ]; - doCheck = false; - - meta = with lib; { - homepage = https://github.com/LonamiWebs/Telethon; - description = "Full-featured Telegram client library for Python 3"; - license = licenses.mit; - }; -} diff --git a/pkgs/terminal-velocity/default.nix b/pkgs/terminal-velocity/default.nix deleted file mode 100644 index 1a015c0..0000000 --- a/pkgs/terminal-velocity/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ python36Packages }: -with python36Packages; -buildPythonApplication rec { - pname = "terminal-velocity-git"; - version = "0.2.0"; - src = fetchPypi { - inherit pname version; - sha256 = "13yrkcmvh5h5fwnai61sbmqkrjyisz08n62pq0ada2lyyqf7g6b9"; - }; - - patches = [ - ./sort_found_notes.patch - ./python3_support.patch - # FIXME: update this patch when version changes - ./fix_build.patch - ]; - - preCheck = '' - # Needed for urwid test - export LC_ALL=en_US.UTF-8 - ''; - propagatedBuildInputs = [ - chardet - urwid - (sh.overridePythonAttrs { doCheck = false; }) - pyyaml - ]; - buildInputs = [ - m2r - (restructuredtext_lint.overridePythonAttrs { doCheck = false; }) - pygments - ]; - - postInstall = '' - rm $out/bin/terminal_velocity - ''; -} diff --git a/pkgs/terminal-velocity/fix_build.patch b/pkgs/terminal-velocity/fix_build.patch deleted file mode 100644 index b08e0c4..0000000 --- a/pkgs/terminal-velocity/fix_build.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit a64bf3d58f6ba7f5fa72fe5b89a3973cac0c1a99 -Author: Ismaël Bouya -Date: Sat Mar 9 20:13:52 2019 +0100 - - Remove mister_bump dependency - -diff --git a/setup.py b/setup.py -index 84a99e9..a783dff 100644 ---- a/setup.py -+++ b/setup.py -@@ -1,7 +1,9 @@ - from setuptools import setup - from m2r import parse_from_file - import restructuredtext_lint --from mister_bump import bump -+ -+def bump(): -+ return "0.2.0" - - # Parser README.md into reStructuredText format - rst_readme = parse_from_file('README.md') diff --git a/pkgs/terminal-velocity/python3_support.patch b/pkgs/terminal-velocity/python3_support.patch deleted file mode 100644 index bd4aec7..0000000 --- a/pkgs/terminal-velocity/python3_support.patch +++ /dev/null @@ -1,215 +0,0 @@ -commit 6ca19964b9e8a7866fd7e21a3dac9ccd35f0d434 -Author: Ismaël Bouya -Date: Sat Mar 9 20:13:18 2019 +0100 - - Add python3 support - -diff --git a/terminal_velocity/notebook.py b/terminal_velocity/notebook.py -index b6226dc..11f76de 100644 ---- a/terminal_velocity/notebook.py -+++ b/terminal_velocity/notebook.py -@@ -60,51 +60,6 @@ import sys - import chardet - - --def unicode_or_bust(raw_text): -- """Return the given raw text data decoded to unicode. -- -- If the text cannot be decoded, return None. -- -- """ -- encodings = ["utf-8"] -- for encoding in (sys.getfilesystemencoding(), sys.getdefaultencoding()): -- # I would use a set for this, but they don't maintain order. -- if encoding not in encodings: -- encodings.append(encoding) -- -- for encoding in encodings: -- if encoding: # getfilesystemencoding() may return None -- try: -- decoded = unicode(raw_text, encoding=encoding) -- return decoded -- except UnicodeDecodeError: -- pass -- -- # If none of those guesses worked, let chardet have a go. -- encoding = chardet.detect(raw_text)["encoding"] -- if encoding and encoding not in encodings: -- try: -- decoded = unicode(raw_text, encoding=encoding) -- logger.debug("File decoded with chardet, encoding was {0}".format( -- encoding)) -- return decoded -- except UnicodeDecodeError: -- pass -- except LookupError: -- pass -- -- # I've heard that decoding with cp1252 never fails, so try that last. -- try: -- decoded = unicode(raw_text, encoding="cp1252") -- logger.debug("File decoded with encoding cp1252") -- return decoded -- except UnicodeDecodeError: -- pass -- -- # If nothing worked then give up. -- return None -- -- - class Error(Exception): - """Base class for exceptions in this module.""" - pass -@@ -192,12 +147,12 @@ class PlainTextNote(object): - # subdirs) if they don't exist. - directory = os.path.split(self.abspath)[0] - if not os.path.isdir(directory): -- logger.debug(u"'{0} doesn't exist, creating it".format(directory)) -+ logger.debug("'{0} doesn't exist, creating it".format(directory)) - try: - os.makedirs(directory) - except os.error as e: - raise NewNoteError( -- u"{0} could not be created: {1}".format(directory, e)) -+ "{0} could not be created: {1}".format(directory, e)) - - # Create an empty file if the file doesn't exist. - open(self.abspath, 'a') -@@ -217,11 +172,11 @@ class PlainTextNote(object): - - @property - def contents(self): -- contents = unicode_or_bust(open(self.abspath, "r").read()) -+ contents = open(self.abspath, "rb").read().decode(errors='ignore') - if contents is None: - logger.error( -- u"Could not decode file contents: {0}".format(self.abspath)) -- return u"" -+ "Could not decode file contents: {0}".format(self.abspath)) -+ return "" - else: - return contents - -@@ -322,12 +277,12 @@ class PlainTextNoteBook(object): - - # Create notebook_dir if it doesn't exist. - if not os.path.isdir(self.path): -- logger.debug(u"'{0} doesn't exist, creating it".format(self.path)) -+ logger.debug("'{0} doesn't exist, creating it".format(self.path)) - try: - os.makedirs(self.path) - except os.error as e: - raise NewNoteBookError( -- u"{0} could not be created: {1}".format(self.path, e)) -+ "{0} could not be created: {1}".format(self.path, e)) - else: - # TODO: Check that self.path is a directory, if not raise. - pass -@@ -358,13 +313,12 @@ class PlainTextNoteBook(object): - abspath = os.path.join(root, filename) - relpath = os.path.relpath(abspath, self.path) - relpath, ext = os.path.splitext(relpath) -- unicode_relpath = unicode_or_bust(relpath) - if relpath is None: - # The filename could not be decoded. - logger.error( - "Could not decode filename: {0}".format(relpath)) - else: -- self.add_new(title=unicode_relpath, extension=ext) -+ self.add_new(title=relpath, extension=ext) - - @property - def path(self): -@@ -418,7 +372,7 @@ class PlainTextNoteBook(object): - for note in self._notes: - if note.title == title and note.extension == extension: - raise NoteAlreadyExistsError( -- u"Note already in NoteBook: {0}".format(note.title)) -+ "Note already in NoteBook: {0}".format(note.title)) - - # Ok, add the note. - note = PlainTextNote(title, self, extension) -diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py -index 5f0e213..9234bea 100755 ---- a/terminal_velocity/terminal_velocity.py -+++ b/terminal_velocity/terminal_velocity.py -@@ -1,7 +1,7 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - """A fast note-taking app for the UNIX terminal""" - from __future__ import print_function --import ConfigParser -+import configparser - import argparse - import os - import logging -@@ -9,9 +9,9 @@ import logging.handlers - import sys - - #import terminal_velocity.urwid_ui as urwid_ui --import urwid_ui -+from . import urwid_ui - --from git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes -+from .git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes - - - def startup(): -@@ -37,7 +37,7 @@ def main(): - - # Parse the config file. - config_file = os.path.abspath(os.path.expanduser(args.config)) -- config = ConfigParser.SafeConfigParser() -+ config = configparser.ConfigParser() - config.read(config_file) - defaults = dict(config.items('DEFAULT')) - -diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py -index caebcb9..89bab35 100644 ---- a/terminal_velocity/urwid_ui.py -+++ b/terminal_velocity/urwid_ui.py -@@ -10,7 +10,7 @@ import logging - logger = logging.getLogger(__name__) - - import urwid --import notebook -+from . import notebook - - - palette = [ -@@ -27,8 +27,6 @@ def system(cmd, loop): - - loop.screen.stop() - -- cmd = u"{0}".format(cmd) -- cmd = cmd.encode("utf-8") # FIXME: Correct encoding? - safe_cmd = shlex.split(cmd) - - logger.debug("System command: {0}".format(safe_cmd)) -@@ -114,7 +112,7 @@ class AutocompleteWidget(urwid.Edit): - - # When search bar is empty show placeholder text. - if not self.edit_text and not self.autocomplete_text: -- placeholder_text = u"Find or Create" -+ placeholder_text = "Find or Create" - return (placeholder_text, - [("placeholder", len(placeholder_text))]) - -@@ -186,7 +184,7 @@ class NoteFilterListBox(urwid.ListBox): - - def render(self, size, focus=False): - if len(self.list_walker) == 0: -- placeholder = placeholder_text(u"No matching notes, press Enter " -+ placeholder = placeholder_text("No matching notes, press Enter " - "to create a new note") - return placeholder.render(size) - return super(NoteFilterListBox, self).render(size, self.fake_focus) -@@ -399,7 +397,7 @@ class MainFrame(urwid.Frame): - # If the user has no notes yet show some placeholder text, otherwise - # show the note list. - if len(self.notebook) == 0: -- self.body = placeholder_text(u"You have no notes yet, to create " -+ self.body = placeholder_text("You have no notes yet, to create " - "a note type a note title then press Enter") - else: - self.body = urwid.Padding(self.list_box, left=1, right=1) diff --git a/pkgs/terminal-velocity/sort_found_notes.patch b/pkgs/terminal-velocity/sort_found_notes.patch deleted file mode 100644 index 2bc563c..0000000 --- a/pkgs/terminal-velocity/sort_found_notes.patch +++ /dev/null @@ -1,73 +0,0 @@ -commit 0f9df37046e58c8963aff93c649e5d3dbf2202bd -Author: Ismaël Bouya -Date: Sat Mar 9 20:11:46 2019 +0100 - - Add sorting option - -diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py -index a53eda3..5f0e213 100755 ---- a/terminal_velocity/terminal_velocity.py -+++ b/terminal_velocity/terminal_velocity.py -@@ -90,6 +90,10 @@ the default default will be used""" - default=defaults.get("log_file", "~/.tvlog"), - help="the file to log to (default: %(default)s)") - -+ parser.add_argument("-s", "--sort", dest="sort", action="store", -+ default=defaults.get("sort", "date"), -+ help="the note sorting rules. Possible values: date, title (default: %(default)s)") -+ - parser.add_argument("-p", "--print-config", dest="print_config", - action="store_true", default=False, - help="print your configuration settings then exit") -@@ -138,7 +142,7 @@ the default default will be used""" - try: - urwid_ui.launch(notes_dir=args.notes_dir, editor=args.editor, - extension=args.extension, extensions=args.extensions, -- exclude=args.exclude) -+ exclude=args.exclude, sort=args.sort) - except KeyboardInterrupt: - # Run the shutdown hook - shutdown() -diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py -index 34cf4f6..caebcb9 100644 ---- a/terminal_velocity/urwid_ui.py -+++ b/terminal_velocity/urwid_ui.py -@@ -237,11 +237,12 @@ class NoteFilterListBox(urwid.ListBox): - class MainFrame(urwid.Frame): - """The topmost urwid widget.""" - -- def __init__(self, notes_dir, editor, extension, extensions, exclude=None): -+ def __init__(self, notes_dir, editor, extension, extensions, exclude=None, sort="date"): - - self.editor = editor - self.notebook = notebook.PlainTextNoteBook(notes_dir, extension, - extensions, exclude=exclude) -+ self.sort = sort - - # Don't filter the note list when the text in the search box changes. - self.suppress_filter = False -@@ -408,7 +409,10 @@ class MainFrame(urwid.Frame): - - # Sort the notes. - # TODO: Support different sort orderings. -- matching_notes.sort(key=lambda x: x.mtime, reverse=True) -+ if self.sort == "title": -+ matching_notes.sort(key=lambda x: x.title) -+ else: -+ matching_notes.sort(key=lambda x: x.mtime, reverse=True) - - # Tell the list box to show only the matching notes. - self.list_box.filter(matching_notes) -@@ -433,10 +437,10 @@ class MainFrame(urwid.Frame): - self.selected_note = note - - --def launch(notes_dir, editor, extension, extensions, exclude=None): -+def launch(notes_dir, editor, extension, extensions, exclude=None, sort="date"): - """Launch the user interface.""" - -- frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude) -+ frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude, sort=sort) - loop = urwid.MainLoop(frame, palette) - frame.loop = loop - loop.run() diff --git a/pkgs/tiv/default.nix b/pkgs/tiv/default.nix deleted file mode 100644 index 3e7a56c..0000000 --- a/pkgs/tiv/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ buildPerlPackage, fetchurl, perlPackages }: -buildPerlPackage rec { - pname = "tiv"; - version = "2015"; - src = fetchurl { - url = "http://xyne.archlinux.ca/projects/tiv/src/tiv-${version}.tar.xz"; - sha256 = "1vq073v7z7vmcd57lhs4rf4jasji69cpjgkz4dykp94a77p1qq90"; - }; - - outputs = ["out"]; - buildInputs = with perlPackages; [ PerlMagick ]; - perlPreHookScript = ./tiv_builder.sh; - perlPreHook = '' - source $perlPreHookScript - ''; - installPhase = '' - install -Dm755 tiv "$out/bin/tiv" - ''; -} diff --git a/pkgs/tiv/tiv_builder.sh b/pkgs/tiv/tiv_builder.sh deleted file mode 100644 index ea16682..0000000 --- a/pkgs/tiv/tiv_builder.sh +++ /dev/null @@ -1,8 +0,0 @@ -orig=$(declare -f preConfigure) -new_name="preConfigure2 ${orig#preConfigure}" -eval "$new_name" - -preConfigure() { - preConfigure2 || true -} - diff --git a/pkgs/twins/default.nix b/pkgs/twins/default.nix deleted file mode 100644 index d0656bb..0000000 --- a/pkgs/twins/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ buildGoModule, fetchgit }: - -buildGoModule { - pname = "twins"; - version = "master-cd85204"; - src = fetchgit { - url = "https://code.rocketnine.space/tslocum/twins.git"; - branchName = "master"; - rev = "cd8520468072c39914ce5c8f6900dd804848d7ad"; - sha256 = "14pxcq24g3cllq8w76dwn7mmcphdpw4f5d2nhwxh06hs8ci22fz3"; - }; - - vendorSha256 = "1h8bk8v1p52b3qwk71mv8015p990jczq31p7b7bwypb4im5l5pd9"; - -} diff --git a/pkgs/umami/build-geo.patch b/pkgs/umami/build-geo.patch deleted file mode 100644 index 7a4f075..0000000 --- a/pkgs/umami/build-geo.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/scripts/build-geo.js b/scripts/build-geo.js -index cc66f94..5464b54 100644 ---- a/scripts/build-geo.js -+++ b/scripts/build-geo.js -@@ -22,9 +22,7 @@ if (!fs.existsSync(dest)) { - - const download = url => - new Promise(resolve => { -- https.get(url, res => { -- resolve(res.pipe(zlib.createGunzip({})).pipe(tar.t())); -- }); -+ resolve(fs.createReadStream(url).pipe(zlib.createGunzip({})).pipe(tar.t())); - }); - - download(url).then( diff --git a/pkgs/umami/default.nix b/pkgs/umami/default.nix deleted file mode 100644 index 5620f90..0000000 --- a/pkgs/umami/default.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ nodejs, writeScriptBin, stdenv, yarn2nix-moretea, lib, fetchzip, fetchurl, zlib, openssl, fetchFromGitHub }: -let - version = "1.17.0"; - geolite2-country-url = "https://raw.githubusercontent.com/GitSquared/node-geolite2-redist/master/redist/GeoLite2-Country.tar.gz"; - geolite2-country = fetchurl { - url = geolite2-country-url; - sha256 = "0mdjvx1dfpkhg5kbp7jnrspzybaavhlxmna44l7rw05nrw5nv9zw"; - }; - toBin = sha256: name: fetchurl { - inherit name sha256; - url = "https://binaries.prisma.sh/all_commits/e421996c87d5f3c8f7eeadd502d4ad402c89464d/debian-openssl-1.1.x/${name}.gz"; - downloadToTemp = true; - executable = true; - postFetch = '' - cat "$downloadedFile" | gunzip > $out - patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \ - --set-rpath "${lib.makeLibraryPath [ openssl zlib ]}:$(patchelf --print-rpath $out)" \ - $out - chmod +x $out - ''; - }; - binaries = { - DATABASE_TYPE = "postgresql"; - PRISMA_QUERY_ENGINE_BINARY = toBin "1sy67xqvbmgzksw7bl31k74k41jr44n514idqbi70j2i6jxbrl4j" "query-engine"; - PRISMA_INTROSPECTION_ENGINE_BINARY = toBin "1kcszg11f71sg2y0ki7kg4prwlyb67bdjpjcky9kyjd8n9ilc8hj" "introspection-engine"; - PRISMA_MIGRATION_ENGINE_BINARY = toBin "1lmz0wwjaavap9k6z5ysqrhlgs3r3kc9jpri2lv0lq95qmwr5hzq" "migration-engine"; - PRISMA_FMT_BINARY = toBin "0241aszja3j1pp7pxs40irmfj06ilfjbzyqjzrzrb5azk7izwm73" "prisma-fmt"; - }; - src = fetchFromGitHub { - owner = "mikecao"; - repo = "umami"; - rev = "v${version}"; - sha256 = "15jfgf057lsl20vdw45v5cim5d2ilalzaaxn6h82pz4d2fj1w0nh"; - }; - node-modules = yarn2nix-moretea.mkYarnModules rec { - pname = "umami"; - inherit version; - name = "${pname}-${version}"; - yarnLock = "${src}/yarn.lock"; - packageJSON = "${src}/package.json"; - pkgConfig.npm-run-all.postInstall = '' - patchShebangs . - ''; - pkgConfig.rollup.postInstall = '' - patchShebangs . - ''; - }; - package = stdenv.mkDerivation (binaries // { - pname = "umami"; - inherit version src; - buildInputs = [ nodejs ]; - patches = [ ./build-geo.patch ]; - configurePhase = '' - cp -r ${node-modules}/node_modules . - chmod u+w -R node_modules - ''; - buildPhase = '' - sed -i -e "s@${geolite2-country-url}@${geolite2-country}@" scripts/build-geo.js - npm run build - ''; - installPhase = '' - cp -a . $out - ''; - }); - script = writeScriptBin "umami" ('' - #! ${stdenv.shell} - cd ${package} - '' + builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "export ${n}=${v}") binaries) + "\n" + '' - ${nodejs}/bin/npm run start-env - ''); -in - script // { nodeApp = package; } diff --git a/pkgs/unicode/default.nix b/pkgs/unicode/default.nix deleted file mode 100644 index 756e939..0000000 --- a/pkgs/unicode/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ lib, fetchurl, runCommand, libarchive }: -with lib.attrsets; -let - version = "12.0"; - version-full = "${version}.0"; - files = { - emoji-data = fetchurl { - url = "http://www.unicode.org/Public/emoji/${version}/emoji-data.txt"; - sha256 = "03sf7h1d6kb9m5s02lif88jsi5kjszpkfvcymaqxj8ds70ar9pgv"; - }; - emoji-sequences = fetchurl { - url = "http://www.unicode.org/Public/emoji/${version}/emoji-sequences.txt"; - sha256 = "1hghki2rn3n7m4lwpwi2a5wrsf2nij4bxga9ldabx4g0g2k23svs"; - }; - emoji-test = fetchurl { - url = "http://www.unicode.org/Public/emoji/${version}/emoji-test.txt"; - sha256 = "1dqd0fh999mh6naj816ni113m9dimfy3ih9nffjq2lrv9mmlgdck"; - }; - emoji-variation-sequences = fetchurl { - url = "http://www.unicode.org/Public/emoji/${version}/emoji-variation-sequences.txt"; - sha256 = "1cccwx5bl79w4c19vi5dhjqxrph92s8hihp9y8s2cqvdzmgbln7a"; - }; - emoji-zwj-sequences = fetchurl { - url = "http://www.unicode.org/Public/emoji/${version}/emoji-zwj-sequences.txt"; - sha256 = "1l791nbijmmhwa7kmvfn8gp26ban512l6mgqpz1mnbq3xm19181n"; - }; - }; - zippedFiles = { - UCD = fetchurl { - url = "http://www.unicode.org/Public/zipped/${version-full}/UCD.zip"; - sha256 = "1ighy39cjkmqnv1797wrxjz76mv1fdw7zp5j04q55bkwxsdkvrmh"; - }; - Unihan = fetchurl { - url = "http://www.unicode.org/Public/zipped/${version-full}/Unihan.zip"; - sha256 = "1kfdhgg2gm52x3s07bijb5cxjy0jxwhd097k5lqhvzpznprm6ibf"; - }; - }; -in - runCommand "unicode" { - buildInputs = [ libarchive ]; - } '' - mkdir -p $out/share/unicode - ${builtins.concatStringsSep "\n" (mapAttrsToList (n: u: "install -Dm644 ${u} $out/share/unicode/emoji/${n}.txt") files)} - ${builtins.concatStringsSep "\n" (mapAttrsToList (n: u: '' - install -Dm644 ${u} $out/share/unicode/${n}.zip - bsdtar -C "$out/share/unicode" -x -f "$out/share/unicode/${n}.zip" - '') zippedFiles)} - '' diff --git a/pkgs/webapps/adminer/default.nix b/pkgs/webapps/adminer/default.nix deleted file mode 100644 index 203b565..0000000 --- a/pkgs/webapps/adminer/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ stdenv, fetchurl }: -stdenv.mkDerivation rec { - version = "4.7.1"; - name = "adminer-${version}"; - src = fetchurl { - url = "https://github.com/vrana/adminer/releases/download/v${version}/${name}.php"; - sha256 = "00gnck9vd44wc6ihf7hh4ma6jvdsw69xgjlkbrdf6irnni6rnvhn"; - }; - phases = "installPhase"; - installPhase = '' - mkdir -p $out - cp $src $out/index.php - ''; -} diff --git a/pkgs/webapps/apache-theme/default.nix b/pkgs/webapps/apache-theme/default.nix deleted file mode 100644 index 4b5755a..0000000 --- a/pkgs/webapps/apache-theme/default.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ theme_root ? null }: -rec { - theme = ./theme; - apacheConfig = let - theme_root' = if isNull theme_root then theme else theme_root; - in '' - - Alias /theme ${theme_root'} - - Options -Indexes - AllowOverride None - Require all granted - - - # mod_autoindex - - Options Indexes - AllowOverride None - Require all granted - - # Inspired from Apaxy by @adamwhitcroft - - IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks +ShowForbidden - - IndexHeadInsert "" - - IndexIgnoreReset ON - IndexIgnore /theme .htaccess %{ignored} - - AddIcon /theme/icons/blank.png ^^BLANKICON^^ - AddIcon /theme/icons/folder.png ^^DIRECTORY^^ - AddIcon /theme/icons/folder-home.png .. - - AddIconByType (TXT,/theme/icons/text.png) text/* - AddIconByType (IMG,/theme/icons/image.png) image/* - AddIconByType (SND,/theme/icons/audio.png) audio/* - AddIconByType (VID,/theme/icons/video.png) video/* - - AddIcon /theme/icons/archive.png .7z .bz2 .cab .gz .tar - AddIcon /theme/icons/audio.png .aac .aif .aifc .aiff .ape .au .flac .iff .m4a .mid .mp3 .mpa .ra .wav .wma .f4a .f4b .oga .ogg .xm .it .s3m .mod - AddIcon /theme/icons/bin.png .bin .hex - AddIcon /theme/icons/bmp.png .bmp - AddIcon /theme/icons/c.png .c - AddIcon /theme/icons/calc.png .xlsx .xlsm .xltx .xltm .xlam .xlr .xls .csv - AddIcon /theme/icons/cd.png .iso - AddIcon /theme/icons/cpp.png .cpp - AddIcon /theme/icons/css.png .css .sass .scss - AddIcon /theme/icons/deb.png .deb - AddIcon /theme/icons/doc.png .doc .docx .docm .dot .dotx .dotm .log .msg .odt .pages .rtf .tex .wpd .wps - AddIcon /theme/icons/draw.png .svg .svgz - AddIcon /theme/icons/eps.png .ai .eps - AddIcon /theme/icons/exe.png .exe - AddIcon /theme/icons/gif.png .gif - AddIcon /theme/icons/h.png .h - AddIcon /theme/icons/html.png .html .xhtml .shtml .htm .URL .url - AddIcon /theme/icons/ico.png .ico - AddIcon /theme/icons/java.png .jar - AddIcon /theme/icons/jpg.png .jpg .jpeg .jpe - AddIcon /theme/icons/js.png .js .json - AddIcon /theme/icons/markdown.png .md - AddIcon /theme/icons/package.png .pkg .dmg - AddIcon /theme/icons/pdf.png .pdf - AddIcon /theme/icons/php.png .php .phtml - AddIcon /theme/icons/playlist.png .m3u .m3u8 .pls .pls8 - AddIcon /theme/icons/png.png .png - AddIcon /theme/icons/ps.png .ps - AddIcon /theme/icons/psd.png .psd - AddIcon /theme/icons/py.png .py - AddIcon /theme/icons/rar.png .rar - AddIcon /theme/icons/rb.png .rb - AddIcon /theme/icons/rpm.png .rpm - AddIcon /theme/icons/rss.png .rss - AddIcon /theme/icons/script.png .bat .cmd .sh - AddIcon /theme/icons/sql.png .sql - AddIcon /theme/icons/tiff.png .tiff .tif - AddIcon /theme/icons/text.png .txt .nfo - AddIcon /theme/icons/video.png .asf .asx .avi .flv .mkv .mov .mp4 .mpg .rm .srt .swf .vob .wmv .m4v .f4v .f4p .ogv - AddIcon /theme/icons/xml.png .xml - AddIcon /theme/icons/zip.png .zip - DefaultIcon /theme/icons/default.png - - HeaderName /theme/header.html - ReadmeName /theme/footer.html - IndexStyleSheet /theme/style.css - - - ''; -} diff --git a/pkgs/webapps/apache-theme/theme/.htaccess b/pkgs/webapps/apache-theme/theme/.htaccess deleted file mode 100644 index f9e5472..0000000 --- a/pkgs/webapps/apache-theme/theme/.htaccess +++ /dev/null @@ -1,9 +0,0 @@ -# -# Apaxy by @adamwhitcroft -# -# For a full breakdown of the mod_autoindex module -# http://apache.org/docs/2.2/mod/mod_autoindex.html -# - -# Don't index this folder -Options -Indexes diff --git a/pkgs/webapps/apache-theme/theme/footer.html b/pkgs/webapps/apache-theme/theme/footer.html deleted file mode 100644 index 57a2012..0000000 --- a/pkgs/webapps/apache-theme/theme/footer.html +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/pkgs/webapps/apache-theme/theme/header.html b/pkgs/webapps/apache-theme/theme/header.html deleted file mode 100644 index cbded6a..0000000 --- a/pkgs/webapps/apache-theme/theme/header.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -

    - diff --git a/pkgs/webapps/apache-theme/theme/icons/archive.png b/pkgs/webapps/apache-theme/theme/icons/archive.png deleted file mode 100644 index 99ae6fc..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/archive.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/audio.png b/pkgs/webapps/apache-theme/theme/icons/audio.png deleted file mode 100644 index a67618d..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/audio.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/authors.png b/pkgs/webapps/apache-theme/theme/icons/authors.png deleted file mode 100644 index 78bf784..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/authors.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/bin.png b/pkgs/webapps/apache-theme/theme/icons/bin.png deleted file mode 100644 index ec2220b..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/bin.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/blank.png b/pkgs/webapps/apache-theme/theme/icons/blank.png deleted file mode 100644 index bef1f60..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/blank.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/bmp.png b/pkgs/webapps/apache-theme/theme/icons/bmp.png deleted file mode 100644 index c6f3044..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/bmp.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/c.png b/pkgs/webapps/apache-theme/theme/icons/c.png deleted file mode 100644 index 12adaa3..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/c.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/calc.png b/pkgs/webapps/apache-theme/theme/icons/calc.png deleted file mode 100644 index a034367..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/calc.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/cd.png b/pkgs/webapps/apache-theme/theme/icons/cd.png deleted file mode 100644 index 3a3ffbb..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/cd.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/copying.png b/pkgs/webapps/apache-theme/theme/icons/copying.png deleted file mode 100644 index 83fa06e..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/copying.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/cpp.png b/pkgs/webapps/apache-theme/theme/icons/cpp.png deleted file mode 100644 index 47e8b1e..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/cpp.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/css.png b/pkgs/webapps/apache-theme/theme/icons/css.png deleted file mode 100644 index 15f7695..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/css.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/deb.png b/pkgs/webapps/apache-theme/theme/icons/deb.png deleted file mode 100644 index 1b12d29..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/deb.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/default.png b/pkgs/webapps/apache-theme/theme/icons/default.png deleted file mode 100644 index 6997229..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/default.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/diff.png b/pkgs/webapps/apache-theme/theme/icons/diff.png deleted file mode 100644 index 5bef920..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/diff.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/doc.png b/pkgs/webapps/apache-theme/theme/icons/doc.png deleted file mode 100644 index 5732f9b..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/doc.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/draw.png b/pkgs/webapps/apache-theme/theme/icons/draw.png deleted file mode 100644 index 8f1da5c..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/draw.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/eps.png b/pkgs/webapps/apache-theme/theme/icons/eps.png deleted file mode 100644 index 93736bb..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/eps.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/exe.png b/pkgs/webapps/apache-theme/theme/icons/exe.png deleted file mode 100644 index 31299b7..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/exe.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-home.png b/pkgs/webapps/apache-theme/theme/icons/folder-home.png deleted file mode 100644 index 14fe20a..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/folder-home.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-open.png b/pkgs/webapps/apache-theme/theme/icons/folder-open.png deleted file mode 100644 index 2aa5cc7..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/folder-open.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-page.png b/pkgs/webapps/apache-theme/theme/icons/folder-page.png deleted file mode 100644 index 604f9ad..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/folder-page.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png b/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png deleted file mode 100644 index b82d7a9..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-parent.png b/pkgs/webapps/apache-theme/theme/icons/folder-parent.png deleted file mode 100644 index 3c964f1..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/folder-parent.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/folder.png b/pkgs/webapps/apache-theme/theme/icons/folder.png deleted file mode 100644 index 7c613e0..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/folder.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/gif.png b/pkgs/webapps/apache-theme/theme/icons/gif.png deleted file mode 100644 index 01a2f2a..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/gif.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/gzip.png b/pkgs/webapps/apache-theme/theme/icons/gzip.png deleted file mode 100644 index 99ae6fc..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/gzip.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/h.png b/pkgs/webapps/apache-theme/theme/icons/h.png deleted file mode 100644 index d3c7a9c..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/h.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/hpp.png b/pkgs/webapps/apache-theme/theme/icons/hpp.png deleted file mode 100644 index e5e52e2..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/hpp.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/html.png b/pkgs/webapps/apache-theme/theme/icons/html.png deleted file mode 100644 index 2f94a78..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/html.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/ico.png b/pkgs/webapps/apache-theme/theme/icons/ico.png deleted file mode 100644 index 82227e8..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/ico.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/image.png b/pkgs/webapps/apache-theme/theme/icons/image.png deleted file mode 100644 index add1c59..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/image.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/install.png b/pkgs/webapps/apache-theme/theme/icons/install.png deleted file mode 100644 index 0a9c036..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/install.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/java.png b/pkgs/webapps/apache-theme/theme/icons/java.png deleted file mode 100644 index 63b8683..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/java.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/jpg.png b/pkgs/webapps/apache-theme/theme/icons/jpg.png deleted file mode 100644 index a50c99b..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/jpg.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/js.png b/pkgs/webapps/apache-theme/theme/icons/js.png deleted file mode 100644 index af1a475..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/js.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/json.png b/pkgs/webapps/apache-theme/theme/icons/json.png deleted file mode 100644 index af1a475..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/json.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/log.png b/pkgs/webapps/apache-theme/theme/icons/log.png deleted file mode 100644 index 02f1b9a..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/log.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/makefile.png b/pkgs/webapps/apache-theme/theme/icons/makefile.png deleted file mode 100644 index f99ea4c..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/makefile.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/markdown.png b/pkgs/webapps/apache-theme/theme/icons/markdown.png deleted file mode 100644 index 25c8373..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/markdown.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/package.png b/pkgs/webapps/apache-theme/theme/icons/package.png deleted file mode 100644 index fb1343e..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/package.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/pdf.png b/pkgs/webapps/apache-theme/theme/icons/pdf.png deleted file mode 100644 index 7408d8d..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/pdf.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/php.png b/pkgs/webapps/apache-theme/theme/icons/php.png deleted file mode 100644 index 22c4df6..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/php.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/playlist.png b/pkgs/webapps/apache-theme/theme/icons/playlist.png deleted file mode 100644 index 8d6f281..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/playlist.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/png.png b/pkgs/webapps/apache-theme/theme/icons/png.png deleted file mode 100644 index 1fe1ec4..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/png.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/pres.png b/pkgs/webapps/apache-theme/theme/icons/pres.png deleted file mode 100644 index db195e9..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/pres.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/ps.png b/pkgs/webapps/apache-theme/theme/icons/ps.png deleted file mode 100644 index 05f3ed9..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/ps.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/psd.png b/pkgs/webapps/apache-theme/theme/icons/psd.png deleted file mode 100644 index 62718ee..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/psd.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/py.png b/pkgs/webapps/apache-theme/theme/icons/py.png deleted file mode 100644 index 0aaffd1..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/py.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/rar.png b/pkgs/webapps/apache-theme/theme/icons/rar.png deleted file mode 100644 index 8a0ff54..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/rar.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/rb.png b/pkgs/webapps/apache-theme/theme/icons/rb.png deleted file mode 100644 index c7db42f..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/rb.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/readme.png b/pkgs/webapps/apache-theme/theme/icons/readme.png deleted file mode 100644 index 3ae48cd..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/readme.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/rpm.png b/pkgs/webapps/apache-theme/theme/icons/rpm.png deleted file mode 100644 index 64699ac..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/rpm.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/rss.png b/pkgs/webapps/apache-theme/theme/icons/rss.png deleted file mode 100644 index a1130a1..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/rss.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/rtf.png b/pkgs/webapps/apache-theme/theme/icons/rtf.png deleted file mode 100644 index 25c8373..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/rtf.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/script.png b/pkgs/webapps/apache-theme/theme/icons/script.png deleted file mode 100644 index 1099b5f..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/script.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/source.png b/pkgs/webapps/apache-theme/theme/icons/source.png deleted file mode 100644 index 5bef920..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/source.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/sql.png b/pkgs/webapps/apache-theme/theme/icons/sql.png deleted file mode 100644 index b3b1467..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/sql.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/tar.png b/pkgs/webapps/apache-theme/theme/icons/tar.png deleted file mode 100644 index bab3b6a..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/tar.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/tex.png b/pkgs/webapps/apache-theme/theme/icons/tex.png deleted file mode 100644 index 1487b25..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/tex.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/text.png b/pkgs/webapps/apache-theme/theme/icons/text.png deleted file mode 100644 index 1d48677..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/text.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/tiff.png b/pkgs/webapps/apache-theme/theme/icons/tiff.png deleted file mode 100644 index 819e64c..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/tiff.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/unknown.png b/pkgs/webapps/apache-theme/theme/icons/unknown.png deleted file mode 100644 index b1dcc3f..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/unknown.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/vcal.png b/pkgs/webapps/apache-theme/theme/icons/vcal.png deleted file mode 100644 index 3d81455..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/vcal.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/video.png b/pkgs/webapps/apache-theme/theme/icons/video.png deleted file mode 100644 index f92f7e1..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/video.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/xml.png b/pkgs/webapps/apache-theme/theme/icons/xml.png deleted file mode 100644 index 83a83df..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/xml.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/icons/zip.png b/pkgs/webapps/apache-theme/theme/icons/zip.png deleted file mode 100644 index cc196c1..0000000 Binary files a/pkgs/webapps/apache-theme/theme/icons/zip.png and /dev/null differ diff --git a/pkgs/webapps/apache-theme/theme/style.css b/pkgs/webapps/apache-theme/theme/style.css deleted file mode 100644 index 4d25c9f..0000000 --- a/pkgs/webapps/apache-theme/theme/style.css +++ /dev/null @@ -1,160 +0,0 @@ -/*------------------------------------*\ - Apaxy - by @adamwhitcroft - - Theme name: Apaxy - Theme author: @adamwhitcroft -\*------------------------------------*/ -@import url('//fonts.googleapis.com/css?family=Open+Sans'); -/* Have to use @import for the font, as you can only specify a single stylesheet */ -* { - 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; -} -/*------------------------------------*\ - Wrapper -\*------------------------------------*/ -.wrapper { - margin:0 auto; - padding-top:20px; - max-width:80%; -} -/*------------------------------------*\ - Demo block -\*------------------------------------*/ -.block { - font-size:.875em; - margin:20px 0; - padding:20px; - color:#9099A3; -} -/*------------------------------------*\ - Table (directory listing) -\*------------------------------------*/ -table { - width:100%; - border-collapse:collapse; - font-size:.875em; -} -tr { - outline:0; - border:0; -} -tr:hover td { - background:#f6f6f6; -} -th { - text-align:left; - font-size:.75em; - padding-right:20px; -} -/* 2nd Column: Filename */ -th + th { - width:65%; -} -/* 3rd Column: Last Modified */ -th + th + th { -} -/* 4th Column: Size */ -th + th + th + th { - width:5%; -} -tr td:first-of-type { - padding-left:10px; - padding-right:10px; -} -td { - padding:5px 0; - outline:0; - border:0; - border-bottom:1px solid #edf1f5; - vertical-align:middle; - text-align:left; - -webkit-transition:background 300ms ease; - -moz-transition:background 300ms ease; - -ms-transition:background 300ms ease; - -o-transition:background 300ms ease; - transition:background 300ms ease; -} -td a{ - display: block; -} -tr.parent a[href^="/"] { - color:#9099A3; -} - .parent a[href^="/"]:hover { - color:#2281d0; - } -/*------------------------------------*\ - Footer -\*------------------------------------*/ -.footer { - text-align:center; - font-size:.75em; -} - -h1#pagetitle { - text-align: center; -} -tr.parent a[href="/"]{ - display: none; -} - -tr.indexhead { - visibility: hidden; -} - -th.indexcollastmod, td.indexcollastmod, th.indexcolsize, td.indexcolsize { - visibility: hidden; -} - -.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/pkgs/webapps/awl/default.nix b/pkgs/webapps/awl/default.nix deleted file mode 100644 index dc78339..0000000 --- a/pkgs/webapps/awl/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ stdenv, fetchurl }: -stdenv.mkDerivation rec { - version = "0.62"; - name = "awl-${version}"; - src = fetchurl { - url = "https://www.davical.org/downloads/awl_${version}.orig.tar.xz"; - sha256 = "0x9pr8sq3bicnvzsxfwdsqxnvfygn6gy5pawmm6i6fyb1p5h5izz"; - }; - unpackCmd = '' - tar --one-top-level -xf $curSrc - ''; - installPhase = '' - mkdir -p $out - cp -ra dba docs inc scripts tests $out - ''; -} diff --git a/pkgs/webapps/davical/default.nix b/pkgs/webapps/davical/default.nix deleted file mode 100644 index 045a93b..0000000 --- a/pkgs/webapps/davical/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ davical_config ? "/etc/davical/config.php", stdenv, fetchurl, gettext }: -stdenv.mkDerivation rec { - version = "1.1.10"; - name = "davical-${version}"; - src = fetchurl { - url = "https://www.davical.org/downloads/davical_${version}.orig.tar.xz"; - sha256 = "1d8zw558qrz2rybdv853ai04ar7v5a2dsypnffapx9ihgnrv4hq3"; - }; - unpackCmd = '' - tar --one-top-level -xf $curSrc - ''; - makeFlags = "all"; - patchPhase = '' - # https://gitlab.com/davical-project/davical/-/issues/229 - sed -i -e 's/"newpass1"/"newpass1", "password"/g' htdocs/always.php - ''; - installPhase = '' - mkdir -p $out - cp -ra config dba docs htdocs inc locale po scripts testing zonedb $out - ln -s ${davical_config} $out/config/config.php - ''; - buildInputs = [ gettext ]; -} diff --git a/pkgs/webapps/default.nix b/pkgs/webapps/default.nix deleted file mode 100644 index cbee0b3..0000000 --- a/pkgs/webapps/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ callPackage, mylibs, composerEnv }: -rec { - adminer = callPackage ./adminer {}; - apache-theme = callPackage ./apache-theme {}; - awl = callPackage ./awl {}; - davical = callPackage ./davical {}; - diaspora = callPackage ./diaspora { inherit mylibs; }; - dokuwiki = callPackage ./dokuwiki { inherit mylibs; }; - etherpad-lite = callPackage ./etherpad-lite {}; - grocy = callPackage ./grocy { inherit mylibs composerEnv; }; - infcloud = callPackage ./infcloud {}; - mantisbt_2 = callPackage ./mantisbt_2 {}; - mastodon = callPackage ./mastodon { inherit mylibs; }; - mediagoblin = callPackage ./mediagoblin { inherit mylibs; }; - nextcloud = callPackage ./nextcloud {}; - peertube = (mylibs.flakeCompat ../../flakes/peertube).default; - phpbb = callPackage ./phpbb {}; - phpldapadmin = callPackage ./phpldapadmin {}; - rompr = callPackage ./rompr { inherit mylibs; }; - roundcubemail = callPackage ./roundcubemail {}; - spip = callPackage ./spip {}; - surfer = callPackage ./surfer { inherit mylibs; }; - taskwarrior-web = callPackage ./taskwarrior-web { inherit mylibs; }; - ttrss = callPackage ./ttrss {}; - wallabag = callPackage ./wallabag { inherit composerEnv; }; - yourls = callPackage ./yourls { inherit mylibs; }; -} diff --git a/pkgs/webapps/diaspora/default.nix b/pkgs/webapps/diaspora/default.nix deleted file mode 100644 index b435347..0000000 --- a/pkgs/webapps/diaspora/default.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ ldap ? false, varDir ? "/var/lib/diaspora", podmin_email ? null, config_dir ? "/etc/diaspora", - mylibs, stdenv, bundlerEnv, writeText, - cacert, defaultGemConfig, perl, ruby_2_4, nodejs, which, git }: -let - diaspora_src = stdenv.mkDerivation (mylibs.fetchedGithub ./diaspora.json // rec { - buildPhase = '' - ${if ldap then "patch -p1 < ${./ldap.patch}" else ""} - # FIXME: bundlerEnv below doesn't take postgresql group for some - # reason - echo 'gem "pg", "1.1.3"' >> Gemfile - ''; - installPhase = '' - cp -a . $out - ''; - }); - gems = bundlerEnv { - name = "diaspora-env"; - gemfile = "${diaspora_src}/Gemfile"; - lockfile = "${diaspora_src}/Gemfile.lock"; - gemset = if ldap then ./gemset_ldap.nix else ./gemset.nix; - groups = [ "postgresql" "default" "production" ]; - gemConfig = defaultGemConfig // { - kostya-sigar = attrs: { - buildInputs = [ perl ]; - }; - }; - }; - build_config = writeText "diaspora.yml" '' - configuration: - environment: - certificate_authorities: '${cacert}/etc/ssl/certs/ca-bundle.crt' - ${if podmin_email != null then '' - # dummy comment for indentation - admins: - podmin_email: '${podmin_email}' - '' else ""} - production: - environment: - ''; - dummy_token = writeText "secret_token.rb" '' - Diaspora::Application.config.secret_key_base = 'dummy' - ''; -in -stdenv.mkDerivation { - name = "diaspora"; - inherit diaspora_src; - builder = writeText "build_diaspora" '' - source $stdenv/setup - cp -a $diaspora_src $out - cd $out - chmod -R u+rwX . - tar -czf public/source.tar.gz ./{app,db,lib,script,Gemfile,Gemfile.lock,Rakefile,config.ru} - ln -s database.yml.example config/database.yml - ln -s ${build_config} config/diaspora.yml - ln -s ${dummy_token} config/initializers/secret_token.rb - ln -sf ${varDir}/schedule.yml config/schedule.yml - ln -sf ${varDir}/oidc_key.pem config/oidc_key.pem - ln -sf ${varDir}/uploads public/uploads - RAILS_ENV=production ${gems}/bin/rake assets:precompile - ln -sf ${config_dir}/database.yml config/database.yml - ln -sf ${config_dir}/diaspora.yml config/diaspora.yml - ln -sf ${config_dir}/secret_token.rb config/initializers/secret_token.rb - rm -rf tmp log - ln -sf ${varDir}/tmp tmp - ln -sf ${varDir}/log log - ''; - propagatedBuildInputs = [ gems nodejs which git ]; - passthru = { inherit gems varDir; }; -} diff --git a/pkgs/webapps/diaspora/diaspora.json b/pkgs/webapps/diaspora/diaspora.json deleted file mode 100644 index e6795aa..0000000 --- a/pkgs/webapps/diaspora/diaspora.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "v0.7.10.0", - "meta": { - "name": "diaspora", - "url": "https://github.com/diaspora/diaspora", - "branch": "refs/tags/v0.7.10.0" - }, - "github": { - "owner": "diaspora", - "repo": "diaspora", - "rev": "f0085cf5bb1c45bdfba866f628153d299e56eca8", - "sha256": "02mnb40rdkk6jlnvpy61fad59gbpgnlwz1k35w4wfqdwzq0znaqp", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/diaspora/gemset.nix b/pkgs/webapps/diaspora/gemset.nix deleted file mode 100644 index e47f5b7..0000000 --- a/pkgs/webapps/diaspora/gemset.nix +++ /dev/null @@ -1,3047 +0,0 @@ -{ - actioncable = { - dependencies = ["actionpack" "nio4r" "websocket-driver"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf"; - type = "gem"; - }; - version = "5.1.6"; - }; - actionmailer = { - dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c"; - type = "gem"; - }; - version = "5.1.6"; - }; - actionpack = { - dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd"; - type = "gem"; - }; - version = "5.1.6"; - }; - actionview = { - dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081"; - type = "gem"; - }; - version = "5.1.6"; - }; - active_model_serializers = { - dependencies = ["activemodel" "concurrent-ruby"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z"; - type = "gem"; - }; - version = "0.9.7"; - }; - activejob = { - dependencies = ["activesupport" "globalid"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2"; - type = "gem"; - }; - version = "5.1.6"; - }; - activemodel = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby"; - type = "gem"; - }; - version = "5.1.6"; - }; - activerecord = { - dependencies = ["activemodel" "activesupport" "arel"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x"; - type = "gem"; - }; - version = "5.1.6"; - }; - activerecord-import = { - dependencies = ["activerecord"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6"; - type = "gem"; - }; - version = "0.27.0"; - }; - activesupport = { - dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll"; - type = "gem"; - }; - version = "5.1.6"; - }; - acts-as-taggable-on = { - dependencies = ["activerecord"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl"; - type = "gem"; - }; - version = "6.0.0"; - }; - acts_as_api = { - dependencies = ["activemodel" "activesupport" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc"; - type = "gem"; - }; - version = "1.0.1"; - }; - addressable = { - dependencies = ["public_suffix"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; - type = "gem"; - }; - version = "2.5.2"; - }; - aes_key_wrap = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07"; - type = "gem"; - }; - version = "1.0.1"; - }; - arel = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"; - type = "gem"; - }; - version = "8.0.0"; - }; - asset_sync = { - dependencies = ["activemodel" "fog-core" "mime-types" "unf"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx"; - type = "gem"; - }; - version = "2.5.0"; - }; - ast = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; - type = "gem"; - }; - version = "2.4.0"; - }; - attr_required = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; - type = "gem"; - }; - version = "1.0.1"; - }; - autoprefixer-rails = { - dependencies = ["execjs"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3"; - type = "gem"; - }; - version = "8.6.5"; - }; - backports = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"; - type = "gem"; - }; - version = "3.11.4"; - }; - bcrypt = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; - type = "gem"; - }; - version = "3.1.12"; - }; - bindata = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy"; - type = "gem"; - }; - version = "2.4.4"; - }; - bootstrap-sass = { - dependencies = ["autoprefixer-rails" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"; - type = "gem"; - }; - version = "3.3.7"; - }; - bootstrap-switch-rails = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l"; - type = "gem"; - }; - version = "3.3.3"; - }; - buftok = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs"; - type = "gem"; - }; - version = "0.2.0"; - }; - builder = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; - type = "gem"; - }; - version = "3.2.3"; - }; - byebug = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; - type = "gem"; - }; - version = "10.0.2"; - }; - capybara = { - dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m"; - type = "gem"; - }; - version = "3.11.1"; - }; - carrierwave = { - dependencies = ["activemodel" "activesupport" "mime-types"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs"; - type = "gem"; - }; - version = "1.2.3"; - }; - celluloid = { - dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg"; - type = "gem"; - }; - version = "0.17.3"; - }; - celluloid-essentials = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-extras = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-fsm = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-io = { - dependencies = ["celluloid" "nio4r" "timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314"; - type = "gem"; - }; - version = "0.17.3"; - }; - celluloid-pool = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-supervision = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw"; - type = "gem"; - }; - version = "0.20.6"; - }; - chunky_png = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; - type = "gem"; - }; - version = "1.3.10"; - }; - cliver = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; - type = "gem"; - }; - version = "0.3.2"; - }; - coderay = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; - type = "gem"; - }; - version = "1.1.2"; - }; - compass = { - dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; - type = "gem"; - }; - version = "1.0.3"; - }; - compass-core = { - dependencies = ["multi_json" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; - type = "gem"; - }; - version = "1.0.3"; - }; - compass-import-once = { - dependencies = ["sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; - type = "gem"; - }; - version = "1.0.5"; - }; - compass-rails = { - dependencies = ["compass" "sass-rails" "sprockets"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr"; - type = "gem"; - }; - version = "3.1.0"; - }; - concurrent-ruby = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb"; - type = "gem"; - }; - version = "1.1.3"; - }; - configurate = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1"; - type = "gem"; - }; - version = "0.3.1"; - }; - connection_pool = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; - type = "gem"; - }; - version = "2.2.2"; - }; - coveralls = { - dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"; - type = "gem"; - }; - version = "0.8.22"; - }; - crack = { - dependencies = ["safe_yaml"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; - type = "gem"; - }; - version = "0.4.3"; - }; - crass = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; - type = "gem"; - }; - version = "1.0.4"; - }; - cucumber = { - dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j"; - type = "gem"; - }; - version = "3.1.2"; - }; - cucumber-api-steps = { - dependencies = ["cucumber" "jsonpath"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw"; - type = "gem"; - }; - version = "0.14.0"; - }; - cucumber-core = { - dependencies = ["backports" "cucumber-tag_expressions" "gherkin"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c"; - type = "gem"; - }; - version = "3.2.1"; - }; - cucumber-expressions = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw"; - type = "gem"; - }; - version = "6.0.1"; - }; - cucumber-rails = { - dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7"; - type = "gem"; - }; - version = "1.6.0"; - }; - cucumber-tag_expressions = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc"; - type = "gem"; - }; - version = "1.1.1"; - }; - cucumber-wire = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"; - type = "gem"; - }; - version = "0.0.1"; - }; - database_cleaner = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x"; - type = "gem"; - }; - version = "1.7.0"; - }; - devise = { - dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; - type = "gem"; - }; - version = "4.5.0"; - }; - devise_lastseenable = { - dependencies = ["devise" "rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y"; - type = "gem"; - }; - version = "0.0.6"; - }; - diaspora-prosody-config = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp"; - type = "gem"; - }; - version = "0.0.7"; - }; - diaspora_federation = { - dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc"; - type = "gem"; - }; - version = "0.2.5"; - }; - diaspora_federation-json_schema = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr"; - type = "gem"; - }; - version = "0.2.5"; - }; - diaspora_federation-rails = { - dependencies = ["actionpack" "diaspora_federation"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h"; - type = "gem"; - }; - version = "0.2.5"; - }; - diaspora_federation-test = { - dependencies = ["diaspora_federation" "fabrication" "uuid"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4"; - type = "gem"; - }; - version = "0.2.5"; - }; - diff-lcs = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; - type = "gem"; - }; - version = "1.3"; - }; - docile = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; - type = "gem"; - }; - version = "1.3.1"; - }; - domain_name = { - dependencies = ["unf"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; - type = "gem"; - }; - version = "0.5.20180417"; - }; - entypo-rails = { - dependencies = ["railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6"; - type = "gem"; - }; - version = "3.0.0"; - }; - equalizer = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4"; - type = "gem"; - }; - version = "0.0.11"; - }; - erubi = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1"; - type = "gem"; - }; - version = "1.7.1"; - }; - eslintrb = { - dependencies = ["execjs" "multi_json" "rake"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx"; - type = "gem"; - }; - version = "2.1.0"; - }; - et-orbi = { - dependencies = ["tzinfo"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; - type = "gem"; - }; - version = "1.1.6"; - }; - ethon = { - dependencies = ["ffi"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48"; - type = "gem"; - }; - version = "0.11.0"; - }; - excon = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; - type = "gem"; - }; - version = "0.62.0"; - }; - execjs = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; - type = "gem"; - }; - version = "2.7.0"; - }; - eye = { - dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk"; - type = "gem"; - }; - version = "0.10.0"; - }; - fabrication = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; - type = "gem"; - }; - version = "2.20.1"; - }; - factory_girl = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla"; - type = "gem"; - }; - version = "4.8.0"; - }; - factory_girl_rails = { - dependencies = ["factory_girl" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv"; - type = "gem"; - }; - version = "4.8.0"; - }; - faraday = { - dependencies = ["multipart-post"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52"; - type = "gem"; - }; - version = "0.15.3"; - }; - faraday-cookie_jar = { - dependencies = ["faraday" "http-cookie"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6"; - type = "gem"; - }; - version = "0.0.6"; - }; - faraday_middleware = { - dependencies = ["faraday"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d"; - type = "gem"; - }; - version = "0.12.2"; - }; - ffi = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; - type = "gem"; - }; - version = "1.9.25"; - }; - fixture_builder = { - dependencies = ["activerecord" "activesupport" "hashdiff"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627"; - type = "gem"; - }; - version = "0.5.2.rc3"; - }; - fog-aws = { - dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs"; - type = "gem"; - }; - version = "3.3.0"; - }; - fog-core = { - dependencies = ["builder" "excon" "formatador" "mime-types"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8"; - type = "gem"; - }; - version = "2.1.2"; - }; - fog-json = { - dependencies = ["fog-core" "multi_json"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; - type = "gem"; - }; - version = "1.2.0"; - }; - fog-xml = { - dependencies = ["fog-core" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; - type = "gem"; - }; - version = "0.1.3"; - }; - formatador = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; - type = "gem"; - }; - version = "0.2.5"; - }; - fugit = { - dependencies = ["et-orbi" "raabro"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; - type = "gem"; - }; - version = "1.1.6"; - }; - fuubar = { - dependencies = ["rspec-core" "ruby-progressbar"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; - type = "gem"; - }; - version = "2.3.2"; - }; - get_process_mem = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; - type = "gem"; - }; - version = "0.2.3"; - }; - gherkin = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s"; - type = "gem"; - }; - version = "5.1.0"; - }; - gitlab = { - dependencies = ["httparty" "terminal-table"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34"; - type = "gem"; - }; - version = "4.7.0"; - }; - globalid = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; - type = "gem"; - }; - version = "0.4.1"; - }; - gon = { - dependencies = ["actionpack" "multi_json" "request_store"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl"; - type = "gem"; - }; - version = "6.2.1"; - }; - guard = { - dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; - type = "gem"; - }; - version = "2.15.0"; - }; - guard-compat = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; - type = "gem"; - }; - version = "1.2.1"; - }; - guard-rspec = { - dependencies = ["guard" "guard-compat" "rspec"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; - type = "gem"; - }; - version = "4.7.3"; - }; - guard-rubocop = { - dependencies = ["guard" "rubocop"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp"; - type = "gem"; - }; - version = "1.3.0"; - }; - haml = { - dependencies = ["temple" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"; - type = "gem"; - }; - version = "5.0.4"; - }; - haml_lint = { - dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv"; - type = "gem"; - }; - version = "0.28.0"; - }; - hamlit = { - dependencies = ["temple" "thor" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf"; - type = "gem"; - }; - version = "2.9.1"; - }; - handlebars_assets = { - dependencies = ["execjs" "sprockets" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca"; - type = "gem"; - }; - version = "0.23.2"; - }; - hashdiff = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; - type = "gem"; - }; - version = "0.3.7"; - }; - hashie = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb"; - type = "gem"; - }; - version = "3.5.7"; - }; - http = { - dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; - type = "gem"; - }; - version = "3.3.0"; - }; - http-cookie = { - dependencies = ["domain_name"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; - type = "gem"; - }; - version = "1.0.3"; - }; - http-form_data = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; - type = "gem"; - }; - version = "2.1.1"; - }; - http_accept_language = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; - type = "gem"; - }; - version = "2.1.1"; - }; - "http_parser.rb" = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"; - type = "gem"; - }; - version = "0.6.0"; - }; - httparty = { - dependencies = ["mime-types" "multi_xml"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730"; - type = "gem"; - }; - version = "0.16.3"; - }; - httpclient = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; - type = "gem"; - }; - version = "2.8.3"; - }; - i18n = { - dependencies = ["concurrent-ruby"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7"; - type = "gem"; - }; - version = "1.1.1"; - }; - i18n-inflector = { - dependencies = ["i18n"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g"; - type = "gem"; - }; - version = "2.6.7"; - }; - i18n-inflector-rails = { - dependencies = ["actionpack" "i18n-inflector" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk"; - type = "gem"; - }; - version = "1.0.7"; - }; - ipaddress = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; - type = "gem"; - }; - version = "0.8.3"; - }; - jaro_winkler = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah"; - type = "gem"; - }; - version = "1.5.1"; - }; - jasmine = { - dependencies = ["jasmine-core" "phantomjs" "rack" "rake"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1"; - type = "gem"; - }; - version = "3.3.0"; - }; - jasmine-core = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv"; - type = "gem"; - }; - version = "3.3.0"; - }; - jasmine-jquery-rails = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv"; - type = "gem"; - }; - version = "2.0.3"; - }; - jquery-rails = { - dependencies = ["rails-dom-testing" "railties" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8"; - type = "gem"; - }; - version = "4.3.3"; - }; - js-routes = { - dependencies = ["railties" "sprockets-rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm"; - type = "gem"; - }; - version = "1.4.4"; - }; - js_image_paths = { - dependencies = ["rails" "sprockets"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf"; - type = "gem"; - }; - version = "0.1.1"; - }; - json = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; - type = "gem"; - }; - version = "2.1.0"; - }; - json-jwt = { - dependencies = ["activesupport" "aes_key_wrap" "bindata"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r"; - type = "gem"; - }; - version = "1.9.4"; - }; - json-schema = { - dependencies = ["addressable"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; - type = "gem"; - }; - version = "2.8.1"; - }; - json-schema-rspec = { - dependencies = ["json-schema" "rspec"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9"; - type = "gem"; - }; - version = "0.0.4"; - }; - jsonpath = { - dependencies = ["multi_json" "to_regexp"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d"; - type = "gem"; - }; - version = "0.9.6"; - }; - jwt = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; - type = "gem"; - }; - version = "2.1.0"; - }; - kgio = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"; - type = "gem"; - }; - version = "2.11.2"; - }; - kostya-sigar = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb"; - type = "gem"; - }; - version = "2.0.4"; - }; - leaflet-rails = { - dependencies = ["rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb"; - type = "gem"; - }; - version = "1.3.1"; - }; - listen = { - dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; - type = "gem"; - }; - version = "3.1.5"; - }; - little-plugger = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym"; - type = "gem"; - }; - version = "1.1.4"; - }; - logging = { - dependencies = ["little-plugger" "multi_json"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn"; - type = "gem"; - }; - version = "2.2.2"; - }; - logging-rails = { - dependencies = ["logging"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239"; - type = "gem"; - }; - version = "0.6.0"; - }; - loofah = { - dependencies = ["crass" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; - type = "gem"; - }; - version = "2.2.3"; - }; - lumberjack = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; - type = "gem"; - }; - version = "1.0.13"; - }; - macaddr = { - dependencies = ["systemu"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b"; - type = "gem"; - }; - version = "1.7.1"; - }; - mail = { - dependencies = ["mini_mime"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; - type = "gem"; - }; - version = "2.7.1"; - }; - markdown-it-html5-embed = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c"; - type = "gem"; - }; - version = "1.0.0"; - }; - markerb = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76"; - type = "gem"; - }; - version = "1.1.0"; - }; - memoizable = { - dependencies = ["thread_safe"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c"; - type = "gem"; - }; - version = "0.4.2"; - }; - method_source = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; - type = "gem"; - }; - version = "0.9.2"; - }; - mime-types = { - dependencies = ["mime-types-data"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; - type = "gem"; - }; - version = "3.2.2"; - }; - mime-types-data = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; - type = "gem"; - }; - version = "3.2018.0812"; - }; - mini_magick = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p"; - type = "gem"; - }; - version = "4.9.2"; - }; - mini_mime = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; - type = "gem"; - }; - version = "1.0.1"; - }; - mini_portile2 = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11"; - type = "gem"; - }; - version = "2.3.0"; - }; - minitest = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; - type = "gem"; - }; - version = "5.11.3"; - }; - mobile-fu = { - dependencies = ["rack-mobile-detect" "rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i"; - type = "gem"; - }; - version = "1.4.0"; - }; - multi_json = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; - type = "gem"; - }; - version = "1.13.1"; - }; - multi_test = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"; - type = "gem"; - }; - version = "0.1.2"; - }; - multi_xml = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; - type = "gem"; - }; - version = "0.6.0"; - }; - multipart-post = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; - type = "gem"; - }; - version = "2.0.0"; - }; - mysql2 = { - groups = ["mysql"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4"; - type = "gem"; - }; - version = "0.5.2"; - }; - naught = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg"; - type = "gem"; - }; - version = "1.1.0"; - }; - nenv = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; - type = "gem"; - }; - version = "0.3.0"; - }; - nio4r = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; - type = "gem"; - }; - version = "2.3.1"; - }; - nokogiri = { - dependencies = ["mini_portile2"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz"; - type = "gem"; - }; - version = "1.8.5"; - }; - notiffany = { - dependencies = ["nenv" "shellany"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; - type = "gem"; - }; - version = "0.1.1"; - }; - oauth = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y"; - type = "gem"; - }; - version = "0.5.4"; - }; - oauth2 = { - dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"; - type = "gem"; - }; - version = "1.4.1"; - }; - octokit = { - dependencies = ["sawyer"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6"; - type = "gem"; - }; - version = "4.13.0"; - }; - omniauth = { - dependencies = ["hashie" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"; - type = "gem"; - }; - version = "1.8.1"; - }; - omniauth-oauth = { - dependencies = ["oauth" "omniauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037"; - type = "gem"; - }; - version = "1.1.0"; - }; - omniauth-oauth2 = { - dependencies = ["oauth2" "omniauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr"; - type = "gem"; - }; - version = "1.5.0"; - }; - omniauth-tumblr = { - dependencies = ["multi_json" "omniauth-oauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w"; - type = "gem"; - }; - version = "1.2"; - }; - omniauth-twitter = { - dependencies = ["omniauth-oauth" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; - type = "gem"; - }; - version = "1.4.0"; - }; - omniauth-wordpress = { - dependencies = ["omniauth-oauth2"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303"; - type = "gem"; - }; - version = "0.2.2"; - }; - open_graph_reader = { - dependencies = ["faraday" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21"; - type = "gem"; - }; - version = "0.6.2"; - }; - openid_connect = { - dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd"; - type = "gem"; - }; - version = "1.1.6"; - }; - orm_adapter = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; - type = "gem"; - }; - version = "0.5.0"; - }; - parallel = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"; - type = "gem"; - }; - version = "1.12.1"; - }; - parser = { - dependencies = ["ast"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f"; - type = "gem"; - }; - version = "2.5.3.0"; - }; - pg = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"; - type = "gem"; - }; - version = "1.1.3"; - }; - phantomjs = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk"; - type = "gem"; - }; - version = "2.1.1.0"; - }; - poltergeist = { - dependencies = ["capybara" "cliver" "websocket-driver"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95"; - type = "gem"; - }; - version = "1.18.1"; - }; - powerpack = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; - type = "gem"; - }; - version = "0.1.2"; - }; - pronto = { - dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz"; - type = "gem"; - }; - version = "0.9.5"; - }; - pronto-eslint = { - dependencies = ["eslintrb" "pronto"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc"; - type = "gem"; - }; - version = "0.9.1"; - }; - pronto-haml = { - dependencies = ["haml_lint" "pronto"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg"; - type = "gem"; - }; - version = "0.9.0"; - }; - pronto-rubocop = { - dependencies = ["pronto" "rubocop"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy"; - type = "gem"; - }; - version = "0.9.1"; - }; - pronto-scss = { - dependencies = ["pronto" "scss_lint"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za"; - type = "gem"; - }; - version = "0.9.1"; - }; - pry = { - dependencies = ["coderay" "method_source"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; - type = "gem"; - }; - version = "0.12.2"; - }; - pry-byebug = { - dependencies = ["byebug" "pry"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; - type = "gem"; - }; - version = "3.6.0"; - }; - public_suffix = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; - type = "gem"; - }; - version = "3.0.3"; - }; - raabro = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; - type = "gem"; - }; - version = "1.1.6"; - }; - rack = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; - type = "gem"; - }; - version = "2.0.6"; - }; - rack-cors = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; - type = "gem"; - }; - version = "1.0.2"; - }; - rack-google-analytics = { - dependencies = ["actionpack" "activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj"; - type = "gem"; - }; - version = "1.2.0"; - }; - rack-mobile-detect = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5"; - type = "gem"; - }; - version = "0.4.0"; - }; - rack-oauth2 = { - dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii"; - type = "gem"; - }; - version = "1.9.3"; - }; - rack-piwik = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z"; - type = "gem"; - }; - version = "0.3.0"; - }; - rack-protection = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq"; - type = "gem"; - }; - version = "2.0.4"; - }; - rack-rewrite = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; - type = "gem"; - }; - version = "1.5.1"; - }; - rack-ssl = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; - type = "gem"; - }; - version = "1.4.1"; - }; - rack-test = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; - type = "gem"; - }; - version = "1.1.0"; - }; - rails = { - dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q"; - type = "gem"; - }; - version = "5.1.6"; - }; - rails-assets-autosize = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib"; - type = "gem"; - }; - version = "4.0.2"; - }; - rails-assets-backbone = { - dependencies = ["rails-assets-underscore"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id"; - type = "gem"; - }; - version = "1.3.3"; - }; - rails-assets-blueimp-gallery = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq"; - type = "gem"; - }; - version = "2.33.0"; - }; - rails-assets-bootstrap = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v"; - type = "gem"; - }; - version = "3.3.7"; - }; - rails-assets-bootstrap-markdown = { - dependencies = ["rails-assets-bootstrap"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3"; - type = "gem"; - }; - version = "2.10.0"; - }; - rails-assets-corejs-typeahead = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg"; - type = "gem"; - }; - version = "1.2.1"; - }; - rails-assets-diaspora_jsxc = { - dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi"; - type = "gem"; - }; - version = "0.1.5.develop.7"; - }; - rails-assets-emojione = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52"; - type = "gem"; - }; - version = "2.0.1"; - }; - "rails-assets-favico.js" = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv"; - type = "gem"; - }; - version = "0.3.10"; - }; - rails-assets-fine-uploader = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv"; - type = "gem"; - }; - version = "5.13.0"; - }; - rails-assets-highlightjs = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp"; - type = "gem"; - }; - version = "9.12.0"; - }; - rails-assets-jasmine = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5"; - type = "gem"; - }; - version = "3.3.0"; - }; - rails-assets-jasmine-ajax = { - dependencies = ["rails-assets-jasmine"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg"; - type = "gem"; - }; - version = "3.4.0"; - }; - rails-assets-jquery = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y"; - type = "gem"; - }; - version = "3.3.1"; - }; - rails-assets-jquery-colorbox = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp"; - type = "gem"; - }; - version = "1.6.4"; - }; - rails-assets-jquery-fullscreen-plugin = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58"; - type = "gem"; - }; - version = "0.5.0"; - }; - rails-assets-jquery-placeholder = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi"; - type = "gem"; - }; - version = "2.3.1"; - }; - rails-assets-jquery-textchange = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj"; - type = "gem"; - }; - version = "0.2.3"; - }; - "rails-assets-jquery.are-you-sure" = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0"; - type = "gem"; - }; - version = "1.9.0"; - }; - "rails-assets-jquery.slimscroll" = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998"; - type = "gem"; - }; - version = "1.3.8"; - }; - "rails-assets-jquery.ui" = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa"; - type = "gem"; - }; - version = "1.11.4"; - }; - rails-assets-markdown-it = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9"; - type = "gem"; - }; - version = "8.4.2"; - }; - rails-assets-markdown-it--markdown-it-for-inline = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl"; - type = "gem"; - }; - version = "0.1.1"; - }; - rails-assets-markdown-it-diaspora-mention = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig"; - type = "gem"; - }; - version = "1.2.0"; - }; - rails-assets-markdown-it-hashtag = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk"; - type = "gem"; - }; - version = "0.4.0"; - }; - rails-assets-markdown-it-sanitizer = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36"; - type = "gem"; - }; - version = "0.4.3"; - }; - rails-assets-markdown-it-sub = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk"; - type = "gem"; - }; - version = "1.0.0"; - }; - rails-assets-markdown-it-sup = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig"; - type = "gem"; - }; - version = "1.0.0"; - }; - rails-assets-underscore = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc"; - type = "gem"; - }; - version = "1.9.1"; - }; - rails-assets-utatti-perfect-scrollbar = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v"; - type = "gem"; - }; - version = "1.4.0"; - }; - rails-controller-testing = { - dependencies = ["actionpack" "actionview" "activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy"; - type = "gem"; - }; - version = "1.0.2"; - }; - rails-dom-testing = { - dependencies = ["activesupport" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; - type = "gem"; - }; - version = "2.0.3"; - }; - rails-html-sanitizer = { - dependencies = ["loofah"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; - type = "gem"; - }; - version = "1.0.4"; - }; - rails-i18n = { - dependencies = ["i18n" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; - type = "gem"; - }; - version = "5.1.2"; - }; - rails-timeago = { - dependencies = ["actionpack" "activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv"; - type = "gem"; - }; - version = "2.16.0"; - }; - railties = { - dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8"; - type = "gem"; - }; - version = "5.1.6"; - }; - rainbow = { - dependencies = ["rake"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w"; - type = "gem"; - }; - version = "2.2.2"; - }; - raindrops = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"; - type = "gem"; - }; - version = "0.19.0"; - }; - rake = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"; - type = "gem"; - }; - version = "12.3.1"; - }; - rb-fsevent = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; - type = "gem"; - }; - version = "0.10.3"; - }; - rb-inotify = { - dependencies = ["ffi"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; - type = "gem"; - }; - version = "0.9.10"; - }; - redcarpet = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; - type = "gem"; - }; - version = "3.4.0"; - }; - redis = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv"; - type = "gem"; - }; - version = "3.3.5"; - }; - regexp_parser = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; - type = "gem"; - }; - version = "1.3.0"; - }; - request_store = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; - type = "gem"; - }; - version = "1.4.1"; - }; - responders = { - dependencies = ["actionpack" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; - type = "gem"; - }; - version = "2.4.0"; - }; - rspec = { - dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"; - type = "gem"; - }; - version = "3.8.0"; - }; - rspec-core = { - dependencies = ["rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; - type = "gem"; - }; - version = "3.8.0"; - }; - rspec-expectations = { - dependencies = ["diff-lcs" "rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; - type = "gem"; - }; - version = "3.8.2"; - }; - rspec-json_expectations = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn"; - type = "gem"; - }; - version = "2.1.0"; - }; - rspec-mocks = { - dependencies = ["diff-lcs" "rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; - type = "gem"; - }; - version = "3.8.0"; - }; - rspec-rails = { - dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p"; - type = "gem"; - }; - version = "3.8.1"; - }; - rspec-support = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; - type = "gem"; - }; - version = "3.8.0"; - }; - rubocop = { - dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i"; - type = "gem"; - }; - version = "0.60.0"; - }; - ruby-oembed = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0"; - type = "gem"; - }; - version = "0.12.0"; - }; - ruby-progressbar = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; - type = "gem"; - }; - version = "1.10.0"; - }; - ruby_dep = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; - type = "gem"; - }; - version = "1.5.0"; - }; - rubyzip = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj"; - type = "gem"; - }; - version = "1.2.2"; - }; - rugged = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6"; - type = "gem"; - }; - version = "0.27.5"; - }; - safe_yaml = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; - type = "gem"; - }; - version = "1.0.4"; - }; - sass = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; - type = "gem"; - }; - version = "3.4.25"; - }; - sass-rails = { - dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"; - type = "gem"; - }; - version = "5.0.7"; - }; - sawyer = { - dependencies = ["addressable" "faraday"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; - type = "gem"; - }; - version = "0.8.1"; - }; - scss_lint = { - dependencies = ["rake" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp"; - type = "gem"; - }; - version = "0.55.0"; - }; - secure_headers = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5"; - type = "gem"; - }; - version = "6.0.0"; - }; - shellany = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; - type = "gem"; - }; - version = "0.0.1"; - }; - shoulda-matchers = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"; - type = "gem"; - }; - version = "3.1.2"; - }; - sidekiq = { - dependencies = ["connection_pool" "rack-protection" "redis"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26"; - type = "gem"; - }; - version = "5.2.3"; - }; - sidekiq-cron = { - dependencies = ["fugit" "sidekiq"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0"; - type = "gem"; - }; - version = "1.0.4"; - }; - simple_captcha2 = { - dependencies = ["rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3"; - type = "gem"; - }; - version = "0.4.3"; - }; - simple_oauth = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l"; - type = "gem"; - }; - version = "0.3.1"; - }; - simplecov = { - dependencies = ["docile" "json" "simplecov-html"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; - type = "gem"; - }; - version = "0.16.1"; - }; - simplecov-html = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; - type = "gem"; - }; - version = "0.10.2"; - }; - sinon-rails = { - dependencies = ["railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb"; - type = "gem"; - }; - version = "1.15.0"; - }; - spring = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75"; - type = "gem"; - }; - version = "2.0.2"; - }; - spring-commands-cucumber = { - dependencies = ["spring"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a"; - type = "gem"; - }; - version = "1.0.1"; - }; - spring-commands-rspec = { - dependencies = ["spring"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; - type = "gem"; - }; - version = "1.0.4"; - }; - sprockets = { - dependencies = ["concurrent-ruby" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; - type = "gem"; - }; - version = "3.7.2"; - }; - sprockets-rails = { - dependencies = ["actionpack" "activesupport" "sprockets"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; - type = "gem"; - }; - version = "3.2.1"; - }; - state_machines = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; - type = "gem"; - }; - version = "0.5.0"; - }; - string-direction = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj"; - type = "gem"; - }; - version = "1.2.1"; - }; - swd = { - dependencies = ["activesupport" "attr_required" "httpclient"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd"; - type = "gem"; - }; - version = "1.1.2"; - }; - sysexits = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; - type = "gem"; - }; - version = "1.2.0"; - }; - systemu = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"; - type = "gem"; - }; - version = "2.6.5"; - }; - temple = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; - type = "gem"; - }; - version = "0.8.0"; - }; - term-ansicolor = { - dependencies = ["tins"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d"; - type = "gem"; - }; - version = "1.7.0"; - }; - terminal-table = { - dependencies = ["unicode-display_width"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; - type = "gem"; - }; - version = "1.8.0"; - }; - thor = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; - type = "gem"; - }; - version = "0.19.4"; - }; - thread_safe = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; - type = "gem"; - }; - version = "0.3.6"; - }; - tilt = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; - type = "gem"; - }; - version = "2.0.8"; - }; - timecop = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp"; - type = "gem"; - }; - version = "0.9.1"; - }; - timers = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; - type = "gem"; - }; - version = "4.2.0"; - }; - tins = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj"; - type = "gem"; - }; - version = "1.20.2"; - }; - to_regexp = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v"; - type = "gem"; - }; - version = "0.2.1"; - }; - turbo_dev_assets = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx"; - type = "gem"; - }; - version = "0.0.2"; - }; - twitter = { - dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5"; - type = "gem"; - }; - version = "6.2.0"; - }; - twitter-text = { - dependencies = ["unf"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; - type = "gem"; - }; - version = "1.14.7"; - }; - typhoeus = { - dependencies = ["ethon"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5"; - type = "gem"; - }; - version = "1.3.1"; - }; - tzinfo = { - dependencies = ["thread_safe"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; - type = "gem"; - }; - version = "1.2.5"; - }; - uglifier = { - dependencies = ["execjs"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1"; - type = "gem"; - }; - version = "4.1.19"; - }; - unf = { - dependencies = ["unf_ext"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; - type = "gem"; - }; - version = "0.1.4"; - }; - unf_ext = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; - type = "gem"; - }; - version = "0.0.7.5"; - }; - unicode-display_width = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57"; - type = "gem"; - }; - version = "1.4.0"; - }; - unicorn = { - dependencies = ["kgio" "raindrops"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak"; - type = "gem"; - }; - version = "5.4.1"; - }; - unicorn-worker-killer = { - dependencies = ["get_process_mem" "unicorn"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva"; - type = "gem"; - }; - version = "0.4.4"; - }; - uuid = { - dependencies = ["macaddr"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f"; - type = "gem"; - }; - version = "2.3.9"; - }; - valid = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3"; - type = "gem"; - }; - version = "1.2.0"; - }; - validate_email = { - dependencies = ["activemodel" "mail"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; - type = "gem"; - }; - version = "0.1.6"; - }; - validate_url = { - dependencies = ["activemodel" "addressable"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh"; - type = "gem"; - }; - version = "1.0.2"; - }; - versionist = { - dependencies = ["activesupport" "railties" "yard"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m"; - type = "gem"; - }; - version = "1.7.0"; - }; - warden = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"; - type = "gem"; - }; - version = "1.2.8"; - }; - webfinger = { - dependencies = ["activesupport" "httpclient"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar"; - type = "gem"; - }; - version = "1.1.0"; - }; - webmock = { - dependencies = ["addressable" "crack" "hashdiff"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib"; - type = "gem"; - }; - version = "3.4.2"; - }; - websocket-driver = { - dependencies = ["websocket-extensions"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l"; - type = "gem"; - }; - version = "0.6.5"; - }; - websocket-extensions = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; - type = "gem"; - }; - version = "0.1.3"; - }; - will_paginate = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9"; - type = "gem"; - }; - version = "3.1.6"; - }; - xpath = { - dependencies = ["nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; - type = "gem"; - }; - version = "3.2.0"; - }; - yard = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"; - type = "gem"; - }; - version = "0.9.16"; - }; -} diff --git a/pkgs/webapps/diaspora/gemset_ldap.nix b/pkgs/webapps/diaspora/gemset_ldap.nix deleted file mode 100644 index d7892f8..0000000 --- a/pkgs/webapps/diaspora/gemset_ldap.nix +++ /dev/null @@ -1,3056 +0,0 @@ -{ - actioncable = { - dependencies = ["actionpack" "nio4r" "websocket-driver"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf"; - type = "gem"; - }; - version = "5.1.6"; - }; - actionmailer = { - dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c"; - type = "gem"; - }; - version = "5.1.6"; - }; - actionpack = { - dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd"; - type = "gem"; - }; - version = "5.1.6"; - }; - actionview = { - dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081"; - type = "gem"; - }; - version = "5.1.6"; - }; - active_model_serializers = { - dependencies = ["activemodel" "concurrent-ruby"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z"; - type = "gem"; - }; - version = "0.9.7"; - }; - activejob = { - dependencies = ["activesupport" "globalid"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2"; - type = "gem"; - }; - version = "5.1.6"; - }; - activemodel = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby"; - type = "gem"; - }; - version = "5.1.6"; - }; - activerecord = { - dependencies = ["activemodel" "activesupport" "arel"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x"; - type = "gem"; - }; - version = "5.1.6"; - }; - activerecord-import = { - dependencies = ["activerecord"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6"; - type = "gem"; - }; - version = "0.27.0"; - }; - activesupport = { - dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll"; - type = "gem"; - }; - version = "5.1.6"; - }; - acts-as-taggable-on = { - dependencies = ["activerecord"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl"; - type = "gem"; - }; - version = "6.0.0"; - }; - acts_as_api = { - dependencies = ["activemodel" "activesupport" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc"; - type = "gem"; - }; - version = "1.0.1"; - }; - addressable = { - dependencies = ["public_suffix"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; - type = "gem"; - }; - version = "2.5.2"; - }; - aes_key_wrap = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07"; - type = "gem"; - }; - version = "1.0.1"; - }; - arel = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"; - type = "gem"; - }; - version = "8.0.0"; - }; - asset_sync = { - dependencies = ["activemodel" "fog-core" "mime-types" "unf"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx"; - type = "gem"; - }; - version = "2.5.0"; - }; - ast = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; - type = "gem"; - }; - version = "2.4.0"; - }; - attr_required = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; - type = "gem"; - }; - version = "1.0.1"; - }; - autoprefixer-rails = { - dependencies = ["execjs"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3"; - type = "gem"; - }; - version = "8.6.5"; - }; - backports = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"; - type = "gem"; - }; - version = "3.11.4"; - }; - bcrypt = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; - type = "gem"; - }; - version = "3.1.12"; - }; - bindata = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy"; - type = "gem"; - }; - version = "2.4.4"; - }; - bootstrap-sass = { - dependencies = ["autoprefixer-rails" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"; - type = "gem"; - }; - version = "3.3.7"; - }; - bootstrap-switch-rails = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l"; - type = "gem"; - }; - version = "3.3.3"; - }; - buftok = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs"; - type = "gem"; - }; - version = "0.2.0"; - }; - builder = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; - type = "gem"; - }; - version = "3.2.3"; - }; - byebug = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; - type = "gem"; - }; - version = "10.0.2"; - }; - capybara = { - dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m"; - type = "gem"; - }; - version = "3.11.1"; - }; - carrierwave = { - dependencies = ["activemodel" "activesupport" "mime-types"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs"; - type = "gem"; - }; - version = "1.2.3"; - }; - celluloid = { - dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg"; - type = "gem"; - }; - version = "0.17.3"; - }; - celluloid-essentials = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-extras = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-fsm = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-io = { - dependencies = ["celluloid" "nio4r" "timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314"; - type = "gem"; - }; - version = "0.17.3"; - }; - celluloid-pool = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c"; - type = "gem"; - }; - version = "0.20.5"; - }; - celluloid-supervision = { - dependencies = ["timers"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw"; - type = "gem"; - }; - version = "0.20.6"; - }; - chunky_png = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; - type = "gem"; - }; - version = "1.3.10"; - }; - cliver = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; - type = "gem"; - }; - version = "0.3.2"; - }; - coderay = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; - type = "gem"; - }; - version = "1.1.2"; - }; - compass = { - dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; - type = "gem"; - }; - version = "1.0.3"; - }; - compass-core = { - dependencies = ["multi_json" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; - type = "gem"; - }; - version = "1.0.3"; - }; - compass-import-once = { - dependencies = ["sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; - type = "gem"; - }; - version = "1.0.5"; - }; - compass-rails = { - dependencies = ["compass" "sass-rails" "sprockets"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr"; - type = "gem"; - }; - version = "3.1.0"; - }; - concurrent-ruby = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb"; - type = "gem"; - }; - version = "1.1.3"; - }; - configurate = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1"; - type = "gem"; - }; - version = "0.3.1"; - }; - connection_pool = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; - type = "gem"; - }; - version = "2.2.2"; - }; - coveralls = { - dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"; - type = "gem"; - }; - version = "0.8.22"; - }; - crack = { - dependencies = ["safe_yaml"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; - type = "gem"; - }; - version = "0.4.3"; - }; - crass = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; - type = "gem"; - }; - version = "1.0.4"; - }; - cucumber = { - dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j"; - type = "gem"; - }; - version = "3.1.2"; - }; - cucumber-api-steps = { - dependencies = ["cucumber" "jsonpath"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw"; - type = "gem"; - }; - version = "0.14.0"; - }; - cucumber-core = { - dependencies = ["backports" "cucumber-tag_expressions" "gherkin"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c"; - type = "gem"; - }; - version = "3.2.1"; - }; - cucumber-expressions = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw"; - type = "gem"; - }; - version = "6.0.1"; - }; - cucumber-rails = { - dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7"; - type = "gem"; - }; - version = "1.6.0"; - }; - cucumber-tag_expressions = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc"; - type = "gem"; - }; - version = "1.1.1"; - }; - cucumber-wire = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"; - type = "gem"; - }; - version = "0.0.1"; - }; - database_cleaner = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x"; - type = "gem"; - }; - version = "1.7.0"; - }; - devise = { - dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; - type = "gem"; - }; - version = "4.5.0"; - }; - devise_lastseenable = { - dependencies = ["devise" "rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y"; - type = "gem"; - }; - version = "0.0.6"; - }; - diaspora-prosody-config = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp"; - type = "gem"; - }; - version = "0.0.7"; - }; - diaspora_federation = { - dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc"; - type = "gem"; - }; - version = "0.2.5"; - }; - diaspora_federation-json_schema = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr"; - type = "gem"; - }; - version = "0.2.5"; - }; - diaspora_federation-rails = { - dependencies = ["actionpack" "diaspora_federation"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h"; - type = "gem"; - }; - version = "0.2.5"; - }; - diaspora_federation-test = { - dependencies = ["diaspora_federation" "fabrication" "uuid"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4"; - type = "gem"; - }; - version = "0.2.5"; - }; - diff-lcs = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; - type = "gem"; - }; - version = "1.3"; - }; - docile = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; - type = "gem"; - }; - version = "1.3.1"; - }; - domain_name = { - dependencies = ["unf"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; - type = "gem"; - }; - version = "0.5.20180417"; - }; - entypo-rails = { - dependencies = ["railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6"; - type = "gem"; - }; - version = "3.0.0"; - }; - equalizer = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4"; - type = "gem"; - }; - version = "0.0.11"; - }; - erubi = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1"; - type = "gem"; - }; - version = "1.7.1"; - }; - eslintrb = { - dependencies = ["execjs" "multi_json" "rake"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx"; - type = "gem"; - }; - version = "2.1.0"; - }; - et-orbi = { - dependencies = ["tzinfo"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; - type = "gem"; - }; - version = "1.1.6"; - }; - ethon = { - dependencies = ["ffi"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48"; - type = "gem"; - }; - version = "0.11.0"; - }; - excon = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; - type = "gem"; - }; - version = "0.62.0"; - }; - execjs = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; - type = "gem"; - }; - version = "2.7.0"; - }; - eye = { - dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk"; - type = "gem"; - }; - version = "0.10.0"; - }; - fabrication = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; - type = "gem"; - }; - version = "2.20.1"; - }; - factory_girl = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla"; - type = "gem"; - }; - version = "4.8.0"; - }; - factory_girl_rails = { - dependencies = ["factory_girl" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv"; - type = "gem"; - }; - version = "4.8.0"; - }; - faraday = { - dependencies = ["multipart-post"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52"; - type = "gem"; - }; - version = "0.15.3"; - }; - faraday-cookie_jar = { - dependencies = ["faraday" "http-cookie"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6"; - type = "gem"; - }; - version = "0.0.6"; - }; - faraday_middleware = { - dependencies = ["faraday"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d"; - type = "gem"; - }; - version = "0.12.2"; - }; - ffi = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; - type = "gem"; - }; - version = "1.9.25"; - }; - fixture_builder = { - dependencies = ["activerecord" "activesupport" "hashdiff"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627"; - type = "gem"; - }; - version = "0.5.2.rc3"; - }; - fog-aws = { - dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs"; - type = "gem"; - }; - version = "3.3.0"; - }; - fog-core = { - dependencies = ["builder" "excon" "formatador" "mime-types"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8"; - type = "gem"; - }; - version = "2.1.2"; - }; - fog-json = { - dependencies = ["fog-core" "multi_json"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; - type = "gem"; - }; - version = "1.2.0"; - }; - fog-xml = { - dependencies = ["fog-core" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; - type = "gem"; - }; - version = "0.1.3"; - }; - formatador = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; - type = "gem"; - }; - version = "0.2.5"; - }; - fugit = { - dependencies = ["et-orbi" "raabro"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; - type = "gem"; - }; - version = "1.1.6"; - }; - fuubar = { - dependencies = ["rspec-core" "ruby-progressbar"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; - type = "gem"; - }; - version = "2.3.2"; - }; - get_process_mem = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; - type = "gem"; - }; - version = "0.2.3"; - }; - gherkin = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s"; - type = "gem"; - }; - version = "5.1.0"; - }; - gitlab = { - dependencies = ["httparty" "terminal-table"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34"; - type = "gem"; - }; - version = "4.7.0"; - }; - globalid = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; - type = "gem"; - }; - version = "0.4.1"; - }; - gon = { - dependencies = ["actionpack" "multi_json" "request_store"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl"; - type = "gem"; - }; - version = "6.2.1"; - }; - guard = { - dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; - type = "gem"; - }; - version = "2.15.0"; - }; - guard-compat = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; - type = "gem"; - }; - version = "1.2.1"; - }; - guard-rspec = { - dependencies = ["guard" "guard-compat" "rspec"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; - type = "gem"; - }; - version = "4.7.3"; - }; - guard-rubocop = { - dependencies = ["guard" "rubocop"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp"; - type = "gem"; - }; - version = "1.3.0"; - }; - haml = { - dependencies = ["temple" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"; - type = "gem"; - }; - version = "5.0.4"; - }; - haml_lint = { - dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv"; - type = "gem"; - }; - version = "0.28.0"; - }; - hamlit = { - dependencies = ["temple" "thor" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf"; - type = "gem"; - }; - version = "2.9.1"; - }; - handlebars_assets = { - dependencies = ["execjs" "sprockets" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca"; - type = "gem"; - }; - version = "0.23.2"; - }; - hashdiff = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; - type = "gem"; - }; - version = "0.3.7"; - }; - hashie = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb"; - type = "gem"; - }; - version = "3.5.7"; - }; - http = { - dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; - type = "gem"; - }; - version = "3.3.0"; - }; - http-cookie = { - dependencies = ["domain_name"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; - type = "gem"; - }; - version = "1.0.3"; - }; - http-form_data = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; - type = "gem"; - }; - version = "2.1.1"; - }; - http_accept_language = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; - type = "gem"; - }; - version = "2.1.1"; - }; - "http_parser.rb" = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"; - type = "gem"; - }; - version = "0.6.0"; - }; - httparty = { - dependencies = ["mime-types" "multi_xml"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730"; - type = "gem"; - }; - version = "0.16.3"; - }; - httpclient = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; - type = "gem"; - }; - version = "2.8.3"; - }; - i18n = { - dependencies = ["concurrent-ruby"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7"; - type = "gem"; - }; - version = "1.1.1"; - }; - i18n-inflector = { - dependencies = ["i18n"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g"; - type = "gem"; - }; - version = "2.6.7"; - }; - i18n-inflector-rails = { - dependencies = ["actionpack" "i18n-inflector" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk"; - type = "gem"; - }; - version = "1.0.7"; - }; - ipaddress = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; - type = "gem"; - }; - version = "0.8.3"; - }; - jaro_winkler = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah"; - type = "gem"; - }; - version = "1.5.1"; - }; - jasmine = { - dependencies = ["jasmine-core" "phantomjs" "rack" "rake"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1"; - type = "gem"; - }; - version = "3.3.0"; - }; - jasmine-core = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv"; - type = "gem"; - }; - version = "3.3.0"; - }; - jasmine-jquery-rails = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv"; - type = "gem"; - }; - version = "2.0.3"; - }; - jquery-rails = { - dependencies = ["rails-dom-testing" "railties" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8"; - type = "gem"; - }; - version = "4.3.3"; - }; - js-routes = { - dependencies = ["railties" "sprockets-rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm"; - type = "gem"; - }; - version = "1.4.4"; - }; - js_image_paths = { - dependencies = ["rails" "sprockets"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf"; - type = "gem"; - }; - version = "0.1.1"; - }; - json = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; - type = "gem"; - }; - version = "2.1.0"; - }; - json-jwt = { - dependencies = ["activesupport" "aes_key_wrap" "bindata"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r"; - type = "gem"; - }; - version = "1.9.4"; - }; - json-schema = { - dependencies = ["addressable"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; - type = "gem"; - }; - version = "2.8.1"; - }; - json-schema-rspec = { - dependencies = ["json-schema" "rspec"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9"; - type = "gem"; - }; - version = "0.0.4"; - }; - jsonpath = { - dependencies = ["multi_json" "to_regexp"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d"; - type = "gem"; - }; - version = "0.9.6"; - }; - jwt = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; - type = "gem"; - }; - version = "2.1.0"; - }; - kgio = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"; - type = "gem"; - }; - version = "2.11.2"; - }; - kostya-sigar = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb"; - type = "gem"; - }; - version = "2.0.4"; - }; - leaflet-rails = { - dependencies = ["rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb"; - type = "gem"; - }; - version = "1.3.1"; - }; - listen = { - dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; - type = "gem"; - }; - version = "3.1.5"; - }; - little-plugger = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym"; - type = "gem"; - }; - version = "1.1.4"; - }; - logging = { - dependencies = ["little-plugger" "multi_json"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn"; - type = "gem"; - }; - version = "2.2.2"; - }; - logging-rails = { - dependencies = ["logging"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239"; - type = "gem"; - }; - version = "0.6.0"; - }; - loofah = { - dependencies = ["crass" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; - type = "gem"; - }; - version = "2.2.3"; - }; - lumberjack = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; - type = "gem"; - }; - version = "1.0.13"; - }; - macaddr = { - dependencies = ["systemu"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b"; - type = "gem"; - }; - version = "1.7.1"; - }; - mail = { - dependencies = ["mini_mime"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; - type = "gem"; - }; - version = "2.7.1"; - }; - markdown-it-html5-embed = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c"; - type = "gem"; - }; - version = "1.0.0"; - }; - markerb = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76"; - type = "gem"; - }; - version = "1.1.0"; - }; - memoizable = { - dependencies = ["thread_safe"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c"; - type = "gem"; - }; - version = "0.4.2"; - }; - method_source = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; - type = "gem"; - }; - version = "0.9.2"; - }; - mime-types = { - dependencies = ["mime-types-data"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; - type = "gem"; - }; - version = "3.2.2"; - }; - mime-types-data = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; - type = "gem"; - }; - version = "3.2018.0812"; - }; - mini_magick = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p"; - type = "gem"; - }; - version = "4.9.2"; - }; - mini_mime = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; - type = "gem"; - }; - version = "1.0.1"; - }; - mini_portile2 = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11"; - type = "gem"; - }; - version = "2.3.0"; - }; - minitest = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; - type = "gem"; - }; - version = "5.11.3"; - }; - mobile-fu = { - dependencies = ["rack-mobile-detect" "rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i"; - type = "gem"; - }; - version = "1.4.0"; - }; - multi_json = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; - type = "gem"; - }; - version = "1.13.1"; - }; - multi_test = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"; - type = "gem"; - }; - version = "0.1.2"; - }; - multi_xml = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; - type = "gem"; - }; - version = "0.6.0"; - }; - multipart-post = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; - type = "gem"; - }; - version = "2.0.0"; - }; - mysql2 = { - groups = ["mysql"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4"; - type = "gem"; - }; - version = "0.5.2"; - }; - naught = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg"; - type = "gem"; - }; - version = "1.1.0"; - }; - nenv = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; - type = "gem"; - }; - version = "0.3.0"; - }; - net-ldap = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "016igqz81a8zcwqzp5bbhryqmb2skmyf57ij3nb5z8sxwhw22jgh"; - type = "gem"; - }; - version = "0.16.1"; - }; - nio4r = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; - type = "gem"; - }; - version = "2.3.1"; - }; - nokogiri = { - dependencies = ["mini_portile2"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz"; - type = "gem"; - }; - version = "1.8.5"; - }; - notiffany = { - dependencies = ["nenv" "shellany"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; - type = "gem"; - }; - version = "0.1.1"; - }; - oauth = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y"; - type = "gem"; - }; - version = "0.5.4"; - }; - oauth2 = { - dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"; - type = "gem"; - }; - version = "1.4.1"; - }; - octokit = { - dependencies = ["sawyer"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6"; - type = "gem"; - }; - version = "4.13.0"; - }; - omniauth = { - dependencies = ["hashie" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"; - type = "gem"; - }; - version = "1.8.1"; - }; - omniauth-oauth = { - dependencies = ["oauth" "omniauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037"; - type = "gem"; - }; - version = "1.1.0"; - }; - omniauth-oauth2 = { - dependencies = ["oauth2" "omniauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr"; - type = "gem"; - }; - version = "1.5.0"; - }; - omniauth-tumblr = { - dependencies = ["multi_json" "omniauth-oauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w"; - type = "gem"; - }; - version = "1.2"; - }; - omniauth-twitter = { - dependencies = ["omniauth-oauth" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; - type = "gem"; - }; - version = "1.4.0"; - }; - omniauth-wordpress = { - dependencies = ["omniauth-oauth2"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303"; - type = "gem"; - }; - version = "0.2.2"; - }; - open_graph_reader = { - dependencies = ["faraday" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21"; - type = "gem"; - }; - version = "0.6.2"; - }; - openid_connect = { - dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd"; - type = "gem"; - }; - version = "1.1.6"; - }; - orm_adapter = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; - type = "gem"; - }; - version = "0.5.0"; - }; - parallel = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"; - type = "gem"; - }; - version = "1.12.1"; - }; - parser = { - dependencies = ["ast"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f"; - type = "gem"; - }; - version = "2.5.3.0"; - }; - pg = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"; - type = "gem"; - }; - version = "1.1.3"; - }; - phantomjs = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk"; - type = "gem"; - }; - version = "2.1.1.0"; - }; - poltergeist = { - dependencies = ["capybara" "cliver" "websocket-driver"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95"; - type = "gem"; - }; - version = "1.18.1"; - }; - powerpack = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; - type = "gem"; - }; - version = "0.1.2"; - }; - pronto = { - dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz"; - type = "gem"; - }; - version = "0.9.5"; - }; - pronto-eslint = { - dependencies = ["eslintrb" "pronto"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc"; - type = "gem"; - }; - version = "0.9.1"; - }; - pronto-haml = { - dependencies = ["haml_lint" "pronto"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg"; - type = "gem"; - }; - version = "0.9.0"; - }; - pronto-rubocop = { - dependencies = ["pronto" "rubocop"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy"; - type = "gem"; - }; - version = "0.9.1"; - }; - pronto-scss = { - dependencies = ["pronto" "scss_lint"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za"; - type = "gem"; - }; - version = "0.9.1"; - }; - pry = { - dependencies = ["coderay" "method_source"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; - type = "gem"; - }; - version = "0.12.2"; - }; - pry-byebug = { - dependencies = ["byebug" "pry"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; - type = "gem"; - }; - version = "3.6.0"; - }; - public_suffix = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; - type = "gem"; - }; - version = "3.0.3"; - }; - raabro = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; - type = "gem"; - }; - version = "1.1.6"; - }; - rack = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; - type = "gem"; - }; - version = "2.0.6"; - }; - rack-cors = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; - type = "gem"; - }; - version = "1.0.2"; - }; - rack-google-analytics = { - dependencies = ["actionpack" "activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj"; - type = "gem"; - }; - version = "1.2.0"; - }; - rack-mobile-detect = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5"; - type = "gem"; - }; - version = "0.4.0"; - }; - rack-oauth2 = { - dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii"; - type = "gem"; - }; - version = "1.9.3"; - }; - rack-piwik = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z"; - type = "gem"; - }; - version = "0.3.0"; - }; - rack-protection = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq"; - type = "gem"; - }; - version = "2.0.4"; - }; - rack-rewrite = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; - type = "gem"; - }; - version = "1.5.1"; - }; - rack-ssl = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; - type = "gem"; - }; - version = "1.4.1"; - }; - rack-test = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; - type = "gem"; - }; - version = "1.1.0"; - }; - rails = { - dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q"; - type = "gem"; - }; - version = "5.1.6"; - }; - rails-assets-autosize = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib"; - type = "gem"; - }; - version = "4.0.2"; - }; - rails-assets-backbone = { - dependencies = ["rails-assets-underscore"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id"; - type = "gem"; - }; - version = "1.3.3"; - }; - rails-assets-blueimp-gallery = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq"; - type = "gem"; - }; - version = "2.33.0"; - }; - rails-assets-bootstrap = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v"; - type = "gem"; - }; - version = "3.3.7"; - }; - rails-assets-bootstrap-markdown = { - dependencies = ["rails-assets-bootstrap"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3"; - type = "gem"; - }; - version = "2.10.0"; - }; - rails-assets-corejs-typeahead = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg"; - type = "gem"; - }; - version = "1.2.1"; - }; - rails-assets-diaspora_jsxc = { - dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi"; - type = "gem"; - }; - version = "0.1.5.develop.7"; - }; - rails-assets-emojione = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52"; - type = "gem"; - }; - version = "2.0.1"; - }; - "rails-assets-favico.js" = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv"; - type = "gem"; - }; - version = "0.3.10"; - }; - rails-assets-fine-uploader = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv"; - type = "gem"; - }; - version = "5.13.0"; - }; - rails-assets-highlightjs = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp"; - type = "gem"; - }; - version = "9.12.0"; - }; - rails-assets-jasmine = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5"; - type = "gem"; - }; - version = "3.3.0"; - }; - rails-assets-jasmine-ajax = { - dependencies = ["rails-assets-jasmine"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg"; - type = "gem"; - }; - version = "3.4.0"; - }; - rails-assets-jquery = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y"; - type = "gem"; - }; - version = "3.3.1"; - }; - rails-assets-jquery-colorbox = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp"; - type = "gem"; - }; - version = "1.6.4"; - }; - rails-assets-jquery-fullscreen-plugin = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58"; - type = "gem"; - }; - version = "0.5.0"; - }; - rails-assets-jquery-placeholder = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi"; - type = "gem"; - }; - version = "2.3.1"; - }; - rails-assets-jquery-textchange = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj"; - type = "gem"; - }; - version = "0.2.3"; - }; - "rails-assets-jquery.are-you-sure" = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0"; - type = "gem"; - }; - version = "1.9.0"; - }; - "rails-assets-jquery.slimscroll" = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998"; - type = "gem"; - }; - version = "1.3.8"; - }; - "rails-assets-jquery.ui" = { - dependencies = ["rails-assets-jquery"]; - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa"; - type = "gem"; - }; - version = "1.11.4"; - }; - rails-assets-markdown-it = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9"; - type = "gem"; - }; - version = "8.4.2"; - }; - rails-assets-markdown-it--markdown-it-for-inline = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl"; - type = "gem"; - }; - version = "0.1.1"; - }; - rails-assets-markdown-it-diaspora-mention = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig"; - type = "gem"; - }; - version = "1.2.0"; - }; - rails-assets-markdown-it-hashtag = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk"; - type = "gem"; - }; - version = "0.4.0"; - }; - rails-assets-markdown-it-sanitizer = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36"; - type = "gem"; - }; - version = "0.4.3"; - }; - rails-assets-markdown-it-sub = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk"; - type = "gem"; - }; - version = "1.0.0"; - }; - rails-assets-markdown-it-sup = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig"; - type = "gem"; - }; - version = "1.0.0"; - }; - rails-assets-underscore = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc"; - type = "gem"; - }; - version = "1.9.1"; - }; - rails-assets-utatti-perfect-scrollbar = { - platforms = []; - source = { - remotes = ["https://rails-assets.org"]; - sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v"; - type = "gem"; - }; - version = "1.4.0"; - }; - rails-controller-testing = { - dependencies = ["actionpack" "actionview" "activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy"; - type = "gem"; - }; - version = "1.0.2"; - }; - rails-dom-testing = { - dependencies = ["activesupport" "nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; - type = "gem"; - }; - version = "2.0.3"; - }; - rails-html-sanitizer = { - dependencies = ["loofah"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; - type = "gem"; - }; - version = "1.0.4"; - }; - rails-i18n = { - dependencies = ["i18n" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; - type = "gem"; - }; - version = "5.1.2"; - }; - rails-timeago = { - dependencies = ["actionpack" "activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv"; - type = "gem"; - }; - version = "2.16.0"; - }; - railties = { - dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8"; - type = "gem"; - }; - version = "5.1.6"; - }; - rainbow = { - dependencies = ["rake"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w"; - type = "gem"; - }; - version = "2.2.2"; - }; - raindrops = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"; - type = "gem"; - }; - version = "0.19.0"; - }; - rake = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"; - type = "gem"; - }; - version = "12.3.1"; - }; - rb-fsevent = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; - type = "gem"; - }; - version = "0.10.3"; - }; - rb-inotify = { - dependencies = ["ffi"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; - type = "gem"; - }; - version = "0.9.10"; - }; - redcarpet = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; - type = "gem"; - }; - version = "3.4.0"; - }; - redis = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv"; - type = "gem"; - }; - version = "3.3.5"; - }; - regexp_parser = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; - type = "gem"; - }; - version = "1.3.0"; - }; - request_store = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; - type = "gem"; - }; - version = "1.4.1"; - }; - responders = { - dependencies = ["actionpack" "railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; - type = "gem"; - }; - version = "2.4.0"; - }; - rspec = { - dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"; - type = "gem"; - }; - version = "3.8.0"; - }; - rspec-core = { - dependencies = ["rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; - type = "gem"; - }; - version = "3.8.0"; - }; - rspec-expectations = { - dependencies = ["diff-lcs" "rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; - type = "gem"; - }; - version = "3.8.2"; - }; - rspec-json_expectations = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn"; - type = "gem"; - }; - version = "2.1.0"; - }; - rspec-mocks = { - dependencies = ["diff-lcs" "rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; - type = "gem"; - }; - version = "3.8.0"; - }; - rspec-rails = { - dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p"; - type = "gem"; - }; - version = "3.8.1"; - }; - rspec-support = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; - type = "gem"; - }; - version = "3.8.0"; - }; - rubocop = { - dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i"; - type = "gem"; - }; - version = "0.60.0"; - }; - ruby-oembed = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0"; - type = "gem"; - }; - version = "0.12.0"; - }; - ruby-progressbar = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; - type = "gem"; - }; - version = "1.10.0"; - }; - ruby_dep = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; - type = "gem"; - }; - version = "1.5.0"; - }; - rubyzip = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj"; - type = "gem"; - }; - version = "1.2.2"; - }; - rugged = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6"; - type = "gem"; - }; - version = "0.27.5"; - }; - safe_yaml = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; - type = "gem"; - }; - version = "1.0.4"; - }; - sass = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; - type = "gem"; - }; - version = "3.4.25"; - }; - sass-rails = { - dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"; - type = "gem"; - }; - version = "5.0.7"; - }; - sawyer = { - dependencies = ["addressable" "faraday"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; - type = "gem"; - }; - version = "0.8.1"; - }; - scss_lint = { - dependencies = ["rake" "sass"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp"; - type = "gem"; - }; - version = "0.55.0"; - }; - secure_headers = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5"; - type = "gem"; - }; - version = "6.0.0"; - }; - shellany = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; - type = "gem"; - }; - version = "0.0.1"; - }; - shoulda-matchers = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"; - type = "gem"; - }; - version = "3.1.2"; - }; - sidekiq = { - dependencies = ["connection_pool" "rack-protection" "redis"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26"; - type = "gem"; - }; - version = "5.2.3"; - }; - sidekiq-cron = { - dependencies = ["fugit" "sidekiq"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0"; - type = "gem"; - }; - version = "1.0.4"; - }; - simple_captcha2 = { - dependencies = ["rails"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3"; - type = "gem"; - }; - version = "0.4.3"; - }; - simple_oauth = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l"; - type = "gem"; - }; - version = "0.3.1"; - }; - simplecov = { - dependencies = ["docile" "json" "simplecov-html"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; - type = "gem"; - }; - version = "0.16.1"; - }; - simplecov-html = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; - type = "gem"; - }; - version = "0.10.2"; - }; - sinon-rails = { - dependencies = ["railties"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb"; - type = "gem"; - }; - version = "1.15.0"; - }; - spring = { - dependencies = ["activesupport"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75"; - type = "gem"; - }; - version = "2.0.2"; - }; - spring-commands-cucumber = { - dependencies = ["spring"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a"; - type = "gem"; - }; - version = "1.0.1"; - }; - spring-commands-rspec = { - dependencies = ["spring"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; - type = "gem"; - }; - version = "1.0.4"; - }; - sprockets = { - dependencies = ["concurrent-ruby" "rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; - type = "gem"; - }; - version = "3.7.2"; - }; - sprockets-rails = { - dependencies = ["actionpack" "activesupport" "sprockets"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; - type = "gem"; - }; - version = "3.2.1"; - }; - state_machines = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; - type = "gem"; - }; - version = "0.5.0"; - }; - string-direction = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj"; - type = "gem"; - }; - version = "1.2.1"; - }; - swd = { - dependencies = ["activesupport" "attr_required" "httpclient"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd"; - type = "gem"; - }; - version = "1.1.2"; - }; - sysexits = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; - type = "gem"; - }; - version = "1.2.0"; - }; - systemu = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"; - type = "gem"; - }; - version = "2.6.5"; - }; - temple = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; - type = "gem"; - }; - version = "0.8.0"; - }; - term-ansicolor = { - dependencies = ["tins"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d"; - type = "gem"; - }; - version = "1.7.0"; - }; - terminal-table = { - dependencies = ["unicode-display_width"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; - type = "gem"; - }; - version = "1.8.0"; - }; - thor = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; - type = "gem"; - }; - version = "0.19.4"; - }; - thread_safe = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; - type = "gem"; - }; - version = "0.3.6"; - }; - tilt = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; - type = "gem"; - }; - version = "2.0.8"; - }; - timecop = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp"; - type = "gem"; - }; - version = "0.9.1"; - }; - timers = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; - type = "gem"; - }; - version = "4.2.0"; - }; - tins = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj"; - type = "gem"; - }; - version = "1.20.2"; - }; - to_regexp = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v"; - type = "gem"; - }; - version = "0.2.1"; - }; - turbo_dev_assets = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx"; - type = "gem"; - }; - version = "0.0.2"; - }; - twitter = { - dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5"; - type = "gem"; - }; - version = "6.2.0"; - }; - twitter-text = { - dependencies = ["unf"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; - type = "gem"; - }; - version = "1.14.7"; - }; - typhoeus = { - dependencies = ["ethon"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5"; - type = "gem"; - }; - version = "1.3.1"; - }; - tzinfo = { - dependencies = ["thread_safe"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; - type = "gem"; - }; - version = "1.2.5"; - }; - uglifier = { - dependencies = ["execjs"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1"; - type = "gem"; - }; - version = "4.1.19"; - }; - unf = { - dependencies = ["unf_ext"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; - type = "gem"; - }; - version = "0.1.4"; - }; - unf_ext = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; - type = "gem"; - }; - version = "0.0.7.5"; - }; - unicode-display_width = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57"; - type = "gem"; - }; - version = "1.4.0"; - }; - unicorn = { - dependencies = ["kgio" "raindrops"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak"; - type = "gem"; - }; - version = "5.4.1"; - }; - unicorn-worker-killer = { - dependencies = ["get_process_mem" "unicorn"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva"; - type = "gem"; - }; - version = "0.4.4"; - }; - uuid = { - dependencies = ["macaddr"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f"; - type = "gem"; - }; - version = "2.3.9"; - }; - valid = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3"; - type = "gem"; - }; - version = "1.2.0"; - }; - validate_email = { - dependencies = ["activemodel" "mail"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; - type = "gem"; - }; - version = "0.1.6"; - }; - validate_url = { - dependencies = ["activemodel" "addressable"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh"; - type = "gem"; - }; - version = "1.0.2"; - }; - versionist = { - dependencies = ["activesupport" "railties" "yard"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m"; - type = "gem"; - }; - version = "1.7.0"; - }; - warden = { - dependencies = ["rack"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"; - type = "gem"; - }; - version = "1.2.8"; - }; - webfinger = { - dependencies = ["activesupport" "httpclient"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar"; - type = "gem"; - }; - version = "1.1.0"; - }; - webmock = { - dependencies = ["addressable" "crack" "hashdiff"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib"; - type = "gem"; - }; - version = "3.4.2"; - }; - websocket-driver = { - dependencies = ["websocket-extensions"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l"; - type = "gem"; - }; - version = "0.6.5"; - }; - websocket-extensions = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; - type = "gem"; - }; - version = "0.1.3"; - }; - will_paginate = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9"; - type = "gem"; - }; - version = "3.1.6"; - }; - xpath = { - dependencies = ["nokogiri"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; - type = "gem"; - }; - version = "3.2.0"; - }; - yard = { - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"; - type = "gem"; - }; - version = "0.9.16"; - }; -} diff --git a/pkgs/webapps/diaspora/ldap.patch b/pkgs/webapps/diaspora/ldap.patch deleted file mode 100644 index 3d4f785..0000000 --- a/pkgs/webapps/diaspora/ldap.patch +++ /dev/null @@ -1,256 +0,0 @@ -commit 936a14e225037aca4cdeac11c843c7985e636c88 -Author: Ismaël Bouya -Date: Mon Jul 24 19:58:24 2017 +0200 - - Add LDAP to diaspora - -diff --git a/Gemfile b/Gemfile -index 414b0138d..2a934e9c9 100644 ---- a/Gemfile -+++ b/Gemfile -@@ -217,6 +217,9 @@ gem "thor", "0.19.1" - - # gem "therubyracer", :platform => :ruby - -+# LDAP -+gem 'net-ldap', '~> 0.16' -+ - group :production do # we don"t install these on travis to speed up test runs - # Analytics - -diff --git a/Gemfile.lock b/Gemfile.lock -index 84f8172e4..cdbf19fcd 100644 ---- a/Gemfile.lock 2019-01-13 19:55:52.538561762 +0100 -+++ b/Gemfile.lock 2019-01-13 19:58:11.087099067 +0100 -@@ -398,6 +398,7 @@ - mysql2 (0.5.2) - naught (1.1.0) - nenv (0.3.0) -+ net-ldap (0.16.1) - nio4r (2.3.1) - nokogiri (1.8.5) - mini_portile2 (~> 2.3.0) -@@ -820,6 +821,7 @@ - minitest - mobile-fu (= 1.4.0) - mysql2 (= 0.5.2) -+ net-ldap (~> 0.16) - nokogiri (= 1.8.5) - omniauth (= 1.8.1) - omniauth-tumblr (= 1.2) -diff --git a/app/models/user.rb b/app/models/user.rb -index 940a48f25..d1e2beeee 100644 ---- a/app/models/user.rb -+++ b/app/models/user.rb -@@ -337,6 +337,12 @@ class User < ActiveRecord::Base - end - - def send_confirm_email -+ if skip_email_confirmation? -+ self.email = unconfirmed_email -+ self.unconfirmed_email = nil -+ save -+ end -+ - return if unconfirmed_email.blank? - Workers::Mail::ConfirmEmail.perform_async(id) - end -@@ -554,6 +560,14 @@ class User < ActiveRecord::Base - end - end - -+ def ldap_user? -+ AppConfig.ldap.enable? && ldap_dn.present? -+ end -+ -+ def skip_email_confirmation? -+ ldap_user? && AppConfig.ldap.skip_email_confirmation? -+ end -+ - private - - def clearable_fields -diff --git a/config/defaults.yml b/config/defaults.yml -index c046aff07..66e9afa13 100644 ---- a/config/defaults.yml -+++ b/config/defaults.yml -@@ -202,6 +202,20 @@ defaults: - scope: tags - include_user_tags: false - pod_tags: -+ ldap: -+ enable: false -+ host: localhost -+ port: 389 -+ only_ldap: true -+ mail_attribute: mail -+ skip_email_confirmation: true -+ use_bind_dn: true -+ bind_dn: "cn=diaspora,dc=example,dc=com" -+ bind_pw: "password" -+ search_base: "dc=example,dc=com" -+ search_filter: "uid=%{username}" -+ bind_template: "uid=%{username},dc=example,dc=com" -+ - - development: - environment: -diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example -index b2573625d..c357c8651 100644 ---- a/config/diaspora.yml.example -+++ b/config/diaspora.yml.example -@@ -710,6 +710,36 @@ configuration: ## Section - ## If scope is 'tags', a comma separated list of tags here can be set. - ## For example "linux,diaspora", to receive posts related to these tags - #pod_tags: -+ ldap: -+ # Uncomment next line if you want to use LDAP on your instance -+ enable: true -+ host: localhost -+ port: 389 -+ # Use only LDAP authentication (don't try other means) -+ only_ldap: true -+ # LDAP attribute to find the user's e-mail. Necessary to create accounts -+ # for not existing users -+ mail_attribute: mail -+ # Skip e-mail confirmation when creating an account via LDAP. -+ skip_email_confirmation: true -+ # ----- Using bind_dn and bind_pw -+ # bind_dn and bind_pw may be used if the diaspora instance -+ # should be able to connect to LDAP to find and search for users. -+ -+ use_bind_dn: true -+ bind_dn: "cn=diaspora,dc=example,dc=com" -+ bind_pw: "password" -+ search_base: "dc=example,dc=com" -+ # This is the filter with which to search for the user. %{username} will -+ # be replaced by the given login. -+ search_filter: "uid=%{username}" -+ # -+ # ----- Using template -+ # This setting doesn't require a diaspora LDAP user. Use a template, and -+ # diaspora will try to login with the templated dn and password -+ # -+ # bind_template: "uid=%{username},dc=example,dc=com" -+ - - ## Here you can override settings defined above if you need - ## to have them different in different environments. -diff --git a/config/initializers/0_ldap_authenticatable.rb b/config/initializers/0_ldap_authenticatable.rb -new file mode 100644 -index 000000000..49846502f ---- /dev/null -+++ b/config/initializers/0_ldap_authenticatable.rb -@@ -0,0 +1,82 @@ -+require 'net/ldap' -+require 'devise/strategies/authenticatable' -+ -+module Devise -+ module Strategies -+ class LdapAuthenticatable < Authenticatable -+ def valid? -+ AppConfig.ldap.enable? && params[:user].present? -+ end -+ -+ def authenticate! -+ ldap = Net::LDAP.new( -+ host: AppConfig.ldap.host, -+ port: AppConfig.ldap.port, -+ encryption: :simple_tls, -+ ) -+ -+ if AppConfig.ldap.use_bind_dn? -+ ldap.auth AppConfig.ldap.bind_dn, AppConfig.ldap.bind_pw -+ -+ if !ldap.bind -+ return fail(:ldap_configuration_error) -+ end -+ -+ search_filter = AppConfig.ldap.search_filter % { username: params[:user][:username] } -+ -+ result = ldap.search(base: AppConfig.ldap.search_base, filter: search_filter, result_set: true) -+ -+ if result.count != 1 -+ return login_fail -+ end -+ -+ user_dn = result.first.dn -+ user_email = result.first[AppConfig.ldap.mail_attribute].first -+ else -+ user_dn = AppConfig.ldap.bind_template % { username: params[:user][:username] } -+ end -+ -+ ldap.auth user_dn, params[:user][:password] -+ -+ if ldap.bind -+ user = User.find_by(ldap_dn: user_dn) -+ -+ # We don't want to trust too much the email attribute from -+ # LDAP: if the user can edit it himself, he may login as -+ # anyone -+ if user.nil? -+ if !AppConfig.ldap.use_bind_dn? -+ result = ldap.search(base: user_dn, scope: Net::LDAP::SearchScope_BaseObject, filter: "(objectClass=*)", result_set: true) -+ user_email = result.first[AppConfig.ldap.mail_attribute].first -+ end -+ -+ if user_email.present? && User.find_by(email: user_email).nil? -+ # Password is used for remember_me token -+ user = User.build(email: user_email, ldap_dn: user_dn, password: SecureRandom.hex, username: params[:user][:username]) -+ user.save -+ user.seed_aspects -+ elsif User.find_by(email: user_email).present? -+ return fail(:ldap_existing_email) -+ else -+ return fail(:ldap_cannot_create_account_without_email) -+ end -+ end -+ -+ success!(user) -+ else -+ return login_fail -+ end -+ end -+ -+ def login_fail -+ if AppConfig.ldap.only_ldap? -+ return fail(:ldap_invalid_login) -+ else -+ return pass -+ end -+ end -+ end -+ end -+end -+ -+Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable) -diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb -index 3698e2373..14e88063e 100644 ---- a/config/initializers/devise.rb -+++ b/config/initializers/devise.rb -@@ -250,10 +250,9 @@ Devise.setup do |config| - # If you want to use other strategies, that are not supported by Devise, or - # change the failure app, you can configure them inside the config.warden block. - # -- # config.warden do |manager| -- # manager.intercept_401 = false -- # manager.default_strategies(:scope => :user).unshift :some_external_strategy -- # end -+ config.warden do |manager| -+ manager.default_strategies(scope: :user).unshift :ldap_authenticatable -+ end - - # ==> Mountable engine configurations - # When using Devise inside an engine, let's call it `MyEngine`, and this engine -diff --git a/db/migrate/20170724182100_add_ldap_dn_to_users.rb b/db/migrate/20170724182100_add_ldap_dn_to_users.rb -new file mode 100644 -index 000000000..f5cc84d11 ---- /dev/null -+++ b/db/migrate/20170724182100_add_ldap_dn_to_users.rb -@@ -0,0 +1,6 @@ -+class AddLdapDnToUsers < ActiveRecord::Migration -+ def change -+ add_column :users, :ldap_dn, :text, null: true, default: nil -+ add_index :users, ['ldap_dn'], :length => { "ldap_dn" => 191 } -+ end -+end diff --git a/pkgs/webapps/dokuwiki/default.nix b/pkgs/webapps/dokuwiki/default.nix deleted file mode 100644 index 874f0d8..0000000 --- a/pkgs/webapps/dokuwiki/default.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, callPackage, stdenv, mylibs, writeText }: -let - preloadFile = plugins: let preloads = [preload] - ++ builtins.concatMap (p: lib.optional (lib.hasAttr "preload" p) (p.preload p)) plugins; - in writeText "preload.php" ('' - -+ -diff --git a/skins/elastic/templates/mail.html b/skins/elastic/templates/mail.html -index 51dbfcd30..4c2281281 100644 ---- a/skins/elastic/templates/mail.html -+++ b/skins/elastic/templates/mail.html -@@ -77,6 +77,7 @@ - -
    -diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html -index 5ef0bc211..e0e8280ad 100644 ---- a/skins/larry/templates/mail.html -+++ b/skins/larry/templates/mail.html -@@ -56,6 +56,7 @@ - -
  • -
  • -+
  • -
  • - -
    diff --git a/pkgs/webapps/roundcubemail/default.nix b/pkgs/webapps/roundcubemail/default.nix deleted file mode 100644 index bdddf2f..0000000 --- a/pkgs/webapps/roundcubemail/default.nix +++ /dev/null @@ -1,85 +0,0 @@ -{ varDir ? "/var/lib/roundcubemail" -, roundcube_config ? "/etc/roundcube/config.php" -, stdenv, fetchurl, jre, unzip, lib, callPackage }: -let - defaultInstall = '' - mkdir -p $out - cp -R . $out/ - cd $out - if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then - ln -s larry skins/elastic - fi - ''; - buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: - stdenv.mkDerivation rec { - name = "roundcube-${appName}-${version}"; - inherit version; - phases = "unpackPhase installPhase"; - inherit installPhase; - src = fetchurl { inherit url sha256; }; - passthru.pluginName = appName; - }; - skinNames = []; - allSkins = lib.attrsets.genAttrs skinNames - (name: callPackage (./skins + "/${name}") {}); - pluginNames = [ - "automatic_addressbook" "carddav" "contextmenu" - "contextmenu_folder" "html5_notifier" "ident_switch" - "message_highlight" "thunderbird_labels" - ]; - allPlugins = lib.attrsets.genAttrs pluginNames - (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; }); - toPassthru = pkg: plugins: skins: { - inherit plugins skins allSkins allPlugins; - withSkins = withSkins pkg; - withPlugins = withPlugins pkg; - }; - withPlugins = pkg: toPlugins: - let - plugins = toPlugins allPlugins; - toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}"; - newRoundcube = pkg.overrideAttrs(old: { - installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); - passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins; - }); - in newRoundcube; - withSkins = pkg: toSkins: - let - skins = toSkins allSkins; - toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}"; - newRoundcube = pkg.overrideAttrs(old: { - installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins); - passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins); - }); - in newRoundcube; - shrinker = fetchurl { - url = "https://dl.google.com/closure-compiler/compiler-20200719.zip"; - sha256 = "0j46y9ack2yq67naca6nfysbmyilwjlkl29dbswidf1lq09yhhj3"; - }; - package = stdenv.mkDerivation rec { - version = "1.4.4"; - name = "roundcubemail-${version}"; - src= fetchurl { - url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; - sha256 = "1my726p0wmsn21nbdsjx02h6hnbh8nidzipzdy0gk0qgda1j729b"; - }; - patches = [ ./add_all.patch ]; # This patch includes js modification which requires to re-run the jsshrink below - buildInputs = [ unzip jre ]; - buildPhase = '' - mkdir -p /tmp - unzip -p "${shrinker}" "*.jar" > "/tmp/compiler.jar" - ./bin/jsshrink.sh - sed -i \ - -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ - config/defaults.inc.php - sed -i \ - -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ - config/defaults.inc.php - ''; - installPhase = '' - cp -a . $out - ln -s ${roundcube_config} $out/config/config.inc.php - ''; - passthru = toPassthru package [] []; - }; -in package diff --git a/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix b/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix deleted file mode 100644 index cd9efee..0000000 --- a/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "automatic_addressbook"; - version = "0.4.3"; - url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz"; - sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/carddav/default.nix b/pkgs/webapps/roundcubemail/plugins/carddav/default.nix deleted file mode 100644 index ad6856b..0000000 --- a/pkgs/webapps/roundcubemail/plugins/carddav/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "carddav"; - version = "3.0.3"; - url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2"; - sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix b/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix deleted file mode 100644 index 34a43a7..0000000 --- a/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "contextmenu"; - version = "3.2"; - url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz"; - sha256 = "1j7qns42bvgwav8d5n8g16iajyrhydd76hgil8625f3xyjbv4mx0"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix b/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix deleted file mode 100644 index e5cb46d..0000000 --- a/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "contextmenu_folder"; - version = "1.3.3"; - url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz"; - sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix b/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix deleted file mode 100644 index a5788b3..0000000 --- a/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "html5_notifier"; - version = "v0.6.4"; - url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz"; - sha256 = "1w6xkffgxwbahi7acixdh5sgjvsjlfwdq942gkvc64byk8r3bhsj"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix b/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix deleted file mode 100644 index 3e10fee..0000000 --- a/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "ident_switch"; - version = "4.2"; - url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz"; - sha256 = "0rf2krjsnly4i0mzgsbx09xckr3p9a9dzxf8qq4lkyng1a7dvjkq"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix b/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix deleted file mode 100644 index dc7138a..0000000 --- a/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "message_highlight"; - version = "4.4"; - url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz"; - sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j"; -} diff --git a/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix b/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix deleted file mode 100644 index b67f16a..0000000 --- a/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ buildPlugin }: -buildPlugin rec { - appName = "thunderbird_labels"; - version = "v1.4.2"; - url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz"; - sha256 = "00dqqlq6m8a6dwynp6gwfimc10anbs8kh0qdy8xvq2l06hk6jxyc"; -} diff --git a/pkgs/webapps/spip/default.nix b/pkgs/webapps/spip/default.nix deleted file mode 100644 index 20d5c8c..0000000 --- a/pkgs/webapps/spip/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ siteName ? "spip" -, siteDir ? runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out" -, environment ? "prod" -, ldap ? false -, varDir ? "/var/lib/${siteName}_${environment}" -, lib, fetchzip, runCommand, stdenv }: -let - app = stdenv.mkDerivation rec { - name = "${siteName}-${environment}-spip-${version}"; - version = "3.2.7"; - src = fetchzip { - url = "https://files.spip.net/spip/archives/SPIP-v${version}.zip"; - sha256 = "0n4kc95nhn524zbb11bpfjs965pm4v026s3m3q44pl8nyms91r33"; - }; - paches = lib.optionals ldap [ ./spip_ldap_patch.patch ]; - buildPhase = '' - rm -rf IMG local tmp config/remove.txt - ln -sf ${./spip_mes_options.php} config/mes_options.php - echo "Require all denied" > "config/.htaccess" - ln -sf ${varDir}/{IMG,local} . - ''; - installPhase = '' - cp -a . $out - cp -a ${siteDir}/* $out - ''; - passthru = { - inherit siteName siteDir environment varDir; - webRoot = app; - spipConfig = ./spip_mes_options.php; - }; - }; -in app diff --git a/pkgs/webapps/spip/spip_ldap_patch.patch b/pkgs/webapps/spip/spip_ldap_patch.patch deleted file mode 100644 index 653c909..0000000 --- a/pkgs/webapps/spip/spip_ldap_patch.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- old/ecrire/auth/ldap.php 2017-06-08 21:58:17.000000000 +0200 -+++ new/ecrire/auth/ldap.php 2017-06-10 02:54:02.687954143 +0200 -@@ -171,24 +171,41 @@ - $desc = isset($ldap['attributes']) && $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ; - - $logins = is_array($desc['login']) ? $desc['login'] : array($desc['login']); -+ if (isset($GLOBALS['ldap_search'])) { -+ $search_query = str_replace("%user%", $login_search, $GLOBALS['ldap_search']); -+ $result = @ldap_search($ldap_link, $ldap_base, $search_query, array("dn")); -+ $info = @ldap_get_entries($ldap_link, $result); -+ // Ne pas accepter les resultats si plus d'une entree -+ // (on veut un attribut unique) - -- // Tenter une recherche pour essayer de retrouver le DN -- foreach ($logins as $att) { -- $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn")); -- $info = @ldap_get_entries($ldap_link, $result); -- // Ne pas accepter les resultats si plus d'une entree -- // (on veut un attribut unique) -+ if (is_array($info) and $info['count'] == 1) { -+ $dn = $info[0]['dn']; -+ if (!$checkpass) { -+ return $dn; -+ } -+ if (@ldap_bind($ldap_link, $dn, $pass)) { -+ return $dn; -+ } -+ } -+ } else { -+ // Tenter une recherche pour essayer de retrouver le DN -+ foreach ($logins as $att) { -+ $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn")); -+ $info = @ldap_get_entries($ldap_link, $result); -+ // Ne pas accepter les resultats si plus d'une entree -+ // (on veut un attribut unique) - -- if (is_array($info) and $info['count'] == 1) { -- $dn = $info[0]['dn']; -- if (!$checkpass) { -- return $dn; -- } -- if (@ldap_bind($ldap_link, $dn, $pass)) { -- return $dn; -- } -- } -- } -+ if (is_array($info) and $info['count'] == 1) { -+ $dn = $info[0]['dn']; -+ if (!$checkpass) { -+ return $dn; -+ } -+ if (@ldap_bind($ldap_link, $dn, $pass)) { -+ return $dn; -+ } -+ } -+ } -+ } - - if ($checkpass and !isset($dn)) { - // Si echec, essayer de deviner le DN diff --git a/pkgs/webapps/spip/spip_mes_options.php b/pkgs/webapps/spip/spip_mes_options.php deleted file mode 100644 index 8db8389..0000000 --- a/pkgs/webapps/spip/spip_mes_options.php +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/pkgs/webapps/surfer/default.nix b/pkgs/webapps/surfer/default.nix deleted file mode 100644 index 9a04da5..0000000 --- a/pkgs/webapps/surfer/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ callPackage, mylibs, sources }: -# built using node2nix -l package-lock.json -# and changing "./." to "src" -(callPackage ./node-packages.nix { - src = sources.webapps-surfer; - nodeEnv = callPackage mylibs.nodeEnv {}; -}).package.overrideAttrs(old: { - postInstall = '' - mkdir -p $out/bin - ln -s ../cloudron-surfer/server.js $out/lib/node_modules/.bin/surfer-server - ''; -}) diff --git a/pkgs/webapps/surfer/node-packages.nix b/pkgs/webapps/surfer/node-packages.nix deleted file mode 100644 index a1fb5ba..0000000 --- a/pkgs/webapps/surfer/node-packages.nix +++ /dev/null @@ -1,2437 +0,0 @@ -# This file has been generated by node2nix 1.8.0. Do not edit! - -{nodeEnv, src, fetchurl, fetchgit, globalBuildInputs ? []}: - -let - sources = { - "accepts-1.3.4" = { - name = "accepts"; - packageName = "accepts"; - version = "1.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz"; - sha1 = "86246758c7dd6d21a6474ff084a4740ec05eb21f"; - }; - }; - "ajv-5.5.2" = { - name = "ajv"; - packageName = "ajv"; - version = "5.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz"; - sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965"; - }; - }; - "archiver-4.0.1" = { - name = "archiver"; - packageName = "archiver"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/archiver/-/archiver-4.0.1.tgz"; - sha512 = "/YV1pU4Nhpf/rJArM23W6GTUjT0l++VbjykrCRua1TSXrn+yM8Qs7XvtwSiRse0iCe49EPNf7ktXnPsWuSb91Q=="; - }; - }; - "archiver-utils-2.1.0" = { - name = "archiver-utils"; - packageName = "archiver-utils"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz"; - sha512 = "bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw=="; - }; - }; - "array-flatten-1.1.1" = { - name = "array-flatten"; - packageName = "array-flatten"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"; - sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; - }; - }; - "array-union-1.0.2" = { - name = "array-union"; - packageName = "array-union"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"; - sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; - }; - }; - "array-uniq-1.0.3" = { - name = "array-uniq"; - packageName = "array-uniq"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"; - sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; - }; - }; - "arrify-1.0.1" = { - name = "arrify"; - packageName = "arrify"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz"; - sha1 = "898508da2226f380df904728456849c1501a4b0d"; - }; - }; - "asn1-0.2.3" = { - name = "asn1"; - packageName = "asn1"; - version = "0.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz"; - sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86"; - }; - }; - "assert-plus-0.1.5" = { - name = "assert-plus"; - packageName = "assert-plus"; - version = "0.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"; - sha1 = "ee74009413002d84cec7219c6ac811812e723160"; - }; - }; - "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"; - }; - }; - "async-1.5.2" = { - name = "async"; - packageName = "async"; - version = "1.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/async/-/async-1.5.2.tgz"; - sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a"; - }; - }; - "async-2.6.3" = { - name = "async"; - packageName = "async"; - version = "2.6.3"; - src = fetchurl { - url = "https://registry.npmjs.org/async/-/async-2.6.3.tgz"; - sha512 = "zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="; - }; - }; - "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.6.0" = { - name = "aws4"; - packageName = "aws4"; - version = "1.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz"; - sha1 = "83ef5ca860b2b32e4a0deedee8c771b9db57471e"; - }; - }; - "backoff-2.5.0" = { - name = "backoff"; - packageName = "backoff"; - version = "2.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz"; - sha1 = "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "basic-auth-2.0.1" = { - name = "basic-auth"; - packageName = "basic-auth"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"; - sha512 = "NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="; - }; - }; - "batch-0.6.1" = { - name = "batch"; - packageName = "batch"; - version = "0.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz"; - sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; - }; - }; - "bcrypt-pbkdf-1.0.1" = { - name = "bcrypt-pbkdf"; - packageName = "bcrypt-pbkdf"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz"; - sha1 = "63bc5dcb61331b92bc05fd528953c33462a06f8d"; - }; - }; - "bcryptjs-2.4.3" = { - name = "bcryptjs"; - packageName = "bcryptjs"; - version = "2.4.3"; - src = fetchurl { - url = "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz"; - sha1 = "9ab5627b93e60621ff7cdac5da9733027df1d0cb"; - }; - }; - "bl-4.0.2" = { - name = "bl"; - packageName = "bl"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz"; - sha512 = "j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ=="; - }; - }; - "body-parser-1.18.2" = { - name = "body-parser"; - packageName = "body-parser"; - version = "1.18.2"; - src = fetchurl { - url = "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz"; - sha1 = "87678a19d84b47d859b83199bd59bce222b10454"; - }; - }; - "boom-4.3.1" = { - name = "boom"; - packageName = "boom"; - version = "4.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz"; - sha1 = "4f8a3005cb4a7e3889f749030fd25b96e01d2e31"; - }; - }; - "boom-5.2.0" = { - name = "boom"; - packageName = "boom"; - version = "5.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz"; - sha512 = "Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw=="; - }; - }; - "brace-expansion-1.1.8" = { - name = "brace-expansion"; - packageName = "brace-expansion"; - version = "1.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"; - sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292"; - }; - }; - "buffer-5.6.0" = { - name = "buffer"; - packageName = "buffer"; - version = "5.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz"; - sha512 = "/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw=="; - }; - }; - "buffer-crc32-0.2.13" = { - name = "buffer-crc32"; - packageName = "buffer-crc32"; - version = "0.2.13"; - src = fetchurl { - url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz"; - sha1 = "0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"; - }; - }; - "bunyan-1.8.12" = { - name = "bunyan"; - packageName = "bunyan"; - version = "1.8.12"; - src = fetchurl { - url = "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz"; - sha1 = "f150f0f6748abdd72aeae84f04403be2ef113797"; - }; - }; - "bytes-3.0.0" = { - name = "bytes"; - packageName = "bytes"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"; - sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; - }; - }; - "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"; - }; - }; - "co-4.6.0" = { - name = "co"; - packageName = "co"; - version = "4.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz"; - sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; - }; - }; - "colors-1.1.2" = { - name = "colors"; - packageName = "colors"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz"; - sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; - }; - }; - "combined-stream-1.0.5" = { - name = "combined-stream"; - packageName = "combined-stream"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz"; - sha1 = "938370a57b4a51dea2c77c15d5c5fdf895164009"; - }; - }; - "combined-stream-1.0.6" = { - name = "combined-stream"; - packageName = "combined-stream"; - version = "1.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz"; - sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818"; - }; - }; - "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.14.1" = { - name = "commander"; - packageName = "commander"; - version = "2.14.1"; - src = fetchurl { - url = "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz"; - sha512 = "+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="; - }; - }; - "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=="; - }; - }; - "compress-commons-3.0.0" = { - name = "compress-commons"; - packageName = "compress-commons"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz"; - sha512 = "FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg=="; - }; - }; - "compressible-2.0.13" = { - name = "compressible"; - packageName = "compressible"; - version = "2.0.13"; - src = fetchurl { - url = "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz"; - sha1 = "0d1020ab924b2fdb4d6279875c7d6daba6baa7a9"; - }; - }; - "compression-1.7.2" = { - name = "compression"; - packageName = "compression"; - version = "1.7.2"; - src = fetchurl { - url = "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz"; - sha1 = "aaffbcd6aaf854b44ebb280353d5ad1651f59a69"; - }; - }; - "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"; - }; - }; - "connect-lastmile-1.2.2" = { - name = "connect-lastmile"; - packageName = "connect-lastmile"; - version = "1.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/connect-lastmile/-/connect-lastmile-1.2.2.tgz"; - sha512 = "laKBrYAoYNuUYAsJQVUdmCqzi825A0GJ7YuiT8zWP0wU6s0Cv9h1eSdHvXh0DgxaVe0dQaYFufcL1htzPCJIpQ=="; - }; - }; - "connect-timeout-1.9.0" = { - name = "connect-timeout"; - packageName = "connect-timeout"; - version = "1.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.9.0.tgz"; - sha1 = "bc27326b122103714bebfa0d958bab33f6522e3a"; - }; - }; - "content-disposition-0.5.2" = { - name = "content-disposition"; - packageName = "content-disposition"; - version = "0.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz"; - sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"; - }; - }; - "content-type-1.0.4" = { - name = "content-type"; - packageName = "content-type"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"; - sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="; - }; - }; - "cookie-0.3.1" = { - name = "cookie"; - packageName = "cookie"; - version = "0.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz"; - sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; - }; - }; - "cookie-parser-1.4.3" = { - name = "cookie-parser"; - packageName = "cookie-parser"; - version = "1.4.3"; - src = fetchurl { - url = "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz"; - sha1 = "0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5"; - }; - }; - "cookie-signature-1.0.6" = { - name = "cookie-signature"; - packageName = "cookie-signature"; - version = "1.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"; - sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; - }; - }; - "cookiejar-2.1.2" = { - name = "cookiejar"; - packageName = "cookiejar"; - version = "2.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz"; - sha512 = "Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="; - }; - }; - "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"; - }; - }; - "crc-3.4.4" = { - name = "crc"; - packageName = "crc"; - version = "3.4.4"; - src = fetchurl { - url = "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz"; - sha1 = "9da1e980e3bd44fc5c93bf5ab3da3378d85e466b"; - }; - }; - "crc32-stream-3.0.1" = { - name = "crc32-stream"; - packageName = "crc32-stream"; - version = "3.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz"; - sha512 = "mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w=="; - }; - }; - "cryptiles-3.1.2" = { - name = "cryptiles"; - packageName = "cryptiles"; - version = "3.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz"; - sha1 = "a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "del-2.2.2" = { - name = "del"; - packageName = "del"; - version = "2.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/del/-/del-2.2.2.tgz"; - sha1 = "c12c981d067846c84bcaf862cff930d907ffd1a8"; - }; - }; - "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.0" = { - name = "depd"; - packageName = "depd"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz"; - sha1 = "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"; - }; - }; - "depd-1.1.1" = { - name = "depd"; - packageName = "depd"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz"; - sha1 = "5783b4e1c459f06fa5ca27f991f3d06e7a310359"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "dtrace-provider-0.8.7" = { - name = "dtrace-provider"; - packageName = "dtrace-provider"; - version = "0.8.7"; - src = fetchurl { - url = "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz"; - sha1 = "dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04"; - }; - }; - "ecc-jsbn-0.1.1" = { - name = "ecc-jsbn"; - packageName = "ecc-jsbn"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz"; - sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "end-of-stream-1.4.4" = { - name = "end-of-stream"; - packageName = "end-of-stream"; - version = "1.4.4"; - src = fetchurl { - url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"; - sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "express-4.16.2" = { - name = "express"; - packageName = "express"; - version = "4.16.2"; - src = fetchurl { - url = "https://registry.npmjs.org/express/-/express-4.16.2.tgz"; - sha1 = "e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"; - }; - }; - "express-session-1.15.6" = { - name = "express-session"; - packageName = "express-session"; - version = "1.15.6"; - src = fetchurl { - url = "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz"; - sha512 = "r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA=="; - }; - }; - "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=="; - }; - }; - "extsprintf-1.2.0" = { - name = "extsprintf"; - packageName = "extsprintf"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz"; - sha1 = "5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529"; - }; - }; - "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-1.0.0" = { - name = "fast-deep-equal"; - packageName = "fast-deep-equal"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz"; - sha1 = "96256a3bc975595eb36d82e9929d060d893439ff"; - }; - }; - "fast-json-stable-stringify-2.0.0" = { - name = "fast-json-stable-stringify"; - packageName = "fast-json-stable-stringify"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; - sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; - }; - }; - "fast-safe-stringify-2.0.7" = { - name = "fast-safe-stringify"; - packageName = "fast-safe-stringify"; - version = "2.0.7"; - src = fetchurl { - url = "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz"; - sha512 = "Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="; - }; - }; - "fd-slicer-1.0.1" = { - name = "fd-slicer"; - packageName = "fd-slicer"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz"; - sha1 = "8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"; - }; - }; - "finalhandler-1.1.0" = { - name = "finalhandler"; - packageName = "finalhandler"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz"; - sha1 = "ce0b6855b45853e791b2fcc680046d88253dd7f5"; - }; - }; - "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.2" = { - name = "form-data"; - packageName = "form-data"; - version = "2.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz"; - sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099"; - }; - }; - "form-data-3.0.0" = { - name = "form-data"; - packageName = "form-data"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz"; - sha512 = "CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg=="; - }; - }; - "formidable-1.2.1" = { - name = "formidable"; - packageName = "formidable"; - version = "1.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz"; - sha512 = "Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="; - }; - }; - "forwarded-0.1.2" = { - name = "forwarded"; - packageName = "forwarded"; - version = "0.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"; - sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; - }; - }; - "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-constants-1.0.0" = { - name = "fs-constants"; - packageName = "fs-constants"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz"; - sha512 = "y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="; - }; - }; - "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"; - }; - }; - "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-6.0.4" = { - name = "glob"; - packageName = "glob"; - version = "6.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz"; - sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"; - }; - }; - "glob-7.1.2" = { - name = "glob"; - packageName = "glob"; - version = "7.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"; - sha1 = "c19c9df9a028702d678612384a6552404c636d15"; - }; - }; - "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=="; - }; - }; - "globby-5.0.0" = { - name = "globby"; - packageName = "globby"; - version = "5.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz"; - sha1 = "ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"; - }; - }; - "graceful-fs-4.2.4" = { - name = "graceful-fs"; - packageName = "graceful-fs"; - version = "4.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz"; - sha512 = "WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="; - }; - }; - "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.0.3" = { - name = "har-validator"; - packageName = "har-validator"; - version = "5.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz"; - sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd"; - }; - }; - "hawk-6.0.2" = { - name = "hawk"; - packageName = "hawk"; - version = "6.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz"; - sha512 = "miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ=="; - }; - }; - "hoek-4.2.1" = { - name = "hoek"; - packageName = "hoek"; - version = "4.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz"; - sha512 = "QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="; - }; - }; - "http-errors-1.6.1" = { - name = "http-errors"; - packageName = "http-errors"; - version = "1.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz"; - sha1 = "5f8b8ed98aca545656bf572997387f904a722257"; - }; - }; - "http-errors-1.6.2" = { - name = "http-errors"; - packageName = "http-errors"; - version = "1.6.2"; - src = fetchurl { - url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz"; - sha1 = "0a002cc85707192a7e7946ceedc11155f60ec736"; - }; - }; - "http-errors-1.6.3" = { - name = "http-errors"; - packageName = "http-errors"; - version = "1.6.3"; - src = fetchurl { - url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"; - sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; - }; - }; - "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"; - }; - }; - "iconv-lite-0.4.19" = { - name = "iconv-lite"; - packageName = "iconv-lite"; - version = "0.4.19"; - src = fetchurl { - url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz"; - sha512 = "oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="; - }; - }; - "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=="; - }; - }; - "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.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=="; - }; - }; - "ipaddr.js-1.5.2" = { - name = "ipaddr.js"; - packageName = "ipaddr.js"; - version = "1.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz"; - sha1 = "d4b505bde9946987ccf0fc58d9010ff9607e3fa0"; - }; - }; - "is-path-cwd-1.0.0" = { - name = "is-path-cwd"; - packageName = "is-path-cwd"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; - sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; - }; - }; - "is-path-in-cwd-1.0.0" = { - name = "is-path-in-cwd"; - packageName = "is-path-in-cwd"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz"; - sha1 = "6477582b8214d602346094567003be8a9eac04dc"; - }; - }; - "is-path-inside-1.0.0" = { - name = "is-path-inside"; - packageName = "is-path-inside"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz"; - sha1 = "fc06e5a1683fbda13de667aff717bbc10a48f37f"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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-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.3.1" = { - name = "json-schema-traverse"; - packageName = "json-schema-traverse"; - version = "0.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz"; - sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340"; - }; - }; - "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"; - }; - }; - "lazystream-1.0.0" = { - name = "lazystream"; - packageName = "lazystream"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz"; - sha1 = "f6995fe0f820392f61396be89462407bb77168e4"; - }; - }; - "ldap-filter-0.2.2" = { - name = "ldap-filter"; - packageName = "ldap-filter"; - version = "0.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz"; - sha1 = "f2b842be0b86da3352798505b31ebcae590d77d0"; - }; - }; - "ldapjs-1.0.2" = { - name = "ldapjs"; - packageName = "ldapjs"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz"; - sha1 = "544ff7032b7b83c68f0701328d9297aa694340f9"; - }; - }; - "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.defaults-4.2.0" = { - name = "lodash.defaults"; - packageName = "lodash.defaults"; - version = "4.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz"; - sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c"; - }; - }; - "lodash.difference-4.5.0" = { - name = "lodash.difference"; - packageName = "lodash.difference"; - version = "4.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz"; - sha1 = "9ccb4e505d486b91651345772885a2df27fd017c"; - }; - }; - "lodash.flatten-4.4.0" = { - name = "lodash.flatten"; - packageName = "lodash.flatten"; - version = "4.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz"; - sha1 = "f31c22225a9632d2bbf8e4addbef240aa765a61f"; - }; - }; - "lodash.isplainobject-4.0.6" = { - name = "lodash.isplainobject"; - packageName = "lodash.isplainobject"; - version = "4.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz"; - sha1 = "7c526a52d89b45c45cc690b88163be0497f550cb"; - }; - }; - "lodash.union-4.6.0" = { - name = "lodash.union"; - packageName = "lodash.union"; - version = "4.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz"; - sha1 = "48bb5088409f16f1821666641c44dd1aaae3cd88"; - }; - }; - "media-typer-0.3.0" = { - name = "media-typer"; - packageName = "media-typer"; - version = "0.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"; - sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; - }; - }; - "merge-descriptors-1.0.1" = { - name = "merge-descriptors"; - packageName = "merge-descriptors"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; - sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; - }; - }; - "methods-1.1.2" = { - name = "methods"; - packageName = "methods"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"; - sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; - }; - }; - "mime-1.4.1" = { - name = "mime"; - packageName = "mime"; - version = "1.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz"; - sha512 = "KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="; - }; - }; - "mime-2.4.4" = { - name = "mime"; - packageName = "mime"; - version = "2.4.4"; - src = fetchurl { - url = "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz"; - sha512 = "LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="; - }; - }; - "mime-db-1.27.0" = { - name = "mime-db"; - packageName = "mime-db"; - version = "1.27.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz"; - sha1 = "820f572296bbd20ec25ed55e5b5de869e5436eb1"; - }; - }; - "mime-db-1.33.0" = { - name = "mime-db"; - packageName = "mime-db"; - version = "1.33.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz"; - sha512 = "BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="; - }; - }; - "mime-db-1.38.0" = { - name = "mime-db"; - packageName = "mime-db"; - version = "1.38.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz"; - sha512 = "bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg=="; - }; - }; - "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.15" = { - name = "mime-types"; - packageName = "mime-types"; - version = "2.1.15"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz"; - sha1 = "a4ebf5064094569237b8cf70046776d09fc92aed"; - }; - }; - "mime-types-2.1.18" = { - name = "mime-types"; - packageName = "mime-types"; - version = "2.1.18"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz"; - sha512 = "lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ=="; - }; - }; - "mime-types-2.1.22" = { - name = "mime-types"; - packageName = "mime-types"; - version = "2.1.22"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz"; - sha512 = "aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog=="; - }; - }; - "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=="; - }; - }; - "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"; - sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; - }; - }; - "minimist-0.0.8" = { - name = "minimist"; - packageName = "minimist"; - version = "0.0.8"; - src = fetchurl { - url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"; - sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; - }; - }; - "mkdirp-0.5.1" = { - name = "mkdirp"; - packageName = "mkdirp"; - version = "0.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"; - sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; - }; - }; - "moment-2.24.0" = { - name = "moment"; - packageName = "moment"; - version = "2.24.0"; - src = fetchurl { - url = "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz"; - sha512 = "bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="; - }; - }; - "morgan-1.9.1" = { - name = "morgan"; - packageName = "morgan"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz"; - sha512 = "HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA=="; - }; - }; - "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.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=="; - }; - }; - "multiparty-4.1.3" = { - name = "multiparty"; - packageName = "multiparty"; - version = "4.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/multiparty/-/multiparty-4.1.3.tgz"; - sha1 = "3c43c7fcb1896e17460436a9dd0b6ef1668e4f94"; - }; - }; - "mv-2.1.1" = { - name = "mv"; - packageName = "mv"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz"; - sha1 = "ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2"; - }; - }; - "nan-2.12.1" = { - name = "nan"; - packageName = "nan"; - version = "2.12.1"; - src = fetchurl { - url = "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz"; - sha512 = "JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="; - }; - }; - "ncp-2.0.0" = { - name = "ncp"; - packageName = "ncp"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz"; - sha1 = "195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"; - }; - }; - "negotiator-0.6.1" = { - name = "negotiator"; - packageName = "negotiator"; - version = "0.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz"; - sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; - }; - }; - "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=="; - }; - }; - "oauth-sign-0.8.2" = { - name = "oauth-sign"; - packageName = "oauth-sign"; - version = "0.8.2"; - src = fetchurl { - url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz"; - sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "on-headers-1.0.1" = { - name = "on-headers"; - packageName = "on-headers"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz"; - sha1 = "928f5d0f470d49342651ea6794b0857c100693f7"; - }; - }; - "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"; - }; - }; - "parseurl-1.3.2" = { - name = "parseurl"; - packageName = "parseurl"; - version = "1.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz"; - sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; - }; - }; - "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-is-inside-1.0.2" = { - name = "path-is-inside"; - packageName = "path-is-inside"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"; - sha1 = "365417dede44430d1c11af61027facf074bdfc53"; - }; - }; - "path-to-regexp-0.1.7" = { - name = "path-to-regexp"; - packageName = "path-to-regexp"; - version = "0.1.7"; - src = fetchurl { - url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; - sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; - }; - }; - "pend-1.2.0" = { - name = "pend"; - packageName = "pend"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz"; - sha1 = "7a57eb550a6783f9115331fcf4663d5c8e007a50"; - }; - }; - "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"; - }; - }; - "pify-2.3.0" = { - name = "pify"; - packageName = "pify"; - version = "2.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"; - sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; - }; - }; - "pinkie-2.0.4" = { - name = "pinkie"; - packageName = "pinkie"; - version = "2.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"; - sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; - }; - }; - "pinkie-promise-2.0.1" = { - name = "pinkie-promise"; - packageName = "pinkie-promise"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; - sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; - }; - }; - "precond-0.2.3" = { - name = "precond"; - packageName = "precond"; - version = "0.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz"; - sha1 = "aa9591bcaa24923f1e0f4849d240f47efc1075ac"; - }; - }; - "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=="; - }; - }; - "proxy-addr-2.0.2" = { - name = "proxy-addr"; - packageName = "proxy-addr"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz"; - sha1 = "6571504f47bb988ec8180253f85dd7e14952bdec"; - }; - }; - "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"; - }; - }; - "qs-6.5.1" = { - name = "qs"; - packageName = "qs"; - version = "6.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz"; - sha512 = "eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="; - }; - }; - "qs-6.9.1" = { - name = "qs"; - packageName = "qs"; - version = "6.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz"; - sha512 = "Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="; - }; - }; - "random-bytes-1.0.0" = { - name = "random-bytes"; - packageName = "random-bytes"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz"; - sha1 = "4f68a1dc0ae58bd3fb95848c30324db75d64360b"; - }; - }; - "range-parser-1.2.0" = { - name = "range-parser"; - packageName = "range-parser"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz"; - sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e"; - }; - }; - "raw-body-2.3.2" = { - name = "raw-body"; - packageName = "raw-body"; - version = "2.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz"; - sha1 = "bcd60c77d3eb93cde0050295c3f379389bc88f89"; - }; - }; - "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.4.0" = { - name = "readable-stream"; - packageName = "readable-stream"; - version = "3.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz"; - sha512 = "jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ=="; - }; - }; - "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=="; - }; - }; - "readline-sync-1.4.9" = { - name = "readline-sync"; - packageName = "readline-sync"; - version = "1.4.9"; - src = fetchurl { - url = "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz"; - sha1 = "3eda8e65f23cd2a17e61301b1f0003396af5ecda"; - }; - }; - "request-2.83.0" = { - name = "request"; - packageName = "request"; - version = "2.83.0"; - src = fetchurl { - url = "https://registry.npmjs.org/request/-/request-2.83.0.tgz"; - sha512 = "lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw=="; - }; - }; - "rimraf-2.4.5" = { - name = "rimraf"; - packageName = "rimraf"; - version = "2.4.5"; - src = fetchurl { - url = "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz"; - sha1 = "ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"; - }; - }; - "rimraf-2.6.1" = { - name = "rimraf"; - packageName = "rimraf"; - version = "2.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz"; - sha1 = "c2338ec643df7a1b7fe5c54fa86f57428a55f33d"; - }; - }; - "safe-buffer-5.1.1" = { - name = "safe-buffer"; - packageName = "safe-buffer"; - version = "5.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"; - sha512 = "kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="; - }; - }; - "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.0" = { - name = "safe-buffer"; - packageName = "safe-buffer"; - version = "5.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz"; - sha512 = "fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="; - }; - }; - "safe-json-stringify-1.2.0" = { - name = "safe-json-stringify"; - packageName = "safe-json-stringify"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz"; - sha512 = "gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg=="; - }; - }; - "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=="; - }; - }; - "safetydance-0.1.1" = { - name = "safetydance"; - packageName = "safetydance"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/safetydance/-/safetydance-0.1.1.tgz"; - sha1 = "1588c69133a7c69cddfd6a2d1d334381d0b7b2f7"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "send-0.16.1" = { - name = "send"; - packageName = "send"; - version = "0.16.1"; - src = fetchurl { - url = "https://registry.npmjs.org/send/-/send-0.16.1.tgz"; - sha512 = "ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A=="; - }; - }; - "serve-index-1.9.1" = { - name = "serve-index"; - packageName = "serve-index"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz"; - sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; - }; - }; - "serve-static-1.13.1" = { - name = "serve-static"; - packageName = "serve-static"; - version = "1.13.1"; - src = fetchurl { - url = "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz"; - sha512 = "hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ=="; - }; - }; - "setprototypeof-1.0.3" = { - name = "setprototypeof"; - packageName = "setprototypeof"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz"; - sha1 = "66567e37043eeb4f04d91bd658c0cbefb55b8e04"; - }; - }; - "setprototypeof-1.1.0" = { - name = "setprototypeof"; - packageName = "setprototypeof"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz"; - sha512 = "BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="; - }; - }; - "sntp-2.1.0" = { - name = "sntp"; - packageName = "sntp"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz"; - sha512 = "FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg=="; - }; - }; - "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=="; - }; - }; - "statuses-1.3.1" = { - name = "statuses"; - packageName = "statuses"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz"; - sha1 = "faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "stringstream-0.0.6" = { - name = "stringstream"; - packageName = "stringstream"; - version = "0.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz"; - sha512 = "87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="; - }; - }; - "superagent-5.1.3" = { - name = "superagent"; - packageName = "superagent"; - version = "5.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/superagent/-/superagent-5.1.3.tgz"; - sha512 = "2bno1Nb4uvZPECTJ7NDYlae6Q8LLQoZZZ9Vumd346jU1UGVkNC/lQI42jHwtrqVoepyt0QxNKFty01IRKgD4CA=="; - }; - }; - "tar-stream-2.1.2" = { - name = "tar-stream"; - packageName = "tar-stream"; - version = "2.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz"; - sha512 = "UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q=="; - }; - }; - "tough-cookie-2.3.3" = { - name = "tough-cookie"; - packageName = "tough-cookie"; - version = "2.3.3"; - src = fetchurl { - url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz"; - sha1 = "0b618a5565b6dea90bf3425d04d55edc475a7561"; - }; - }; - "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-is-1.6.16" = { - name = "type-is"; - packageName = "type-is"; - version = "1.6.16"; - src = fetchurl { - url = "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz"; - sha512 = "HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q=="; - }; - }; - "uid-safe-2.1.5" = { - name = "uid-safe"; - packageName = "uid-safe"; - version = "2.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz"; - sha512 = "KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA=="; - }; - }; - "underscore-1.8.3" = { - name = "underscore"; - packageName = "underscore"; - version = "1.8.3"; - src = fetchurl { - url = "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"; - sha1 = "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"; - }; - }; - "underscore-1.9.1" = { - name = "underscore"; - packageName = "underscore"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz"; - sha512 = "5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="; - }; - }; - "unpipe-1.0.0" = { - name = "unpipe"; - packageName = "unpipe"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; - sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; - }; - }; - "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"; - }; - }; - "utils-merge-1.0.1" = { - name = "utils-merge"; - packageName = "utils-merge"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; - sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; - }; - }; - "uuid-3.2.1" = { - name = "uuid"; - packageName = "uuid"; - version = "3.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz"; - sha512 = "jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="; - }; - }; - "vary-1.1.2" = { - name = "vary"; - packageName = "vary"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"; - sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; - }; - }; - "vasync-1.6.4" = { - name = "vasync"; - packageName = "vasync"; - version = "1.6.4"; - src = fetchurl { - url = "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz"; - sha1 = "dfe93616ad0e7ae801b332a9d88bfc5cdc8e1d1f"; - }; - }; - "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"; - }; - }; - "verror-1.6.0" = { - name = "verror"; - packageName = "verror"; - version = "1.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz"; - sha1 = "7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5"; - }; - }; - "webdav-server-2.4.6" = { - name = "webdav-server"; - packageName = "webdav-server"; - version = "2.4.6"; - src = fetchurl { - url = "https://registry.npmjs.org/webdav-server/-/webdav-server-2.4.6.tgz"; - sha512 = "YhqjqlQdD4H55UEnRgk99a9epTuulKMW05m6KBTtG6fBXcc4/2H87F2DRJHH7a33PibNn3jWv8u9AgcMHLGUrw=="; - }; - }; - "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"; - }; - }; - "xml-js-1.6.11" = { - name = "xml-js"; - packageName = "xml-js"; - version = "1.6.11"; - src = fetchurl { - url = "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz"; - sha512 = "7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="; - }; - }; - "xml-js-builder-1.0.3" = { - name = "xml-js-builder"; - packageName = "xml-js-builder"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/xml-js-builder/-/xml-js-builder-1.0.3.tgz"; - sha512 = "BoLgG/glT45M0jK5PGh9h+iGrQxa8jJk9ofR63GroRifl2tbGB3/yYiVY3wQWHrZgWWfl9+7fhEB/VoD9mWnSg=="; - }; - }; - "zip-stream-3.0.1" = { - name = "zip-stream"; - packageName = "zip-stream"; - version = "3.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz"; - sha512 = "r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ=="; - }; - }; - }; - args = { - name = "cloudron-surfer"; - packageName = "cloudron-surfer"; - version = "5.10.0"; - inherit src; - dependencies = [ - (sources."accepts-1.3.4" // { - dependencies = [ - sources."mime-db-1.33.0" - sources."mime-types-2.1.18" - ]; - }) - sources."ajv-5.5.2" - (sources."archiver-4.0.1" // { - dependencies = [ - sources."async-2.6.3" - sources."glob-7.1.6" - sources."readable-stream-3.6.0" - ]; - }) - (sources."archiver-utils-2.1.0" // { - dependencies = [ - sources."glob-7.1.6" - sources."readable-stream-2.3.7" - sources."string_decoder-1.1.1" - ]; - }) - sources."array-flatten-1.1.1" - sources."array-union-1.0.2" - sources."array-uniq-1.0.3" - sources."arrify-1.0.1" - sources."asn1-0.2.3" - sources."assert-plus-1.0.0" - sources."async-1.5.2" - sources."asynckit-0.4.0" - sources."aws-sign2-0.7.0" - sources."aws4-1.6.0" - sources."backoff-2.5.0" - sources."balanced-match-1.0.0" - sources."base64-js-1.3.1" - (sources."basic-auth-2.0.1" // { - dependencies = [ - sources."safe-buffer-5.1.2" - ]; - }) - sources."batch-0.6.1" - sources."bcrypt-pbkdf-1.0.1" - sources."bcryptjs-2.4.3" - (sources."bl-4.0.2" // { - dependencies = [ - sources."inherits-2.0.4" - ]; - }) - (sources."body-parser-1.18.2" // { - dependencies = [ - sources."depd-1.1.2" - (sources."http-errors-1.6.2" // { - dependencies = [ - sources."depd-1.1.1" - ]; - }) - ]; - }) - sources."boom-4.3.1" - sources."brace-expansion-1.1.8" - sources."buffer-5.6.0" - sources."buffer-crc32-0.2.13" - sources."bunyan-1.8.12" - sources."bytes-3.0.0" - sources."caseless-0.12.0" - sources."co-4.6.0" - sources."colors-1.1.2" - sources."combined-stream-1.0.5" - sources."commander-2.14.1" - sources."component-emitter-1.3.0" - (sources."compress-commons-3.0.0" // { - dependencies = [ - sources."readable-stream-2.3.7" - sources."string_decoder-1.1.1" - ]; - }) - (sources."compressible-2.0.13" // { - dependencies = [ - sources."mime-db-1.33.0" - ]; - }) - sources."compression-1.7.2" - sources."concat-map-0.0.1" - (sources."connect-lastmile-1.2.2" // { - dependencies = [ - sources."debug-4.1.1" - sources."ms-2.1.2" - sources."underscore-1.9.1" - ]; - }) - sources."connect-timeout-1.9.0" - sources."content-disposition-0.5.2" - sources."content-type-1.0.4" - sources."cookie-0.3.1" - sources."cookie-parser-1.4.3" - sources."cookie-signature-1.0.6" - sources."cookiejar-2.1.2" - sources."core-util-is-1.0.2" - sources."crc-3.4.4" - sources."crc32-stream-3.0.1" - (sources."cryptiles-3.1.2" // { - dependencies = [ - sources."boom-5.2.0" - ]; - }) - (sources."dashdash-1.14.1" // { - dependencies = [ - sources."assert-plus-1.0.0" - ]; - }) - sources."debug-2.6.9" - sources."del-2.2.2" - sources."delayed-stream-1.0.0" - sources."depd-1.1.0" - sources."destroy-1.0.4" - sources."dtrace-provider-0.8.7" - sources."ecc-jsbn-0.1.1" - sources."ee-first-1.1.1" - sources."encodeurl-1.0.2" - sources."end-of-stream-1.4.4" - sources."escape-html-1.0.3" - sources."etag-1.8.1" - (sources."express-4.16.2" // { - dependencies = [ - sources."depd-1.1.2" - sources."setprototypeof-1.1.0" - ]; - }) - (sources."express-session-1.15.6" // { - dependencies = [ - sources."depd-1.1.2" - ]; - }) - sources."extend-3.0.2" - sources."extsprintf-1.2.0" - sources."fast-deep-equal-1.0.0" - sources."fast-json-stable-stringify-2.0.0" - sources."fast-safe-stringify-2.0.7" - sources."fd-slicer-1.0.1" - sources."finalhandler-1.1.0" - sources."forever-agent-0.6.1" - (sources."form-data-2.3.2" // { - dependencies = [ - sources."combined-stream-1.0.6" - ]; - }) - sources."formidable-1.2.1" - sources."forwarded-0.1.2" - sources."fresh-0.5.2" - sources."fs-constants-1.0.0" - sources."fs.realpath-1.0.0" - (sources."getpass-0.1.7" // { - dependencies = [ - sources."assert-plus-1.0.0" - ]; - }) - sources."glob-7.1.2" - sources."globby-5.0.0" - sources."graceful-fs-4.2.4" - sources."har-schema-2.0.0" - sources."har-validator-5.0.3" - sources."hawk-6.0.2" - sources."hoek-4.2.1" - sources."http-errors-1.6.1" - (sources."http-signature-1.2.0" // { - dependencies = [ - sources."assert-plus-1.0.0" - sources."extsprintf-1.3.0" - sources."json-schema-0.2.3" - sources."jsprim-1.4.1" - sources."verror-1.10.0" - ]; - }) - sources."iconv-lite-0.4.19" - sources."ieee754-1.1.13" - sources."inflight-1.0.6" - sources."inherits-2.0.3" - sources."ipaddr.js-1.5.2" - sources."is-path-cwd-1.0.0" - sources."is-path-in-cwd-1.0.0" - sources."is-path-inside-1.0.0" - sources."is-typedarray-1.0.0" - sources."isarray-1.0.0" - sources."isstream-0.1.2" - sources."jsbn-0.1.1" - sources."json-schema-traverse-0.3.1" - sources."json-stringify-safe-5.0.1" - (sources."lazystream-1.0.0" // { - dependencies = [ - sources."readable-stream-2.3.7" - sources."string_decoder-1.1.1" - ]; - }) - (sources."ldap-filter-0.2.2" // { - dependencies = [ - sources."assert-plus-0.1.5" - ]; - }) - sources."ldapjs-1.0.2" - sources."lodash-4.17.15" - sources."lodash.defaults-4.2.0" - sources."lodash.difference-4.5.0" - sources."lodash.flatten-4.4.0" - sources."lodash.isplainobject-4.0.6" - sources."lodash.union-4.6.0" - sources."media-typer-0.3.0" - sources."merge-descriptors-1.0.1" - sources."methods-1.1.2" - sources."mime-2.4.4" - sources."mime-db-1.27.0" - sources."mime-types-2.1.15" - sources."minimatch-3.0.4" - sources."minimist-0.0.8" - sources."mkdirp-0.5.1" - sources."moment-2.24.0" - (sources."morgan-1.9.1" // { - dependencies = [ - sources."depd-1.1.2" - ]; - }) - sources."ms-2.0.0" - sources."multiparty-4.1.3" - (sources."mv-2.1.1" // { - dependencies = [ - sources."glob-6.0.4" - sources."rimraf-2.4.5" - ]; - }) - sources."nan-2.12.1" - sources."ncp-2.0.0" - sources."negotiator-0.6.1" - sources."normalize-path-3.0.0" - sources."oauth-sign-0.8.2" - sources."object-assign-4.1.1" - sources."on-finished-2.3.0" - sources."on-headers-1.0.1" - sources."once-1.4.0" - sources."parseurl-1.3.2" - sources."path-is-absolute-1.0.1" - sources."path-is-inside-1.0.2" - sources."path-to-regexp-0.1.7" - sources."pend-1.2.0" - sources."performance-now-2.1.0" - sources."pify-2.3.0" - sources."pinkie-2.0.4" - sources."pinkie-promise-2.0.1" - sources."precond-0.2.3" - sources."process-nextick-args-2.0.1" - sources."proxy-addr-2.0.2" - sources."punycode-1.4.1" - sources."qs-6.5.1" - sources."random-bytes-1.0.0" - sources."range-parser-1.2.0" - (sources."raw-body-2.3.2" // { - dependencies = [ - sources."depd-1.1.1" - sources."http-errors-1.6.2" - ]; - }) - sources."readable-stream-3.4.0" - sources."readline-sync-1.4.9" - (sources."request-2.83.0" // { - dependencies = [ - sources."mime-db-1.33.0" - sources."mime-types-2.1.18" - ]; - }) - sources."rimraf-2.6.1" - sources."safe-buffer-5.1.1" - sources."safe-json-stringify-1.2.0" - sources."safer-buffer-2.1.2" - sources."safetydance-0.1.1" - (sources."send-0.16.1" // { - dependencies = [ - sources."depd-1.1.2" - (sources."http-errors-1.6.2" // { - dependencies = [ - sources."depd-1.1.1" - ]; - }) - sources."mime-1.4.1" - ]; - }) - (sources."serve-index-1.9.1" // { - dependencies = [ - sources."depd-1.1.2" - sources."http-errors-1.6.3" - sources."mime-db-1.44.0" - sources."mime-types-2.1.27" - sources."setprototypeof-1.1.0" - sources."statuses-1.5.0" - ]; - }) - sources."serve-static-1.13.1" - sources."setprototypeof-1.0.3" - sources."sntp-2.1.0" - sources."sshpk-1.16.1" - sources."statuses-1.3.1" - (sources."string_decoder-1.3.0" // { - dependencies = [ - sources."safe-buffer-5.2.0" - ]; - }) - sources."stringstream-0.0.6" - (sources."superagent-5.1.3" // { - dependencies = [ - sources."combined-stream-1.0.8" - sources."debug-4.1.1" - sources."form-data-3.0.0" - sources."ms-2.1.2" - sources."qs-6.9.1" - sources."semver-6.3.0" - ]; - }) - sources."tar-stream-2.1.2" - sources."tough-cookie-2.3.3" - sources."tunnel-agent-0.6.0" - sources."tweetnacl-0.14.5" - (sources."type-is-1.6.16" // { - dependencies = [ - sources."mime-db-1.33.0" - sources."mime-types-2.1.18" - ]; - }) - sources."uid-safe-2.1.5" - sources."underscore-1.8.3" - sources."unpipe-1.0.0" - sources."util-deprecate-1.0.2" - sources."utils-merge-1.0.1" - sources."uuid-3.2.1" - sources."vary-1.1.2" - (sources."vasync-1.6.4" // { - dependencies = [ - sources."verror-1.6.0" - ]; - }) - sources."verror-1.10.0" - (sources."webdav-server-2.4.6" // { - dependencies = [ - sources."mime-db-1.38.0" - sources."mime-types-2.1.22" - ]; - }) - sources."wrappy-1.0.2" - (sources."xml-js-1.6.11" // { - dependencies = [ - sources."sax-1.2.4" - ]; - }) - sources."xml-js-builder-1.0.3" - (sources."zip-stream-3.0.1" // { - dependencies = [ - sources."readable-stream-3.6.0" - ]; - }) - ]; - buildInputs = globalBuildInputs; - meta = { - description = "Simple file server"; - license = "MIT"; - }; - 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/pkgs/webapps/taskwarrior-web/Gemfile.lock b/pkgs/webapps/taskwarrior-web/Gemfile.lock deleted file mode 100644 index 1b2f5ba..0000000 --- a/pkgs/webapps/taskwarrior-web/Gemfile.lock +++ /dev/null @@ -1,139 +0,0 @@ -PATH - remote: . - specs: - taskwarrior-web (1.1.12) - activesupport (~> 3) - json (~> 1.8) - parseconfig - rack-flash3 - rinku - sinatra - sinatra-simple-navigation - vegas - versionomy - -GEM - remote: http://rubygems.org/ - specs: - activesupport (3.2.22.5) - i18n (~> 0.6, >= 0.6.4) - multi_json (~> 1.0) - blockenspiel (0.5.0) - coderay (1.1.2) - concurrent-ruby (1.1.4) - daemons (1.3.1) - diff-lcs (1.3) - docile (1.3.1) - eventmachine (1.2.7) - ffi (1.10.0) - formatador (0.2.5) - growl (1.0.3) - guard (2.15.0) - formatador (>= 0.2.4) - listen (>= 2.7, < 4.0) - lumberjack (>= 1.0.12, < 2.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-bundler (2.2.1) - bundler (>= 1.3.0, < 3) - guard (~> 2.2) - guard-compat (~> 1.1) - guard-compat (1.2.1) - guard-rspec (4.7.3) - guard (~> 2.1) - guard-compat (~> 1.1) - rspec (>= 2.99.0, < 4.0) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - json (1.8.6) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - lumberjack (1.0.13) - method_source (0.9.2) - mini_portile2 (2.4.0) - multi_json (1.13.1) - mustermann (1.0.3) - nenv (0.3.0) - nokogiri (1.10.1) - mini_portile2 (~> 2.4.0) - notiffany (0.1.1) - nenv (~> 0.1) - shellany (~> 0.0) - parseconfig (1.0.8) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - rack (2.0.6) - rack-flash3 (1.0.5) - rack - rack-protection (2.0.5) - rack - rack-test (1.1.0) - rack (>= 1.0, < 3) - rake (10.5.0) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) - ffi (~> 1.0) - rinku (2.0.5) - rspec (2.99.0) - rspec-core (~> 2.99.0) - rspec-expectations (~> 2.99.0) - rspec-mocks (~> 2.99.0) - rspec-core (2.99.2) - rspec-expectations (2.99.2) - diff-lcs (>= 1.1.3, < 2.0) - rspec-html-matchers (0.5.0) - nokogiri (~> 1) - rspec (~> 2, >= 2.11.0) - rspec-mocks (2.99.4) - ruby_dep (1.5.0) - shellany (0.0.1) - simple-navigation (4.0.5) - activesupport (>= 2.3.2) - simplecov (0.16.1) - docile (~> 1.1) - json (>= 1.8, < 3) - simplecov-html (~> 0.10.0) - simplecov-html (0.10.2) - sinatra (2.0.5) - mustermann (~> 1.0) - rack (~> 2.0) - rack-protection (= 2.0.5) - tilt (~> 2.0) - sinatra-simple-navigation (4.1.0) - simple-navigation (~> 4.0) - sinatra (>= 1.0, < 3.0) - thin (1.7.2) - daemons (~> 1.0, >= 1.0.9) - eventmachine (~> 1.0, >= 1.0.4) - rack (>= 1, < 3) - thor (0.20.3) - tilt (2.0.9) - vegas (0.1.11) - rack (>= 1.0.0) - versionomy (0.5.0) - blockenspiel (~> 0.5) - -PLATFORMS - ruby - -DEPENDENCIES - growl - guard-bundler - guard-rspec - rack-test - rake (< 11) - rb-fsevent - rspec (~> 2) - rspec-html-matchers - simplecov - taskwarrior-web! - thin - -BUNDLED WITH - 1.16.2 diff --git a/pkgs/webapps/taskwarrior-web/default.nix b/pkgs/webapps/taskwarrior-web/default.nix deleted file mode 100644 index d5368c5..0000000 --- a/pkgs/webapps/taskwarrior-web/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ ruby_2_6, bundlerEnv, mylibs, stdenv }: -let - gems = bundlerEnv { - name = "taskwarrior-web-env"; - ruby = ruby_2_6; - pname = "taskwarrior-web"; - gemset = ./gemset.nix; - gemdir = package.out; - groups = [ "default" "local" "development" ]; - }; - package = stdenv.mkDerivation (mylibs.fetchedGithub ./taskwarrior-web.json // rec { - phases = [ "unpackPhase" "patchPhase" "installPhase" ]; - patches = [ ./fixes.patch ./thin.patch ]; - installPhase = '' - cp -a . $out - cp ${./Gemfile.lock} $out/Gemfile.lock - ''; - passthru = { - inherit gems; - }; - }); -in package diff --git a/pkgs/webapps/taskwarrior-web/fixes.patch b/pkgs/webapps/taskwarrior-web/fixes.patch deleted file mode 100644 index 851f9f0..0000000 --- a/pkgs/webapps/taskwarrior-web/fixes.patch +++ /dev/null @@ -1,56 +0,0 @@ -diff --git a/lib/taskwarrior-web/helpers.rb b/lib/taskwarrior-web/helpers.rb -index 212aed7..94c57df 100644 ---- a/lib/taskwarrior-web/helpers.rb -+++ b/lib/taskwarrior-web/helpers.rb -@@ -1,6 +1,8 @@ - require 'active_support/core_ext/date/calculations' - - module TaskwarriorWeb::App::Helpers -+ include ERB::Util -+ - def format_date(timestamp) - format = TaskwarriorWeb::Config.dateformat || '%-m/%-d/%Y' - Time.parse(timestamp).localtime.strftime(format) -diff --git a/lib/taskwarrior-web/services/builder/base.rb b/lib/taskwarrior-web/services/builder/base.rb -index 58d246e..8f716ac 100644 ---- a/lib/taskwarrior-web/services/builder/base.rb -+++ b/lib/taskwarrior-web/services/builder/base.rb -@@ -10,7 +10,7 @@ module TaskwarriorWeb::CommandBuilder::Base - :complete => ':id done', - :annotate => ':id annotate', - :denotate => ':id denotate', -- :projects => '_projects', -+ :projects => '_unique project', - :tags => '_tags', - :sync => 'sync' - } -diff --git a/lib/taskwarrior-web/views/tasks/_form.erb b/lib/taskwarrior-web/views/tasks/_form.erb -index 789e7a1..fa08698 100644 ---- a/lib/taskwarrior-web/views/tasks/_form.erb -+++ b/lib/taskwarrior-web/views/tasks/_form.erb -@@ -1,14 +1,14 @@ -
    - -
    -- -+ -
    -
    - -
    - -
    -- -+ -
    -
    - -@@ -45,7 +45,7 @@ -
    - -
    -- -+ - Enter tags separated by commas or spaces (e.g. each, word will,be a tag) -
    -
    diff --git a/pkgs/webapps/taskwarrior-web/gemset.nix b/pkgs/webapps/taskwarrior-web/gemset.nix deleted file mode 100644 index 35d13c6..0000000 --- a/pkgs/webapps/taskwarrior-web/gemset.nix +++ /dev/null @@ -1,567 +0,0 @@ -{ - activesupport = { - dependencies = ["i18n" "multi_json"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0fyxqkkws4px4lzkbcqzp0bwai7nn7jk4p0bgfy0dny9cwm0qc9r"; - type = "gem"; - }; - version = "3.2.22.5"; - }; - blockenspiel = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1h701s45n5qprvcpc7fnr45n88p56x07pznkxqnhz1dbdbhb7xx8"; - type = "gem"; - }; - version = "0.5.0"; - }; - coderay = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; - type = "gem"; - }; - version = "1.1.2"; - }; - concurrent-ruby = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1"; - type = "gem"; - }; - version = "1.1.4"; - }; - daemons = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w"; - type = "gem"; - }; - version = "1.3.1"; - }; - diff-lcs = { - groups = ["default" "development" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; - type = "gem"; - }; - version = "1.3"; - }; - docile = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; - type = "gem"; - }; - version = "1.3.1"; - }; - eventmachine = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"; - type = "gem"; - }; - version = "1.2.7"; - }; - ffi = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p"; - type = "gem"; - }; - version = "1.10.0"; - }; - formatador = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; - type = "gem"; - }; - version = "0.2.5"; - }; - growl = { - groups = ["local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0s0y7maljnalpbv2q1j5j5hvb4wcc31y9af0n7x1q2l0fzxgc9n9"; - type = "gem"; - }; - version = "1.0.3"; - }; - guard = { - dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; - type = "gem"; - }; - version = "2.15.0"; - }; - guard-bundler = { - dependencies = ["guard" "guard-compat"]; - groups = ["local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0lji8f8w7y4prmpr2lqmlljvkqgkgnlsiwqgwvq7b1y3sxlsvy62"; - type = "gem"; - }; - version = "2.2.1"; - }; - guard-compat = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; - type = "gem"; - }; - version = "1.2.1"; - }; - guard-rspec = { - dependencies = ["guard" "guard-compat" "rspec"]; - groups = ["local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; - type = "gem"; - }; - version = "4.7.3"; - }; - i18n = { - dependencies = ["concurrent-ruby"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3"; - type = "gem"; - }; - version = "0.9.5"; - }; - json = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5"; - type = "gem"; - }; - version = "1.8.6"; - }; - listen = { - dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; - type = "gem"; - }; - version = "3.1.5"; - }; - lumberjack = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; - type = "gem"; - }; - version = "1.0.13"; - }; - method_source = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; - type = "gem"; - }; - version = "0.9.2"; - }; - mini_portile2 = { - groups = ["default" "development"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"; - type = "gem"; - }; - version = "2.4.0"; - }; - multi_json = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; - type = "gem"; - }; - version = "1.13.1"; - }; - mustermann = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1"; - type = "gem"; - }; - version = "1.0.3"; - }; - nenv = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; - type = "gem"; - }; - version = "0.3.0"; - }; - nokogiri = { - dependencies = ["mini_portile2"]; - groups = ["default" "development"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "09zll7c6j7xr6wyvh5mm5ncj6pkryp70ybcsxdbw1nyphx5dh184"; - type = "gem"; - }; - version = "1.10.1"; - }; - notiffany = { - dependencies = ["nenv" "shellany"]; - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; - type = "gem"; - }; - version = "0.1.1"; - }; - parseconfig = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0br2g9k6zc4ygah52aa8cwvpnnkszia29bnvnr8bhpk3rdzi2vmq"; - type = "gem"; - }; - version = "1.0.8"; - }; - pry = { - dependencies = ["coderay" "method_source"]; - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; - type = "gem"; - }; - version = "0.12.2"; - }; - rack = { - groups = ["default" "development"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; - type = "gem"; - }; - version = "2.0.6"; - }; - rack-flash3 = { - dependencies = ["rack"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0rim9afrns6s8zc4apiymncysyvijpdg18k57kdpz66p55jf4mqz"; - type = "gem"; - }; - version = "1.0.5"; - }; - rack-protection = { - dependencies = ["rack"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk"; - type = "gem"; - }; - version = "2.0.5"; - }; - rack-test = { - dependencies = ["rack"]; - groups = ["development"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; - type = "gem"; - }; - version = "1.1.0"; - }; - rake = { - groups = ["development"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b"; - type = "gem"; - }; - version = "10.5.0"; - }; - rb-fsevent = { - groups = ["local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; - type = "gem"; - }; - version = "0.10.3"; - }; - rb-inotify = { - dependencies = ["ffi"]; - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4"; - type = "gem"; - }; - version = "0.10.0"; - }; - rinku = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1smkk299v18brk98gqbdnqrfwm3143kikl30scidqb5j3pzlbz91"; - type = "gem"; - }; - version = "2.0.5"; - }; - rspec = { - dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; - groups = ["development" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "14q3hxvngk4ks8h41yw50d5fqbf2dhzwi9rz5ccxvh5a53ak2as3"; - type = "gem"; - }; - version = "2.99.0"; - }; - rspec-core = { - groups = ["default" "development" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1wwz21lcz2lwd2jcp2pvq7n1677v23acf7wxsyszp8msb47mw38i"; - type = "gem"; - }; - version = "2.99.2"; - }; - rspec-expectations = { - dependencies = ["diff-lcs"]; - groups = ["default" "development" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "11a5pph3anp4xr591dnlcy8xfkdf54qi2lvg4ykpqhxk37si1py3"; - type = "gem"; - }; - version = "2.99.2"; - }; - rspec-html-matchers = { - dependencies = ["nokogiri" "rspec"]; - groups = ["development"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "148grzvk0cvh24avhl0shjzz7ldhj138svf48pc5h1fdsb0pnqcv"; - type = "gem"; - }; - version = "0.5.0"; - }; - rspec-mocks = { - groups = ["default" "development" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0bzhqahbiswq41nqi6y2dka1k42n0hl14jb6bldb206zp4hikz8r"; - type = "gem"; - }; - version = "2.99.4"; - }; - ruby_dep = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; - type = "gem"; - }; - version = "1.5.0"; - }; - shellany = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; - type = "gem"; - }; - version = "0.0.1"; - }; - simple-navigation = { - dependencies = ["activesupport"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "08a2s18an3br3xj5j86r33q0hrkai0y157xg67h1khdskb08yylk"; - type = "gem"; - }; - version = "4.0.5"; - }; - simplecov = { - dependencies = ["docile" "json" "simplecov-html"]; - groups = ["local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; - type = "gem"; - }; - version = "0.16.1"; - }; - simplecov-html = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; - type = "gem"; - }; - version = "0.10.2"; - }; - sinatra = { - dependencies = ["mustermann" "rack" "rack-protection" "tilt"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1gasgn5f15myv08k10i16p326pchxjsy37pgqfw0xm66kcc5d7ry"; - type = "gem"; - }; - version = "2.0.5"; - }; - sinatra-simple-navigation = { - dependencies = ["simple-navigation" "sinatra"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1gishxd23qw6bwsk7fkagkfc7ihqyvvvb98j9bmwc6wwpsfs4prs"; - type = "gem"; - }; - version = "4.1.0"; - }; - taskwarrior-web = { - dependencies = ["activesupport" "json" "parseconfig" "rack-flash3" "rinku" "sinatra" "sinatra-simple-navigation" "vegas" "versionomy"]; - groups = ["default"]; - platforms = []; - bundledByPath = true; - path = ./.; - source = { - path = ./.; - type = "path"; - }; - version = "1.1.12"; - }; - thin = { - dependencies = ["daemons" "eventmachine" "rack"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f"; - type = "gem"; - }; - version = "1.7.2"; - }; - thor = { - groups = ["default" "local"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29"; - type = "gem"; - }; - version = "0.20.3"; - }; - tilt = { - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz"; - type = "gem"; - }; - version = "2.0.9"; - }; - vegas = { - dependencies = ["rack"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0kzv0v1zb8vvm188q4pqwahb6468bmiamn6wpsbiq6r5i69s1bs5"; - type = "gem"; - }; - version = "0.1.11"; - }; - versionomy = { - dependencies = ["blockenspiel"]; - groups = ["default"]; - platforms = []; - source = { - remotes = ["http://rubygems.org"]; - sha256 = "0i0l4pzrl1vyp4lpg2cxhgkk56spki3lld943d6h7168fj8qyv33"; - type = "gem"; - }; - version = "0.5.0"; - }; -} diff --git a/pkgs/webapps/taskwarrior-web/taskwarrior-web.json b/pkgs/webapps/taskwarrior-web/taskwarrior-web.json deleted file mode 100644 index 70f396d..0000000 --- a/pkgs/webapps/taskwarrior-web/taskwarrior-web.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "a79cfe2-master", - "meta": { - "name": "taskwarrior-web", - "url": "https://github.com/theunraveler/taskwarrior-web", - "branch": "master" - }, - "github": { - "owner": "theunraveler", - "repo": "taskwarrior-web", - "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", - "sha256": "028rb4wry2an19707bvy4n305f3s0hipg214224p1m0mb61c3cq4", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/taskwarrior-web/thin.patch b/pkgs/webapps/taskwarrior-web/thin.patch deleted file mode 100644 index a7df3e3..0000000 --- a/pkgs/webapps/taskwarrior-web/thin.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/Gemfile b/Gemfile -index 8544e15..9c4279c 100644 ---- a/Gemfile -+++ b/Gemfile -@@ -3,6 +3,8 @@ source "http://rubygems.org" - # Specify your gem's dependencies in taskwarrior-web.gemspec - gemspec - -+gem 'thin' -+ - group :local do - gem 'rb-fsevent', :require => false - gem 'growl', :require => false -diff --git a/config.ru b/config.ru -index c3050c6..52387d8 100644 ---- a/config.ru -+++ b/config.ru -@@ -1,5 +1,4 @@ - require File.join(File.dirname(__FILE__), 'lib', 'taskwarrior-web') - --disable :run - TaskwarriorWeb::App.set({ :environment => :production }) - run TaskwarriorWeb::App diff --git a/pkgs/webapps/ttrss/default.nix b/pkgs/webapps/ttrss/default.nix deleted file mode 100644 index aeb573c..0000000 --- a/pkgs/webapps/ttrss/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ ttrss_config ? "/etc/ttrss/config.php" -, varDir ? "/var/lib/ttrss" -, stdenv, lib, callPackage, sources }: -let - pluginNames = [ "auth_ldap" "af_feedmod" "feediron" "ff_instagram" "tumblr_gdpr_ua" ]; - allPlugins = lib.attrsets.genAttrs pluginNames - (name: callPackage (./plugins + "/${name}") {}); - toPassthru = pkg: plugins: { - inherit plugins allPlugins; - withPlugins = withPlugins pkg; - }; - withPlugins = pkg: toPlugins: - let - plugins = toPlugins allPlugins; - toInstallPlugin = n: - "ln -sf ${n} $out/plugins/${n.pluginName}"; - newTtrss = pkg.overrideAttrs(old: { - installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); - passthru = toPassthru newTtrss (pkg.plugins ++ plugins); - }); - in newTtrss; - package = stdenv.mkDerivation rec { - pname = "tt-rss"; - version = sources.webapps-ttrss.version; - name = "${pname}-${version}"; - src = sources.webapps-ttrss; - buildPhase = '' - rm -rf lock feed-icons cache - ln -sf ${varDir}/{lock,feed-icons,cache} . - ''; - installPhase = '' - cp -a . $out - ln -s ${ttrss_config} $out/config.php - ''; - passthru = toPassthru package []; - }; -in package diff --git a/pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json b/pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json deleted file mode 100644 index e57fcce..0000000 --- a/pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "0ea2092-master", - "meta": { - "name": "ttrss-af_feedmod", - "url": "https://github.com/mbirth/ttrss_plugin-af_feedmod", - "branch": "master" - }, - "github": { - "owner": "mbirth", - "repo": "ttrss_plugin-af_feedmod", - "rev": "0ea2092dd34067ecd898802cfca3570023d1ecfe", - "sha256": "02ibf47zcrsc2rr45wsix8gxyyf371davj8n8i0gj1zdq95klvnv", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix b/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix deleted file mode 100644 index 8512be3..0000000 --- a/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ patched ? false, stdenv, mylibs, lib }: -stdenv.mkDerivation (mylibs.fetchedGithub ./af_feedmod.json // { - patches = lib.optionals patched [ ./type_replace.patch ]; - installPhase = '' - mkdir $out - cp init.php $out - ''; - passthru.pluginName = "af_feedmod"; -}) diff --git a/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch b/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch deleted file mode 100644 index d622577..0000000 --- a/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/init.php 2014-06-16 14:21:06.995480038 +0200 -+++ b/init.php 2014-06-16 14:22:00.151027654 +0200 -@@ -147,6 +147,9 @@ - } - } - break; -+ case 'replace': -+ $article['content'] = preg_replace("/".$config['pattern']."/",$config['replacement'],$article['content']); -+ break; - - default: - // unknown type or invalid config diff --git a/pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json b/pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json deleted file mode 100644 index c8aaab5..0000000 --- a/pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "4d751b0-master", - "meta": { - "name": "ttrss-auth-ldap", - "url": "https://github.com/hydrian/TTRSS-Auth-LDAP", - "branch": "master" - }, - "github": { - "owner": "hydrian", - "repo": "TTRSS-Auth-LDAP", - "rev": "4d751b095c29a8dbe2dc7bb07777742956136e94", - "sha256": "0b9fl86acrzpcv41r7pj3bl8b3n72hpkdywzx9zjyfqv5pskxyim", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix b/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix deleted file mode 100644 index 424a9f7..0000000 --- a/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ stdenv, mylibs }: -stdenv.mkDerivation (mylibs.fetchedGithub ./auth-ldap.json // { - installPhase = '' - mkdir $out - cp plugins/auth_ldap/init.php $out - ''; - passthru.pluginName = "auth_ldap"; -}) diff --git a/pkgs/webapps/ttrss/plugins/feediron/default.nix b/pkgs/webapps/ttrss/plugins/feediron/default.nix deleted file mode 100644 index 80bfda4..0000000 --- a/pkgs/webapps/ttrss/plugins/feediron/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ patched ? false, stdenv, mylibs, lib }: -stdenv.mkDerivation (mylibs.fetchedGithub ./feediron.json // { - patches = lib.optionals patched [ ./json_reformat.patch ]; - installPhase = '' - mkdir $out - cp -a . $out - ''; - passthru.pluginName = "feediron"; -}) diff --git a/pkgs/webapps/ttrss/plugins/feediron/feediron.json b/pkgs/webapps/ttrss/plugins/feediron/feediron.json deleted file mode 100644 index 5dbec92..0000000 --- a/pkgs/webapps/ttrss/plugins/feediron/feediron.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "407168c-master", - "meta": { - "name": "ttrss-feediron", - "url": "https://github.com/m42e/ttrss_plugin-feediron", - "branch": "master" - }, - "github": { - "owner": "m42e", - "repo": "ttrss_plugin-feediron", - "rev": "407168c628880b5ced572cc549db6d50e866d3c8", - "sha256": "17b95ifpcph6m03hjd1mhi8gi1hw9yd3fnffmw66fqr5c9l3zd9r", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch b/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch deleted file mode 100644 index e1c44d9..0000000 --- a/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/init.php b/init.php -index 3c0f2f9..1aad146 100644 ---- a/init.php -+++ b/init.php -@@ -600,10 +600,11 @@ class Feediron extends Plugin implements IHandler - return false; - } - -- $this->host->set($this, 'json_conf', Feediron_Json::format($json_conf)); -+ $new_conf = json_encode(json_decode($json_conf), JSON_PRETTY_PRINT); -+ $this->host->set($this, 'json_conf', $new_conf); - $json_reply['success'] = true; - $json_reply['message'] = __('Configuration saved.'); -- $json_reply['json_conf'] = Feediron_Json::format($json_conf); -+ $json_reply['json_conf'] = $new_conf; - echo json_encode($json_reply); - } - diff --git a/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix b/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix deleted file mode 100644 index 3540f73..0000000 --- a/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ stdenv, mylibs }: -stdenv.mkDerivation (mylibs.fetchedGithub ./ff_instagram.json // { - installPhase = '' - mkdir $out - cp -a . $out - ''; - passthru.pluginName = "ff_instagram"; -}) diff --git a/pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json b/pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json deleted file mode 100644 index 1f241b9..0000000 --- a/pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "0366ffb-master", - "meta": { - "name": "ttrss-ff_instagram", - "url": "https://github.com/wltb/ff_instagram", - "branch": "master" - }, - "github": { - "owner": "wltb", - "repo": "ff_instagram", - "rev": "0366ffb18c4d490c8fbfba2f5f3367a5af23cfe8", - "sha256": "0vvzl6wi6jmrqknsfddvckjgsgfizz1d923d1nyrpzjfn6bda1vk", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix b/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix deleted file mode 100644 index 2cf3e05..0000000 --- a/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ stdenv, mylibs }: -stdenv.mkDerivation (mylibs.fetchedGithub ./tumblr_gdpr_ua.json // { - installPhase = '' - mkdir $out - cp -a . $out - ''; - passthru.pluginName = "tumblr_gdpr_ua"; -}) diff --git a/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json b/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json deleted file mode 100644 index eafbcfe..0000000 --- a/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "287c584-master", - "meta": { - "name": "ttrss-tumblr_gdpr_ua", - "url": "https://github.com/hkockerbeck/ttrss-tumblr-gdpr-ua", - "branch": "master" - }, - "github": { - "owner": "hkockerbeck", - "repo": "ttrss-tumblr-gdpr-ua", - "rev": "287c584e68845d524f920156bff0b2eaa6f65117", - "sha256": "1fviawgcclqky4k4xv1sqzvpb8i74w9f0pclm09m78s8l85wh9py", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/wallabag/default.nix b/pkgs/webapps/wallabag/default.nix deleted file mode 100644 index bd420d4..0000000 --- a/pkgs/webapps/wallabag/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ varDir ? "/var/lib/wallabag" -, wallabag_config ? "/etc/wallabag/parameters.yml" -, ldap ? false -, composerEnv, fetchurl, lib }: -composerEnv.buildPackage rec { - packages = { - "fr3d/ldap-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "fr3d-ldap-bundle-5a8927c11af45fa06331b97221c6da1a4a237475"; - src = fetchurl { - url = https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475; - sha256 = "168zkd82j200wd6h0a3lq81g5s2pifg889rv27q2g429nppsbfxc"; - }; - }; - }; - "zendframework/zend-ldap" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-ldap-b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49; - sha256 = "0mn4yqnb5prqhrbbybmw1i2rx7xf4s4wagbdq9qi55fa0vk3jgw9"; - }; - }; - }; - }; - noDev = true; - doRemoveVendor = false; - # Beware when upgrading, I probably messed up with the migrations table - # (due to a psql bug in wallabag) - version = "2.3.8"; - name = "wallabag-${version}"; - src = fetchurl { - url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz"; - sha256 = "1sr62hfk2f2rl5by48dg8yd1gchngjnc850as17wr3w287p1kwsq"; - }; - unpackPhase = '' - unpackFile "$src" - sourceRoot=${version} - src=$PWD/${version} - ''; - patches = lib.optionals ldap [ ./ldap.patch ]; - preInstall = '' - export SYMFONY_ENV="prod" - ''; - postInstall = '' - rm -rf web/assets var/{cache,logs,sessions} app/config/parameters.yml data - ln -sf ${wallabag_config} app/config/parameters.yml - ln -sf ${varDir}/var/{cache,logs,sessions} var - ln -sf ${varDir}/data data - ln -sf ${varDir}/assets web/assets - ''; -} diff --git a/pkgs/webapps/wallabag/ldap.patch b/pkgs/webapps/wallabag/ldap.patch deleted file mode 100644 index e04dae1..0000000 --- a/pkgs/webapps/wallabag/ldap.patch +++ /dev/null @@ -1,664 +0,0 @@ -diff --git a/.travis.yml b/.travis.yml -index 04cea258..56b1f576 100644 ---- a/.travis.yml -+++ b/.travis.yml -@@ -58,6 +58,7 @@ install: - - before_script: - - PHP=$TRAVIS_PHP_VERSION -+ - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini - - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; - # xdebug isn't enable for PHP 7.1 - - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi -diff --git a/app/AppKernel.php b/app/AppKernel.php -index 40726f05..c4f465dc 100644 ---- a/app/AppKernel.php -+++ b/app/AppKernel.php -@@ -42,6 +42,10 @@ class AppKernel extends Kernel - new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(), - ]; - -+ if (class_exists('FR3D\\LdapBundle\\FR3DLdapBundle')) { -+ $bundles[] = new FR3D\LdapBundle\FR3DLdapBundle(); -+ } -+ - if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { - $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); - $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); -diff --git a/app/DoctrineMigrations/Version20170710113900.php b/app/DoctrineMigrations/Version20170710113900.php -new file mode 100644 -index 00000000..7be83110 ---- /dev/null -+++ b/app/DoctrineMigrations/Version20170710113900.php -@@ -0,0 +1,54 @@ -+container = $container; -+ } -+ -+ private function getTable($tableName) -+ { -+ return $this->container->getParameter('database_table_prefix').$tableName; -+ } -+ -+ /** -+ * @param Schema $schema -+ */ -+ public function up(Schema $schema) -+ { -+ $usersTable = $schema->getTable($this->getTable('user')); -+ -+ $this->skipIf($usersTable->hasColumn('dn'), 'It seems that you already played this migration.'); -+ -+ $usersTable->addColumn('dn', 'text', [ -+ 'default' => null, -+ 'notnull' => false, -+ ]); -+ } -+ -+ /** -+ * @param Schema $schema -+ */ -+ public function down(Schema $schema) -+ { -+ $usersTable = $schema->getTable($this->getTable('user')); -+ $usersTable->dropColumn('dn'); -+ } -+} -+ -diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist -index 6b0cb8e8..cfd41b69 100644 ---- a/app/config/parameters.yml.dist -+++ b/app/config/parameters.yml.dist -@@ -62,3 +62,23 @@ parameters: - redis_port: 6379 - redis_path: null - redis_password: null -+ -+ # ldap configuration -+ # To enable, you need to require fr3d/ldap-bundle -+ ldap_enabled: false -+ ldap_host: localhost -+ ldap_port: 389 -+ ldap_tls: false -+ ldap_ssl: false -+ ldap_bind_requires_dn: true -+ ldap_base: dc=example,dc=com -+ ldap_manager_dn: ou=Manager,dc=example,dc=com -+ ldap_manager_pw: password -+ ldap_filter: (&(ObjectClass=Person)) -+ # optional (if null: no ldap user is admin) -+ ldap_admin_filter: (&(memberOf=ou=admins,dc=example,dc=com)(uid=%s)) -+ ldap_username_attribute: uid -+ ldap_email_attribute: mail -+ ldap_name_attribute: cn -+ # optional (default sets user as enabled unconditionally) -+ ldap_enabled_attribute: ~ -diff --git a/app/config/security.yml b/app/config/security.yml -index 02afc9ea..48fbb553 100644 ---- a/app/config/security.yml -+++ b/app/config/security.yml -@@ -6,6 +6,7 @@ security: - ROLE_ADMIN: ROLE_USER - ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] - -+ # /!\ This list is modified in WallabagUserBundle when LDAP is enabled - providers: - administrators: - entity: -@@ -36,6 +37,7 @@ security: - pattern: ^/login$ - anonymous: ~ - -+ # /!\ This section is modified in WallabagUserBundle when LDAP is enabled - secured_area: - pattern: ^/ - form_login: -diff --git a/composer.json b/composer.json -index 0483da1d..e3e47bdc 100644 ---- a/composer.json -+++ b/composer.json -@@ -87,7 +87,11 @@ - "bdunogier/guzzle-site-authenticator": "^1.0.0", - "defuse/php-encryption": "^2.1", - "html2text/html2text": "^4.1", -- "sulu/symfony-intl-fix": "^1.0" -+ "sulu/symfony-intl-fix": "^1.0", -+ "fr3d/ldap-bundle": "^3.0" -+ }, -+ "suggest": { -+ "fr3d/ldap-bundle": "If you want to authenticate via LDAP" - }, - "require-dev": { - "doctrine/doctrine-fixtures-bundle": "~2.2", -diff --git a/composer.lock b/composer.lock -index b3b0a4c6..8c8a87ee 100644 ---- a/composer.lock -+++ b/composer.lock -@@ -1346,6 +1346,65 @@ - ], - "time": "2019-05-09T11:53:40+00:00" - }, -+ { -+ "name": "fr3d/ldap-bundle", -+ "version": "v3.0.0", -+ "source": { -+ "type": "git", -+ "url": "https://github.com/Maks3w/FR3DLdapBundle.git", -+ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475" -+ }, -+ "dist": { -+ "type": "zip", -+ "url": "https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475", -+ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475", -+ "shasum": "" -+ }, -+ "require": { -+ "php": ">=5.5", -+ "psr/log": "~1.0", -+ "symfony/config": "2.3 - 3", -+ "symfony/dependency-injection": "2.3 - 3", -+ "symfony/polyfill-php56": "^1.1", -+ "symfony/security": "2.3 - 3", -+ "symfony/security-bundle": "2.3 - 3", -+ "zendframework/zend-ldap": "2.5 - 3" -+ }, -+ "require-dev": { -+ "fabpot/php-cs-fixer": "1.11.*", -+ "fr3d/psr3-message-assertions": "0.1.*", -+ "friendsofsymfony/user-bundle": "~1.3", -+ "maks3w/phpunit-methods-trait": "^4.6", -+ "phpunit/phpunit": "^4.6", -+ "symfony/validator": "2.3 - 3" -+ }, -+ "suggest": { -+ "friendsofsymfony/user-bundle": "Integrate authentication and management for DB users, useful for unmanned LDAP servers", -+ "symfony/validator": "Allow pre-validate for existing users before register new ones" -+ }, -+ "type": "symfony-bundle", -+ "autoload": { -+ "psr-4": { -+ "FR3D\\LdapBundle\\": "" -+ } -+ }, -+ "notification-url": "https://packagist.org/downloads/", -+ "license": [ -+ "MIT" -+ ], -+ "authors": [ -+ { -+ "name": "Maks3w" -+ } -+ ], -+ "description": "This package provide users and authentication services based on LDAP directories for Symfony2 framework", -+ "homepage": "https://github.com/Maks3w/FR3DLdapBundle", -+ "keywords": [ -+ "Authentication", -+ "ldap" -+ ], -+ "time": "2016-02-12T17:45:14+00:00" -+ }, - { - "name": "friendsofsymfony/jsrouting-bundle", - "version": "1.6.3", -@@ -7069,6 +7128,59 @@ - "zf2" - ], - "time": "2018-04-25T15:33:34+00:00" -+ }, -+ { -+ "name": "zendframework/zend-ldap", -+ "version": "2.10.0", -+ "source": { -+ "type": "git", -+ "url": "https://github.com/zendframework/zend-ldap.git", -+ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49" -+ }, -+ "dist": { -+ "type": "zip", -+ "url": "https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49", -+ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49", -+ "shasum": "" -+ }, -+ "require": { -+ "ext-ldap": "*", -+ "php": "^5.6 || ^7.0" -+ }, -+ "require-dev": { -+ "php-mock/php-mock-phpunit": "^1.1.2 || ^2.1.1", -+ "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", -+ "zendframework/zend-coding-standard": "~1.0.0", -+ "zendframework/zend-config": "^2.5", -+ "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", -+ "zendframework/zend-stdlib": "^2.7 || ^3.0" -+ }, -+ "suggest": { -+ "zendframework/zend-eventmanager": "Zend\\EventManager component" -+ }, -+ "type": "library", -+ "extra": { -+ "branch-alias": { -+ "dev-master": "2.10.x-dev", -+ "dev-develop": "2.11.x-dev" -+ } -+ }, -+ "autoload": { -+ "psr-4": { -+ "Zend\\Ldap\\": "src/" -+ } -+ }, -+ "notification-url": "https://packagist.org/downloads/", -+ "license": [ -+ "BSD-3-Clause" -+ ], -+ "description": "Provides support for LDAP operations including but not limited to binding, searching and modifying entries in an LDAP directory", -+ "keywords": [ -+ "ZendFramework", -+ "ldap", -+ "zf" -+ ], -+ "time": "2018-07-05T05:05:12+00:00" - } - ], - "packages-dev": [ -diff --git a/scripts/install.sh b/scripts/install.sh -index affa715f..45254212 100755 ---- a/scripts/install.sh -+++ b/scripts/install.sh -@@ -37,5 +37,8 @@ fi - TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) - - git checkout $TAG -+if [ -n "$LDAP_ENABLED" ]; then -+ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle -+fi - SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist - php bin/console wallabag:install --env=$ENV -diff --git a/scripts/update.sh b/scripts/update.sh -index 3ef10439..eeee28d6 100755 ---- a/scripts/update.sh -+++ b/scripts/update.sh -@@ -42,6 +42,9 @@ git fetch origin - git fetch --tags - TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) - git checkout $TAG --force -+if [ -n "$LDAP_ENABLED" ]; then -+ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle -+fi - SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist - php bin/console doctrine:migrations:migrate --no-interaction --env=$ENV - php bin/console cache:clear --env=$ENV -diff --git a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php -index 5ca3482e..904a6af1 100644 ---- a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php -+++ b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php -@@ -6,9 +6,34 @@ use Symfony\Component\Config\FileLocator; - use Symfony\Component\DependencyInjection\ContainerBuilder; - use Symfony\Component\DependencyInjection\Loader; - use Symfony\Component\HttpKernel\DependencyInjection\Extension; -+use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; - --class WallabagUserExtension extends Extension -+class WallabagUserExtension extends Extension implements PrependExtensionInterface - { -+ public function prepend(ContainerBuilder $container) -+ { -+ $ldap = $container->getParameter('ldap_enabled'); -+ -+ if ($ldap) { -+ $container->prependExtensionConfig('security', array( -+ 'providers' => array( -+ 'chain_provider' => array(), -+ ), -+ )); -+ $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); -+ $loader->load('ldap.yml'); -+ } elseif ($container->hasExtension('fr3d_ldap')) { -+ $container->prependExtensionConfig('fr3_d_ldap', array( -+ 'driver' => array( -+ 'host' => 'localhost', -+ ), -+ 'user' => array( -+ 'baseDn' => 'dc=example,dc=com', -+ ), -+ )); -+ } -+ } -+ - public function load(array $configs, ContainerBuilder $container) - { - $configuration = new Configuration(); -@@ -16,6 +41,9 @@ class WallabagUserExtension extends Extension - - $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); - $loader->load('services.yml'); -+ if ($container->getParameter('ldap_enabled')) { -+ $loader->load('ldap_services.yml'); -+ } - $container->setParameter('wallabag_user.registration_enabled', $config['registration_enabled']); - } - -diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php -index 48446e3c..f93c59c7 100644 ---- a/src/Wallabag/UserBundle/Entity/User.php -+++ b/src/Wallabag/UserBundle/Entity/User.php -@@ -1,5 +1,15 @@ - clients->first(); - } - } -+ -+ /** -+ * Set dn. -+ * -+ * @param string $dn -+ * -+ * @return User -+ */ -+ public function setDn($dn) -+ { -+ $this->dn = $dn; -+ -+ return $this; -+ } -+ -+ /** -+ * Get dn. -+ * -+ * @return string -+ */ -+ public function getDn() -+ { -+ return $this->dn; -+ } -+ -+ public function isLdapUser() -+ { -+ return $this->dn !== null; -+ } - } -diff --git a/src/Wallabag/UserBundle/LdapHydrator.php b/src/Wallabag/UserBundle/LdapHydrator.php -new file mode 100644 -index 00000000..cea2450f ---- /dev/null -+++ b/src/Wallabag/UserBundle/LdapHydrator.php -@@ -0,0 +1,103 @@ -+userManager = $user_manager; -+ $this->eventDispatcher = $event_dispatcher; -+ -+ $this->attributesMap = array( -+ 'setUsername' => $attributes_map[0], -+ 'setEmail' => $attributes_map[1], -+ 'setName' => $attributes_map[2], -+ ); -+ $this->enabledAttribute = $attributes_map[3]; -+ -+ $this->ldapBaseDn = $ldap_base_dn; -+ $this->ldapAdminFilter = $ldap_admin_filter; -+ $this->ldapDriver = $ldap_driver; -+ } -+ -+ public function hydrate(array $ldapEntry) -+ { -+ $user = $this->userManager->findUserBy(array('dn' => $ldapEntry['dn'])); -+ -+ if (!$user) { -+ $user = $this->userManager->createUser(); -+ $user->setDn($ldapEntry['dn']); -+ $user->setPassword(''); -+ $user->setSalt(''); -+ $this->updateUserFields($user, $ldapEntry); -+ -+ $event = new UserEvent($user); -+ $this->eventDispatcher->dispatch(FOSUserEvents::USER_CREATED, $event); -+ -+ $this->userManager->reloadUser($user); -+ } else { -+ $this->updateUserFields($user, $ldapEntry); -+ } -+ -+ return $user; -+ } -+ -+ private function updateUserFields($user, $ldapEntry) -+ { -+ foreach ($this->attributesMap as $key => $value) { -+ if (is_array($ldapEntry[$value])) { -+ $ldap_value = $ldapEntry[$value][0]; -+ } else { -+ $ldap_value = $ldapEntry[$value]; -+ } -+ -+ call_user_func([$user, $key], $ldap_value); -+ } -+ -+ if ($this->enabledAttribute !== null) { -+ $user->setEnabled($ldapEntry[$this->enabledAttribute]); -+ } else { -+ $user->setEnabled(true); -+ } -+ -+ if ($this->isAdmin($user)) { -+ $user->addRole('ROLE_SUPER_ADMIN'); -+ } else { -+ $user->removeRole('ROLE_SUPER_ADMIN'); -+ } -+ -+ $this->userManager->updateUser($user, true); -+ } -+ -+ private function isAdmin($user) -+ { -+ if ($this->ldapAdminFilter === null) { -+ return false; -+ } -+ -+ $escaped_username = ldap_escape($user->getUsername(), '', LDAP_ESCAPE_FILTER); -+ $filter = sprintf($this->ldapAdminFilter, $escaped_username); -+ $entries = $this->ldapDriver->search($this->ldapBaseDn, $filter); -+ -+ return $entries['count'] == 1; -+ } -+} -diff --git a/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php -new file mode 100644 -index 00000000..8a851f12 ---- /dev/null -+++ b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php -@@ -0,0 +1,43 @@ -+ldapManager = $ldap_manager; -+ } -+ -+ public function checkUserCredentials(IOAuth2Client $client, $username, $password) -+ { -+ try { -+ $user = $this->userProvider->loadUserByUsername($username); -+ } catch (AuthenticationException $e) { -+ return false; -+ } -+ -+ if ($user->isLdapUser()) { -+ return $this->checkLdapUserCredentials($user, $password); -+ } else { -+ return parent::checkUserCredentials($client, $username, $password); -+ } -+ } -+ -+ private function checkLdapUserCredentials($user, $password) -+ { -+ if ($this->ldapManager->bind($user, $password)) { -+ return array( -+ 'data' => $user, -+ ); -+ } else { -+ return false; -+ } -+ } -+} -diff --git a/src/Wallabag/UserBundle/Resources/config/ldap.yml b/src/Wallabag/UserBundle/Resources/config/ldap.yml -new file mode 100644 -index 00000000..5ec16088 ---- /dev/null -+++ b/src/Wallabag/UserBundle/Resources/config/ldap.yml -@@ -0,0 +1,28 @@ -+fr3d_ldap: -+ service: -+ user_hydrator: ldap_user_hydrator -+ driver: -+ host: "%ldap_host%" -+ port: "%ldap_port%" -+ useSsl: "%ldap_ssl%" -+ useStartTls: "%ldap_tls%" -+ bindRequiresDn: "%ldap_bind_requires_dn%" -+ username: "%ldap_manager_dn%" -+ password: "%ldap_manager_pw%" -+ user: -+ baseDn: "%ldap_base%" -+ filter: "%ldap_filter%" -+ usernameAttribute: "%ldap_username_attribute%" -+security: -+ providers: -+ chain_provider: -+ chain: -+ providers: [ fr3d_ldapbundle, fos_userbundle ] -+ fr3d_ldapbundle: -+ id: fr3d_ldap.security.user.provider -+ firewalls: -+ secured_area: -+ fr3d_ldap: ~ -+ form_login: -+ provider: chain_provider -+ -diff --git a/src/Wallabag/UserBundle/Resources/config/ldap_services.yml b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml -new file mode 100644 -index 00000000..b3e3fd8a ---- /dev/null -+++ b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml -@@ -0,0 +1,22 @@ -+services: -+ fos_oauth_server.server: -+ class: OAuth2\OAuth2 -+ arguments: -+ - "@oauth_storage_ldap_wrapper" -+ - "%fos_oauth_server.server.options%" -+ oauth_storage_ldap_wrapper: -+ class: Wallabag\UserBundle\OAuthStorageLdapWrapper -+ parent: fos_oauth_server.storage -+ calls: -+ - [setLdapManager, ["@fr3d_ldap.ldap_manager"]] -+ -+ ldap_user_hydrator: -+ class: Wallabag\UserBundle\LdapHydrator -+ arguments: -+ - "@fos_user.user_manager" -+ - "@event_dispatcher" -+ - [ "%ldap_username_attribute%", "%ldap_email_attribute%", "%ldap_name_attribute%", "%ldap_enabled_attribute%" ] -+ - "%ldap_base%" -+ - "%ldap_admin_filter%" -+ - "@fr3d_ldap.ldap_driver" -+ diff --git a/pkgs/webapps/yourls/default.nix b/pkgs/webapps/yourls/default.nix deleted file mode 100644 index d940c54..0000000 --- a/pkgs/webapps/yourls/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ yourls_config ? "/etc/yourls/config.php", mylibs, callPackage, lib, stdenv }: -let - pluginNames = [ "ldap" ]; - allPlugins = lib.attrsets.genAttrs pluginNames - (name: callPackage (./plugins + "/${name}") { inherit mylibs; }); - toPassthru = pkg: plugins: { - inherit plugins allPlugins; - withPlugins = withPlugins pkg; - }; - withPlugins = pkg: toPlugins: - let - plugins = toPlugins allPlugins; - toInstallPlugin = n: "ln -s ${n} $out/user/plugins/${n.pluginName}"; - newYourls = pkg.overrideAttrs(old: { - installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); - passthru = toPassthru newYourls (pkg.plugins ++ plugins); - }); - in newYourls; - package = stdenv.mkDerivation (mylibs.fetchedGithub ./yourls.json // rec { - installPhase = '' - mkdir -p $out - cp -a */ *.php $out/ - cp sample-robots.txt $out/robots.txt - ln -sf ${yourls_config} $out/includes/config.php - ''; - passthru = toPassthru package []; - }); -in package diff --git a/pkgs/webapps/yourls/plugins/ldap/default.nix b/pkgs/webapps/yourls/plugins/ldap/default.nix deleted file mode 100644 index 01dc6fb..0000000 --- a/pkgs/webapps/yourls/plugins/ldap/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ stdenv, mylibs }: -stdenv.mkDerivation (mylibs.fetchedGithub ./ldap.json // rec { - installPhase = '' - mkdir -p $out - cp plugin.php $out - ''; - passthru.pluginName = "ldap"; -}) diff --git a/pkgs/webapps/yourls/plugins/ldap/ldap.json b/pkgs/webapps/yourls/plugins/ldap/ldap.json deleted file mode 100644 index 9411e4a..0000000 --- a/pkgs/webapps/yourls/plugins/ldap/ldap.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "2a3cb03-master", - "meta": { - "name": "yourls-ldap-plugin", - "url": "https://github.com/k3a/yourls-ldap-plugin", - "branch": "master" - }, - "github": { - "owner": "k3a", - "repo": "yourls-ldap-plugin", - "rev": "2a3cb0334b8a6b81b284a7196e614bbd2b2b1615", - "sha256": "0cchbnli77d295lzf7kjmn4dcxj2bmdqa9qc3f8l8qgmp4n5n0gh", - "fetchSubmodules": true - } -} diff --git a/pkgs/webapps/yourls/yourls.json b/pkgs/webapps/yourls/yourls.json deleted file mode 100644 index 0a79b18..0000000 --- a/pkgs/webapps/yourls/yourls.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tag": "1.7.3", - "meta": { - "name": "yourls", - "url": "https://github.com/YOURLS/YOURLS", - "branch": "refs/tags/1.7.3" - }, - "github": { - "owner": "YOURLS", - "repo": "YOURLS", - "rev": "077018822d3594229daa8343310d0b40804b9ddc", - "sha256": "1av6h619rwqn0yn0kjn2s2h3gmrhmxaaa9hd5ns4ralxgg731imd", - "fetchSubmodules": true - } -} diff --git a/scripts/fetch_version b/scripts/fetch_version deleted file mode 100755 index 5c4715a..0000000 --- a/scripts/fetch_version +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env bash - -usage() { - echo "$0 file.json" - echo "$0 [-n|--name name] [-b|--branch branch_or_rev] [-f|--file out_file] [-h|--help] (-u|--url) url" - exit -} - -branch="master" -while [[ $# -gt 0 ]]; do - a="$1" - shift - case "$a" in - *.json) - file=$a - content=$(cat $a) - name="$(echo "$content" | jq -r ".meta.name")" - url="$(echo "$content" | jq -r ".meta.url")" - branch="$(echo "$content" | jq -r ".meta.branch")" - ;; - -n|--name) - name=$1 - shift - ;; - -u|--url) - url=$1 - shift - ;; - -b|--branch) - branch=$1 - shift - ;; - -f|--file) - file=$1 - shift - ;; - -h|--help) - usage - ;; - esac -done -if [ -z "$url" ]; then - usage -fi -if [ -z "$name" ]; then - name=$(echo "$url" | cut -d"/" -f5) -fi -if [ -z "$file" ]; then - file=$name.json -fi - -# function fetch_ledger () { -# pushd $HOME/projets/ledger >/dev/null 2>/dev/null -# git fetch origin -# tag="$(git describe origin/next | sed -e "s/^v//")" -# rev="$(git show-ref -s refs/remotes/origin/next)" -# sha="$(nix-prefetch-url --unpack file://<(git archive --format=tar.gz HEAD) 2>/dev/null)" -# popd >/dev/null 2>/dev/null -# } - -# awk_describe='BEGIN { -# FS = "[ /^]+" -# while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) { -# if (!sha) -# sha = substr($0, 1, 7) -# tag = $3 -# } -# while ("curl -s " ARGV[1] "/releases/tag/" tag | getline) -# if ($3 ~ "commits") -# com = $2 -# printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha -# }' - -function get_ref () { - case "$1" in - refs/*) - echo "$1" - ;; - *) - echo "refs/heads/$1" - ;; - esac -} - -function get_name () { - branch="$1" - rev="$2" - minirev=${rev:0:7} - - case "$branch" in - refs/tags/*) - b="${branch#refs/tags/}" - echo "${b//\//-}" - ;; - refs/heads/*) - b=${branch#refs/heads/} - echo "$minirev-${b//\//-}" - ;; - refs/*) - b=${branch#refs/} - echo "$minirev-${b//\//-}" - ;; - *) - echo "$minirev-${branch//\//-}" - ;; - esac -} - -function fetch_github () { - rev="$(git ls-remote --refs $url $(get_ref $branch) | head -n1 | cut -f1)" - sha="$(nix-prefetch-url --unpack $url/archive/$rev.tar.gz)" - # Différent du git-describe et github-spécifique - #tag=$(echo "$awk_describe" | awk -f - $url | sed -e "s/^v//") - tag=$(get_name $branch $rev) -} - -function fetch_other () { - rev="$(git ls-remote --refs $url $(get_ref $branch) | head -n1 | cut -f1)" - sha="$(nix-prefetch-git --url $url --rev $(get_ref $branch) | jq -r '.sha256')" - tag=$(get_name $branch $rev) -} - -case "$url" in - https://*github.com/*) - fetch_github 2>/dev/null - owner=$(echo "$url" | cut -d"/" -f4) - repo=$(echo "$url" | cut -d"/" -f5) - - F='{ - "tag": $tag, - "meta": { - "name": $name, - "url": $url, - "branch": $branch - }, - "github": { - "owner": $owner, - "repo": $repo, - "rev": $rev, - "sha256": $sha, - "fetchSubmodules": true - } - }' - ;; - *) - fetch_other 2>/dev/null - F='{ - "tag": $tag, - "meta": { - "name": $name, - "url": $url, - "branch": $branch - }, - "git": { - "url": $url, - "rev": $rev, - "sha256": $sha, - "fetchSubmodules": true - } - }' - ;; -esac - -jq -n \ - --arg name "$name" \ - --arg owner "$owner" \ - --arg repo "$repo" \ - --arg tag "$tag" \ - --arg rev "$rev" \ - --arg url "$url" \ - --arg branch "$branch" \ - --arg sha "$sha" \ - "$F" > $file diff --git a/scripts/make-nur b/scripts/make-nur index 127f8bd..2b7278f 100755 --- a/scripts/make-nur +++ b/scripts/make-nur @@ -19,7 +19,7 @@ git rebase --onto=$nur_root $first_commit master # The list below musn't get shrinked, it is used by filter-branch on # every commit clean_folder=' - rm -rf config lib/private modules/private pkgs/private nixops + rm -rf config lib/private modules/private pkgs/private deploy for broken in pkgs/crypto/cardano/default.nix; do if [ -f $broken ]; then rm -f $broken diff --git a/scripts/refresh_flakes b/scripts/refresh_flakes new file mode 100755 index 0000000..2bbcad6 --- /dev/null +++ b/scripts/refresh_flakes @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +set -e + +declare -A refreshed + +while [ -n "$1" ]; do + case "$1" in + --no-new-inputs) + no_new_inputs="y" + shift;; + *) + flake_or_dir="$1" + shift;; + esac +done + +refresh_deps() { + local flake + local inputs=() + local depname + local deppath + flake="$(realpath $1)" + if [ "${refreshed[$flake]}" = 1 ]; then + return + fi + pushd "$flake" 2>/dev/null >/dev/null + if [ -z "$no_new_inputs" ]; then + nix --no-warn-dirty flake lock + fi + if [ ! -e "$flake/flake.lock" ]; then + popd 2>/dev/null >/dev/null + refreshed[$flake]=1 + return + fi + + deps=$(jq -r '. as $root | .nodes[.root].inputs|values|to_entries|map({ key: .key, value: $root.nodes[.value].original.path })[]|select(.value != null)|.key + " " + .value' < flake.lock) + if [ -n "$deps" ]; then + while read depname deppath; do + refresh_deps "$deppath" + inputs+=(--update-input "$depname") + done <<<"$deps" + fi + nix --no-warn-dirty flake lock "${inputs[@]}" + popd 2>/dev/null >/dev/null + refreshed[$flake]=1 +} + +git_dir=$(git rev-parse --show-toplevel) + +# If argument is given (flake.nix or directory containing), refresh that argument +# Otherwise, if we are in a subdirectory containing a flake.nix, refresh that +# Otherwise, refresh all +if [ -n "$flake_or_dir" ]; then + if [ -d "$flake_or_dir" -a -e "$1/flake.nix" ]; then + refresh_deps "$flake_or_dir" + elif [ -f "$flake_or_dir" -a -e "$(dirname $flake_or_dir)/flake.nix" ]; then + refresh_deps "$(dirname $flake_or_dir)" + else + echo "No flake.nix file in specified location" + exit 1 + fi +else + if [ "$(pwd)" != "$git_dir" -a -e "$(pwd)/flake.nix" ]; then + refresh_deps "$(pwd)" + else + find $git_dir -name "flake.lock" | while read flake; do + refresh_deps "$(dirname $flake)" + done + fi +fi diff --git a/scripts/setup b/scripts/setup new file mode 100755 index 0000000..db0f353 --- /dev/null +++ b/scripts/setup @@ -0,0 +1,90 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if ! which nix 2>/dev/null >/dev/null; then + cat <<-EOF + nix is needed, please install it: + > curl https://nixos.org/nix/install | sh + (or any other way handled by your distribution) + EOF + exit 1 +fi + +if [ "${NIX_STORE:-/nix/store}" != "/nix/store" ]; then + cat <<-EOF + Nix store outside of /nix/store is not supported + EOF + exit 1 +fi + +if ! which direnv 2>/dev/null >/dev/null; then + cat <<-EOF + direnv is needed, please install it + EOF + exit 1 +fi + +if [ -z "$NIXOPS_ENV_LOADED" ]; then + cat <<-EOF + direnv environment needs to be loaded + EOF + exit 1 +fi + +if [ "$(git config --get include.path)" != "../.gitconfig" ]; then + cat <<-EOF + it is recommended to include the .gitconfig file into (local) git configuration: + git config --local include.path '../.gitconfig' + Run this command? [y/N] + EOF + read y + if [ "$y" = "y" -o "$y" = "Y" ]; then + git config --local include.path '../.gitconfig' + fi +fi + +for key in public_keys/*; do + fpr=$(cat "$key" | gpg --import-options show-only --import --with-colons | grep -e "^pub" | cut -d':' -f5) + gpg --list-key "$fpr" >/dev/null 2>/dev/null && imported=yes || imported=no + # /usr/share/doc/gnupg/DETAILS field 2 + (cat "$key" | gpg --import-options show-only --import --with-colons | + grep -E '^pub:' | + cut -d':' -f2 | + grep -q '[fu]') && signed=yes || signed=no + if [ "$signed" = no -o "$imported" = no ] ; then + echo "The key for $key needs to be imported and signed (a local signature is enough)" + cat "$key" | gpg --import-options show-only --import + echo "Continue? [y/N]" + read y + if [ "$y" = "y" -o "$y" = "Y" ]; then + cat "$key" | gpg --import + gpg --expert --edit-key "$fpr" lsign quit + else + echo "Aborting" + exit 1 + fi + fi +done + +if nix show-config --json | jq -e '.sandbox.value == "true"' >/dev/null; then + cat <<-EOF + There used to be some impure derivations (grep __noChroot), you may need + sandbox = "relaxed" + in /etc/nix/nix.conf + you may also want to add + keep-outputs = true + keep-derivations = true + to prevent garbage collector from deleting build dependencies (they take a lot of time to build) + and + allow-import-from-derivation = false + as an attempt to avoid having build-time derivations (doesn’t work for all packages) + press key to continue + EOF + read y +fi + +cat <<-EOF + All set up. + Please make sure you’re using make commands when deploying + EOF diff --git a/scripts/update_flake b/scripts/update_flake new file mode 100755 index 0000000..3a9cd17 --- /dev/null +++ b/scripts/update_flake @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +searched_file="$1" + +get_inputs() { + flake=$1 + name=$2 + cat "$flake" | jq -r --arg name "$name" '.nodes|to_entries[]|select(.value.original.path != null and (.value.original.path|test("(../)+" + $name)))|.key' +} + +find flakes -name "flake.lock" | while read flake; do + for input in $(get_inputs "$flake" "$searched_file"); do + echo "updating $input in $(dirname "$flake")" + pushd "$(dirname "$flake")" >/dev/null 2>/dev/null + nix flake update --update-input "$input" + popd >/dev/null 2>/dev/null + done +done diff --git a/scripts/with_env b/scripts/with_env new file mode 100755 index 0000000..783d86c --- /dev/null +++ b/scripts/with_env @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +if [ -z "$SOPS_VARS_FILE" ]; then + echo "Variable SOPS_VARS_FILE is needed with a path to the sops variables" + exit 1; +fi + +umask 0077 +TEMP=$(mktemp -d /tmp/XXXXXX-nixops-files) +chmod go-rwx $TEMP + +finish() { + rm -rf "$TEMP" +} + +trap finish EXIT + +sops -d $SOPS_VARS_FILE | yq -r .ssl_keys.nix_repository > $TEMP/id_ed25519 + +cat > $TEMP/ssh_config < { overlays = builtins.attrValues (import ./overlays); }, - pkgs-nix ? import { overlays = builtins.attrValues (import ./overlays); } -}: -let - patchedNix = pkgs-nix.nixUnstable.overrideAttrs(old: { - patches = old.patches ++ [ - # Fix the ETag bug. PR merged. Remove when updating to >= 20210125 - # https://github.com/NixOS/nixpkgs/pull/109309#issuecomment-768331750 - (pkgs-nix.fetchpatch { - url = "https://patch-diff.githubusercontent.com/raw/NixOS/nix/pull/4470.diff"; - sha256 = "sha256-d4RNOKMxa4NMbFgYcqWRv2ByHt8F/XUWV+6P9qHz7S4="; - }) - ]; - }); -in -pkgs.mkShell { - buildInputs = [ patchedNix pkgs.sops pkgs.morph pkgs.niv pkgs.curl pkgs.shellcheck pkgs.jq pkgs.gnumake pkgs.yq ]; -} diff --git a/systems/backup-2/base.nix b/systems/backup-2/base.nix new file mode 100644 index 0000000..97a364c --- /dev/null +++ b/systems/backup-2/base.nix @@ -0,0 +1,164 @@ +{ config, pkgs, resources, name, lib, nixpkgs, secrets, ... }: +{ + # 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; + + nixpkgs.config.permittedInsecurePackages = [ + "python-2.7.18.6" # for nagios-cli + ]; + + imports = + [ + secrets.nixosModules.users-config-backup-2 + (nixpkgs + "/nixos/modules/profiles/qemu-guest.nix") + ./databases/mariadb_replication.nix + ./databases/openldap_replication.nix + ./databases/postgresql_replication.nix + ./databases/redis_replication.nix + ./mail/relay.nix + ./monitoring.nix + ]; + + 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.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = 32; }) (ips.ip4 or [])) + (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"; + + security.acme.certs."${name}" = { + 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; + }; + + myServices.chatonsProperties.hostings.rsync-backup = { + file.datetime = "2022-08-27T16:00:00"; + hosting = { + name = "Rsync backups"; + description = "Remote initiated rsync backups"; + website = "backup-2.v.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "rsync"; + website = "https://rsync.samba.org/"; + license.url = "https://rsync.samba.org/GPL.html"; + license.name = "GNU General Public License version 3"; + version = pkgs.rsync.version; + source.url = "https://github.com/WayneD/rsync"; + }; + }; + + 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 = lib.head config.myEnv.servers.eldiron.ips.main.ip4; + port = config.myEnv.databases.mysql.port; + 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 = "23.05"; # Did you read the comment? +} diff --git a/systems/backup-2/databases/mariadb_replication.nix b/systems/backup-2/databases/mariadb_replication.nix new file mode 100644 index 0000000..8d2b457 --- /dev/null +++ b/systems/backup-2/databases/mariadb_replication.nix @@ -0,0 +1,271 @@ +{ 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.int; + 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 { + myServices.chatonsProperties.hostings.mysql-replication = { + file.datetime = "2022-08-27T15:00:00"; + hosting = { + name = "Mysql replication"; + description = "Replication of mysql database"; + website = "db-1.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "MariaDB"; + website = "https://mariadb.org/"; + license.url = "https://github.com/MariaDB/server/blob/10.11/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.mariadb.version; + source.url = "https://github.com/MariaDB/server"; + }; + }; + 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=${builtins.toString 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 ${builtins.toString 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/systems/backup-2/databases/openldap_replication.nix b/systems/backup-2/databases/openldap_replication.nix new file mode 100644 index 0000000..b962224 --- /dev/null +++ b/systems/backup-2/databases/openldap_replication.nix @@ -0,0 +1,165 @@ +{ pkgs, config, lib, openldap, ... }: +let + cfg = config.myServices.databasesReplication.openldap; + 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 + include ${openldap.immae-schema} + pidfile /run/slapd_${name}/slapd.pid + argsfile /run/slapd_${name}/slapd.args + + moduleload back_mdb + backend mdb + database mdb + + 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/systems/backup-2/databases/postgresql_replication.nix b/systems/backup-2/databases/postgresql_replication.nix new file mode 100644 index 0000000..5351a4f --- /dev/null +++ b/systems/backup-2/databases/postgresql_replication.nix @@ -0,0 +1,203 @@ +{ 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 { + myServices.chatonsProperties.hostings.postgresql-replication = { + file.datetime = "2022-08-27T15:00:00"; + hosting = { + name = "PostgreSQL replication"; + description = "Replication of PostgreSQL database"; + website = "db-1.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "PostgreSQL"; + website = "https://www.postgresql.org/"; + license.url = "https://www.postgresql.org/about/licence/"; + license.name = "The PostgreSQL Licence"; + version = pkgs.postgresql.version; + source.url = "https://git.postgresql.org/gitweb/?p=postgresql.git;a=summary"; + }; + }; + 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 + max_connections = 300 + ''; + }) + ]) 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/systems/backup-2/databases/redis_replication.nix b/systems/backup-2/databases/redis_replication.nix new file mode 100644 index 0000000..53fa904 --- /dev/null +++ b/systems/backup-2/databases/redis_replication.nix @@ -0,0 +1,171 @@ +{ 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 = "${lib.head 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/systems/backup-2/databases/utils.nix b/systems/backup-2/databases/utils.nix new file mode 100644 index 0000000..1b3190f --- /dev/null +++ b/systems/backup-2/databases/utils.nix @@ -0,0 +1,30 @@ +{ 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.python38}/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/systems/backup-2/flake.lock b/systems/backup-2/flake.lock new file mode 100644 index 0000000..46003ba --- /dev/null +++ b/systems/backup-2/flake.lock @@ -0,0 +1,1159 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_6", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "chatons": { + "inputs": { + "environment": "environment" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_3", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "mail-relay": { + "inputs": { + "environment": "environment_3", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "../../flakes/private/mail-relay", + "type": "path" + }, + "original": { + "path": "../../flakes/private/mail-relay", + "type": "path" + } + }, + "milters": { + "inputs": { + "environment": "environment_4", + "files-watcher": "files-watcher", + "openarc": "openarc", + "opendmarc": "opendmarc", + "secrets": "secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "monitoring": { + "inputs": { + "environment": "environment_5", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib", + "secrets": "secrets_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_11", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_5", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "openarc": { + "inputs": { + "flake-utils": "flake-utils", + "myuids": "myuids", + "nixpkgs": "nixpkgs", + "openarc": "openarc_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_2": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_3": { + "inputs": { + "files-watcher": "files-watcher_2", + "openarc": "openarc_4", + "secrets": "secrets_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "openarc_4": { + "inputs": { + "flake-utils": "flake-utils_4", + "myuids": "myuids_4", + "nixpkgs": "nixpkgs_8", + "openarc": "openarc_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_5": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "opendmarc": { + "inputs": { + "flake-utils": "flake-utils_2", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_2": { + "inputs": { + "environment": "environment_6", + "files-watcher": "files-watcher_3", + "opendmarc": "opendmarc_3", + "secrets": "secrets_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "opendmarc_3": { + "inputs": { + "flake-utils": "flake-utils_5", + "myuids": "myuids_5", + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "root": { + "inputs": { + "chatons": "chatons", + "environment": "environment_2", + "loginctl-linger": "loginctl-linger", + "mail-relay": "mail-relay", + "milters": "milters", + "monitoring": "monitoring", + "my-lib": "my-lib", + "myuids": "myuids_3", + "nixpkgs": "nixpkgs_7", + "openarc": "openarc_3", + "opendmarc": "opendmarc_2", + "openldap": "openldap", + "rsync_backup": "rsync_backup", + "secrets": "secrets_6", + "system": "system" + } + }, + "rsync_backup": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TxLsFx4DTTScMHkvR0pJgzYea6ILiu1Dl6LA67LtYGo=", + "path": "../../flakes/rsync_backup", + "type": "path" + }, + "original": { + "path": "../../flakes/rsync_backup", + "type": "path" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "system": { + "inputs": { + "backports": "backports", + "environment": "environment_7", + "mypackages": "mypackages", + "myuids": "myuids_6", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/backup-2/flake.nix b/systems/backup-2/flake.nix new file mode 100644 index 0000000..e6807d6 --- /dev/null +++ b/systems/backup-2/flake.nix @@ -0,0 +1,51 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + my-lib.url = "path:../../flakes/lib"; + + openldap.url = "path:../../flakes/private/openldap"; + monitoring.url = "path:../../flakes/private/monitoring"; + mail-relay.url = "path:../../flakes/private/mail-relay"; + milters.url = "path:../../flakes/private/milters"; + openarc.url = "path:../../flakes/private/openarc"; + opendmarc.url = "path:../../flakes/private/opendmarc"; + chatons.url = "path:../../flakes/private/chatons"; + environment.url = "path:../../flakes/private/environment"; + system.url = "path:../../flakes/private/system"; + + myuids.url = "path:../../flakes/myuids"; + secrets.url = "path:../../flakes/secrets"; + rsync_backup.url = "path:../../flakes/rsync_backup"; + loginctl-linger.url = "path:../../flakes/loginctl-linger"; + }; + outputs = inputs@{ self, my-lib, nixpkgs, ...}: + my-lib.lib.mkColmenaFlake { + name = "backup-2"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "95.217.19.143"; + targetUser = "root"; + nixosModules = { + base = ./base.nix; + system = inputs.system.nixosModule; + mail-relay = inputs.mail-relay.nixosModule; + milters = inputs.milters.nixosModule; + openarc = inputs.openarc.nixosModule; + opendmarc = inputs.opendmarc.nixosModule; + chatons = inputs.chatons.nixosModule; + monitoring = inputs.monitoring.nixosModule; + environment = inputs.environment.nixosModule; + + myuids = inputs.myuids.nixosModule; + secrets = inputs.secrets.nixosModule; + rsync_backup = inputs.rsync_backup.nixosModule; + loginctl-linger = inputs.loginctl-linger.nixosModule; + }; + moduleArgs = { + nixpkgs = inputs.nixpkgs; + openldap = inputs.openldap; + monitoring = inputs.monitoring; + }; + }; +} diff --git a/systems/backup-2/mail/relay.nix b/systems/backup-2/mail/relay.nix new file mode 100644 index 0000000..1b7e25e --- /dev/null +++ b/systems/backup-2/mail/relay.nix @@ -0,0 +1,196 @@ +{ lib, pkgs, config, name, nodes, ... }: +let + getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) (lib.filterAttrs (n: v: v.receive) p.emailPolicies); + bydomain = builtins.mapAttrs (n: getDomains) nodes.eldiron.config.myServices.dns.zones; + receiving_domains = lib.flatten (builtins.attrValues bydomain); +in +{ + options.myServices.mailBackup.enable = lib.mkEnableOption "enable MX backup services"; + config = lib.mkIf config.myServices.mailBackup.enable { + myServices.mail.milters.enable = true; + security.acme.certs."mail" = { + postRun = '' + systemctl restart postfix.service + ''; + domain = config.hostEnv.fqdn; + extraDomainNames = let + zonesWithMx = builtins.attrNames (lib.filterAttrs (n: v: v.hasEmail) nodes.eldiron.config.myServices.dns.zones); + mxs = map (n: "${config.myEnv.servers."${name}".mx.subdomain}.${n}") zonesWithMx; + in 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 + virtual_map = { + virtual = let + cfg = config.myEnv.monitoring.email_check.eldiron; + address = "${cfg.mail_address}@${cfg.mail_domain}"; + aliases = config.myEnv.mail.postfix.common_aliases; + in pkgs.writeText "postfix-virtual" ( + builtins.concatStringsSep "\n" ( + [ "${address} 1" + ] ++ + map (a: "${a} 1") config.myEnv.mail.postfix.other_aliases ++ + lib.lists.flatten (map (domain: map (alias: "${alias}@${domain} 1") aliases) receiving_domains) + ) + ); + }; + in + 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 = receiving_domains; + relay_recipient_maps = let + 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 + virtual_alias_maps ++ virtual_mailbox_maps; + smtpd_relay_restrictions = [ + "defer_unauth_destination" + ]; + + ### 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 = builtins.head 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/systems/backup-2/monitoring.nix b/systems/backup-2/monitoring.nix new file mode 100644 index 0000000..6d769e3 --- /dev/null +++ b/systems/backup-2/monitoring.nix @@ -0,0 +1,117 @@ +{ config, pkgs, lib, name, openldap, monitoring, ... }: +let + hostFQDN = config.hostEnv.fqdn; + emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check; +in +{ + config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "file_date" "mysql" "openldap" "redis" "emails" "notify-secondary"]; + config.myServices.monitoring.objects = lib.mkMerge [ + (monitoring.lib.objectsCommon { + inherit hostFQDN; + hostName = name; + master = false; + processWarn = "60"; processAlert = "70"; + loadWarn = "4.0"; loadAlert = "6.0"; + load15Warn = "1.0"; load15Alert = "1.0"; + interface = builtins.head (builtins.attrNames config.networking.interfaces); + }) + + { + service = [ + (emailCheck "backup-2" hostFQDN // { + __passive_servicegroups = "webstatus-email"; + }) + { + service_description = "Size on /backup2 partition"; + use = "local-service"; + check_command = ["check_local_disk" "10%" "5%" "/backup2"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Last backup in /backup2/phare is not too old"; + use = "local-service"; + check_command = ["check_last_file_date" "/backup2/phare" "14" "backup"]; + __passive_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"]; + __passive_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"]; + __passive_servicegroups = "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"]; + __passive_servicegroups = "webstatus-databases,webstatus-backup"; + } + { + service_description = "Redis replication for eldiron is up to date"; + use = "local-service"; + check_command = ["check_redis_replication" "/run/redis_eldiron/redis.sock"]; + __passive_servicegroups = "webstatus-databases"; + } + { + 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"]; + __passive_servicegroups = "webstatus-databases,webstatus-backup"; + } + { + 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"]; + __passive_servicegroups = "webstatus-databases"; + } + { + 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"]; + __passive_servicegroups = "webstatus-databases,webstatus-backup"; + } + { + 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; + 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 + include ${openldap.immae-schema} + moduleload back_mdb + backend mdb + database mdb + + 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}" + ]; + __passive_servicegroups = "webstatus-databases"; + } + { + 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"]; + __passive_servicegroups = "webstatus-databases,webstatus-backup"; + } + ]; + } + ]; +} diff --git a/systems/dilion/base.nix b/systems/dilion/base.nix new file mode 100644 index 0000000..ac4bdaf --- /dev/null +++ b/systems/dilion/base.nix @@ -0,0 +1,309 @@ +{ config, pkgs, name, lib, pkgs-no-overlay, secrets, ... }: +{ + # ssh-keyscan dilion | nix-shell -p ssh-to-age --run ssh-to-age + secrets.ageKeys = [ "age1x49n6qa0arkdpq8530s7umgm0gqkq90exv4jep97q30rfnzknpaqate06a" ]; + boot = { + loader = { + grub = { + devices = [ "/dev/sda" "/dev/sdb" "/dev/sdc" "/dev/sdd" ]; + }; + timeout = 1; + }; + blacklistedKernelModules = [ "nvidiafb" ]; + supportedFilesystems = [ "zfs" ]; + kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; + 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" ]; + }; + powerManagement.cpuFreqGovernor = "powersave"; + hardware.enableRedistributableFirmware = true; + + 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" + ''; + + nixpkgs.config.permittedInsecurePackages = [ + "python-2.7.18.6" # for nagios-cli + ]; + + networking = { + hostId = "27c3048d"; # generated with head -c4 /dev/urandom | od -A none -t x4 + firewall.enable = false; + interfaces."eth0".ipv4.addresses = + [ { address = lib.head config.hostEnv.ips.main.ip4; prefixLength = 27; } ] + ++ pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = 32; }) (ips.ip4 or [])) + (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.regular.snippet = builtins.readFile ./ssh_ldap_regular.sh; + + imports = [ + secrets.nixosModules.users-config-dilion + ./monitoring.nix + ./vms.nix + ]; + + myServices.vms.libvirt-guests = { + buildbot = { + pool = "zfspool"; + network = "immae"; + cpus = 1; + memory = 3; + diskSize = 10; + destroyVolumeOnExit = true; + }; + }; + myServices.vms.libvirt-images = { + nixos = ./vms/base_configuration.nix; + buildbot = ./vms/buildbot_configuration.nix; + }; + myServices.vms.libvirt-networks.immae = { + bridgeNumber = 1; + ipRange = "192.168.100"; + }; + myServices.vms.libvirt-pools = { + niximages = { + type = "dir"; + target = "/etc/libvirtd/base-images"; + }; + buildbot-disks = rec { + type = "dir"; + target = "/var/lib/libvirt/images/buildbot-disks"; + preStart = '' + mkdir -p ${target} + ''; + }; + zfspool = { + # pool-define-as --name zfspool --source-name zpool/libvirt --type zfs + type = "zfs"; + xml = '' + + zpool/libvirt + + ''; + }; + }; + + 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.libressl.nc ]; + openssh.authorizedKeys.keys = [ + config.myEnv.buildbot.ssh_key.public + config.myEnv.sshd.rootKeys.ismael_flony + ]; + }; + + users.groups.backup = {}; + users.users.backup = { + hashedPassword = "!"; + isSystemUser = true; + extraGroups = [ "keys" ]; + group = "backup"; + shell = pkgs.bashInteractive; + openssh.authorizedKeys.keys = let + zreplConfig = "/etc/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"; + } + ]; + + virtualisation.docker.enable = true; + virtualisation.docker.storageDriver = "zfs"; + virtualisation.libvirtd.enable = true; + virtualisation.libvirtd.qemu.package = pkgs-no-overlay.qemu; + systemd.services.libvirtd.path = lib.mkAfter [ config.boot.zfs.package ]; + users.groups.immae = {}; + users.extraUsers.immae.extraGroups = [ "immae" "libvirtd" "docker" ]; + systemd.services.libvirtd.postStart = '' + install -m 0770 -g libvirtd -d /var/lib/libvirt/images + ''; + + time.timeZone = "Europe/Paris"; + nix = { + settings = { + sandbox = "relaxed"; + max-jobs = 8; + substituters = [ "https://hydra.iohk.io" "https://cache.nixos.org" ]; + trusted-public-keys = [ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" ]; + trusted-users = [ "root" "@wheel"] ; + }; + 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"; + }) + ]; + + myServices.monitoring.enable = true; + security.acme.certs."${name}-immae" = { + group = "immae"; + domain = "dilion.immae.eu"; + }; + security.acme.certs."${name}" = { + group = config.services.nginx.group; + extraDomainNames = [ + "dilion.immae.dev" + ]; + }; + systemd.services.nginx.serviceConfig.ProtectHome = "read-only"; + services.nginx = { + enable = true; + recommendedOptimisation = true; + recommendedGzipSettings = true; + recommendedProxySettings = true; + virtualHosts = { + "dilion.immae.dev" = { + acmeRoot = config.security.acme.defaults.webroot; + useACMEHost = name; + forceSSL = true; + locations."/".root = "/home/immae/www"; + }; + }; + }; + + secrets.keys = { + "zrepl/${name}.key" = { + permissions = "0400"; + text = config.myEnv.zrepl_backup.certs."${name}".key; + user = "backup"; + group = "root"; + }; + } // builtins.listToAttrs (map (x: lib.attrsets.nameValuePair "zrepl/certificates/${x}.crt" { + permissions = "0400"; + text = config.myEnv.zrepl_backup.certs."${x}".certificate; + user = "backup"; + group = "root"; + }) (builtins.attrNames config.myEnv.zrepl_backup.certs)); + + environment.etc."mdadm.conf" = { + enable = true; + mode = "0644"; + user = "root"; + text = "MAILADDR ${config.myEnv.monitoring.email}"; + }; + + + systemd.services.zrepl.serviceConfig.User = "backup"; + systemd.services.zrepl.path = [ pkgs.openssh ]; + # pour eldiron: + # zfs allow backup create,mount,receive,destroy,rename,snapshot,hold,bookmark,release zpool/backup + # pour flony: + # zfs allow backup hold,release,bookmark,snapshot,send zpool + services.zrepl = { + enable = true; + settings = { + global.control.sockpath = "/run/zrepl/control"; + global.serve.stdinserver.sockdir = "/run/zrepl/stdinserver"; + jobs = [ + { + type = "sink"; + # must not change + name = "backup-from-eldiron"; + root_fs = "zpool/backup"; + serve.type = "tls"; + serve.listen = ":19000"; + serve.ca = config.secrets.fullPaths."zrepl/certificates/eldiron.crt"; + serve.cert = config.secrets.fullPaths."zrepl/certificates/dilion.crt"; + serve.key = config.secrets.fullPaths."zrepl/dilion.key"; + serve.client_cns = [ "eldiron" ]; + } + { + type = "source"; + # must not change + name = "backup-to-wd-zpool"; + # not encrypted! + serve.type = "tls"; + serve.listen = ":19001"; + serve.ca = config.secrets.fullPaths."zrepl/certificates/flony.crt"; + serve.cert = config.secrets.fullPaths."zrepl/certificates/dilion.crt"; + serve.key = config.secrets.fullPaths."zrepl/dilion.key"; + serve.client_cns = [ "flony" ]; + filesystems."zpool/libvirt<" = true; + filesystems."zpool/root<" = true; + snapshotting.type = "manual"; + } + { + type = "source"; + # must not change + name = "backup-to-wd-zpool-docker"; + # not encrypted! + serve.type = "tls"; + serve.listen = ":19002"; + serve.ca = config.secrets.fullPaths."zrepl/certificates/flony.crt"; + serve.cert = config.secrets.fullPaths."zrepl/certificates/dilion.crt"; + serve.key = config.secrets.fullPaths."zrepl/dilion.key"; + serve.client_cns = [ "flony" ]; + filesystems."zpool/docker<" = true; + snapshotting.type = "manual"; + } + ]; + }; + }; + # 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 = "23.05"; # Did you read the comment? +} + diff --git a/systems/dilion/flake.lock b/systems/dilion/flake.lock new file mode 100644 index 0000000..6da2d47 --- /dev/null +++ b/systems/dilion/flake.lock @@ -0,0 +1,695 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "monitoring": { + "inputs": { + "environment": "environment_2", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_7", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "root": { + "inputs": { + "environment": "environment", + "files-watcher": "files-watcher", + "loginctl-linger": "loginctl-linger", + "monitoring": "monitoring", + "my-lib": "my-lib", + "myuids": "myuids", + "nixpkgs": "nixpkgs_5", + "secrets": "secrets_2", + "ssh": "ssh", + "system": "system" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "ssh": { + "inputs": { + "environment": "environment_3", + "secrets": "secrets_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "system": { + "inputs": { + "backports": "backports", + "environment": "environment_4", + "mypackages": "mypackages", + "myuids": "myuids_2", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/dilion/flake.nix b/systems/dilion/flake.nix new file mode 100644 index 0000000..9747086 --- /dev/null +++ b/systems/dilion/flake.nix @@ -0,0 +1,43 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + my-lib.url = "path:../../flakes/lib"; + + monitoring.url = "path:../../flakes/private/monitoring"; + ssh.url = "path:../../flakes/private/ssh"; + environment.url = "path:../../flakes/private/environment"; + system.url = "path:../../flakes/private/system"; + + myuids.url = "path:../../flakes/myuids"; + secrets.url = "path:../../flakes/secrets"; + files-watcher.url = "path:../../flakes/files-watcher"; + loginctl-linger.url = "path:../../flakes/loginctl-linger"; + }; + outputs = inputs@{ self, my-lib, nixpkgs, ...}: + my-lib.lib.mkColmenaFlake { + name = "dilion"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "176.9.10.233"; + targetUser = "root"; + nixosModules = { + base = ./base.nix; + system = inputs.system.nixosModule; + monitoring = inputs.monitoring.nixosModule; + environment = inputs.environment.nixosModule; + ssh = inputs.ssh.nixosModule; + + myuids = inputs.myuids.nixosModule; + secrets = inputs.secrets.nixosModule; + files-watcher = inputs.files-watcher.nixosModule; + loginctl-linger = inputs.loginctl-linger.nixosModule; + }; + moduleArgs = { + nixpkgs = inputs.nixpkgs; + monitoring = inputs.monitoring; + environment = inputs.environment; + pkgs-no-overlay = inputs.nixpkgs.legacyPackages.x86_64-linux; + }; + }; +} diff --git a/systems/dilion/monitoring.nix b/systems/dilion/monitoring.nix new file mode 100644 index 0000000..af7f224 --- /dev/null +++ b/systems/dilion/monitoring.nix @@ -0,0 +1,43 @@ +{ lib, pkgs, config, name, monitoring, ... }: +let + hostFQDN = config.hostEnv.fqdn; + zfs_snapshot = name: { + service_description = "ZFS snapshot ${name} happened not too long ago"; + use = "local-service"; + check_command = ["check_zfs_snapshot" name]; + __passive_servicegroups = "webstatus-resources"; + }; +in +{ + config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "mdadm" "zfs" "notify-secondary"]; + config.myServices.monitoring.objects = lib.mkMerge [ + (monitoring.lib.objectsCommon { + inherit hostFQDN; + hostName = name; + master = false; + processWarn = "250"; processAlert = "400"; + loadWarn = "1.0"; loadAlert = "1.2"; + interface = builtins.head (builtins.attrNames config.networking.interfaces); + }) + + { + service = [ + { + service_description = "No mdadm array is degraded"; + use = "local-service"; + check_command = ["check_mdadm"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "No ZFS pool is degraded"; + use = "local-service"; + check_command = ["check_zfs"]; + __passive_servicegroups = "webstatus-resources"; + } + (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/systems/dilion/ssh_ldap_regular.sh b/systems/dilion/ssh_ldap_regular.sh new file mode 100644 index 0000000..4c2f47e --- /dev/null +++ b/systems/dilion/ssh_ldap_regular.sh @@ -0,0 +1,19 @@ +### 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/systems/dilion/vms.nix b/systems/dilion/vms.nix new file mode 100644 index 0000000..189e5ff --- /dev/null +++ b/systems/dilion/vms.nix @@ -0,0 +1,200 @@ +# inspired from https://nixos.wiki/wiki/Virtualization_in_NixOS +{ config, pkgs, lib, pkgs-no-overlay, ... }@args: +let + toImage = f: "${import ./vms/base_image.nix f (args // { myEnv = config.myEnv; })}/nixos.qcow2"; +in +{ + options = { + myServices.vms.libvirt-guests = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + network = lib.mkOption { type = lib.types.str; description = "network to attach the guest to"; }; + pool = lib.mkOption { type = lib.types.str; description = "pool to attach the guest to"; }; + cpus = lib.mkOption { type = lib.types.int; default = 1; description = "number of cpus to assign"; }; + memory = lib.mkOption { type = lib.types.int; description = "memory in GiB to assign"; }; + diskSize = lib.mkOption { type = lib.types.int; description = "disk size in GiB"; }; + destroyVolumeOnExit = lib.mkOption { type = lib.types.bool; description = "Whether to destroy the volume on exit"; default = false; }; + extraDevicesXML = lib.mkOption { type = lib.types.lines; description = "Extra device configuration"; default = ""; }; + preStart = lib.mkOption { type = lib.types.lines; default = ""; description = "Script to run as prestart"; }; + }; + }); + default = {}; + description = "Libvirt guests to start"; + }; + myServices.vms.libvirt-networks = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + bridgeNumber = lib.mkOption { type = lib.types.int; description = "bridge interface to create virbr"; }; + ipRange = lib.mkOption { type = lib.types.str; example = "192.168.100"; description = "ip4 prefix to use"; }; + }; + }); + description = "Libvirt networks to configure"; + default = {}; + }; + myServices.vms.libvirt-pools = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + type = lib.mkOption { type = lib.types.enum [ "dir" "zfs" ]; description = "Pool type"; }; + target = lib.mkOption { type = lib.types.nullOr lib.types.path; default = null; description = "where to find images"; }; + preStart = lib.mkOption { type = lib.types.lines; default = ""; description = "Script to run as prestart"; }; + xml = lib.mkOption { type = lib.types.lines; default = ""; description = "Additional configuration"; }; + }; + }); + }; + myServices.vms.libvirt-images = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = {}; + description = "Attrs of images to create in /etc/libvirtd/base-images"; + }; + }; + config = lib.mkMerge [ + # Define images + { + environment.etc = lib.mapAttrs' + (n: v: lib.nameValuePair "libvirtd/base-images/${n}.qcow2" { source = toImage v; }) + config.myServices.vms.libvirt-images; + } + + # Define networks + { + systemd.services = lib.mapAttrs' (name: network: lib.nameValuePair "libvirtd-network-${name}" { + after = [ "libvirtd.service" ]; + requires = [ "libvirtd.service" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = "yes"; + }; + path = [ config.boot.zfs.package ]; + 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}' + ''; + }) config.myServices.vms.libvirt-networks; + } + + # Define pools + { + systemd.services = lib.mapAttrs' (name: pool: lib.nameValuePair "libvirtd-pool-${name}" { + after = [ "libvirtd.service" ]; + requires = [ "libvirtd.service" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = "yes"; + }; + path = [ config.boot.zfs.package ]; + script = let + xml = pkgs.writeText "libvirt-pool-${name}.xml" '' + + ${name} + UUID + ${pool.xml} + ${if pool.target != null then '' + + ${pool.target} + + '' else ""} + + ''; + in pool.preStart + '' + 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 + ''; + }) config.myServices.vms.libvirt-pools; + } + + # Define guests + { + 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"; + }; + path = [ config.boot.zfs.package ]; + script = + let + xml = pkgs.writeText "libvirt-guest-${name}.xml" + '' + + ${name} + UUID + ${builtins.toString guest.memory} + ${builtins.toString guest.cpus} + + hvm + + + /run/current-system/sw/bin/qemu-system-x86_64 + + + + + ${guest.extraDevicesXML} + + + + + + + + + + + ''; + in + guest.preStart + '' + 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 '${builtins.toString guest.diskSize}GiB' + volume_path=$(${pkgs.libvirt}/bin/virsh vol-path --pool ${guest.pool} --vol 'guest-${name}') + ${pkgs-no-overlay.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 '' + 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 + ''; + }) config.myServices.vms.libvirt-guests; + } + ]; +} diff --git a/systems/dilion/vms/base_configuration.nix b/systems/dilion/vms/base_configuration.nix new file mode 100644 index 0000000..7b67886 --- /dev/null +++ b/systems/dilion/vms/base_configuration.nix @@ -0,0 +1,27 @@ +{ lib, config, environment, ... }@args: +{ + options.myEnv = (environment.nixosModule (args // { name = "dummy"; })).options.myEnv; + config = { + # 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 = lib.mkDefault "23.05"; # Did you read the comment? + + 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 = { + 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/systems/dilion/vms/base_image.nix b/systems/dilion/vms/base_image.nix new file mode 100644 index 0000000..46b90eb --- /dev/null +++ b/systems/dilion/vms/base_image.nix @@ -0,0 +1,98 @@ +configuration_file: { pkgs, myEnv, nixpkgs, environment, pkgs-no-overlay, ... }: +let + config = (import (nixpkgs + "/nixos/lib/eval-config.nix") { + inherit (pkgs) system; + modules = [ { + _module.args.environment = environment; + myEnv = myEnv; + imports = [ + (nixpkgs + "/nixos/modules/profiles/qemu-guest.nix") + 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-no-overlay.vmTools.runInLinuxVM ( + pkgs.runCommand "nixos-base-image" + { + memSize = 768; + preVM = + '' + mkdir $out + diskImage=image.qcow2 + ${pkgs-no-overlay.vmTools.qemu}/bin/qemu-img create -f qcow2 $diskImage 2G + mv closure xchg/ + ''; + postVM = + '' + echo compressing VM image... + ${pkgs-no-overlay.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/systems/dilion/vms/buildbot_configuration.nix b/systems/dilion/vms/buildbot_configuration.nix new file mode 100644 index 0000000..622f8ba --- /dev/null +++ b/systems/dilion/vms/buildbot_configuration.nix @@ -0,0 +1,73 @@ +{ pkgs, config, lib, ... }: +{ + imports = [ + ./base_configuration.nix + ]; + # 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 = "23.05"; # Did you read the comment? + + 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/systems/eldiron/base.nix b/systems/eldiron/base.nix new file mode 100644 index 0000000..cda518e --- /dev/null +++ b/systems/eldiron/base.nix @@ -0,0 +1,371 @@ +{ config, pkgs, lib, php, name, secrets, ... }: +{ + # 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/sdc" ]; + 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 = config.boot.zfs.package.latestCompatibleLinuxPackages; + 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.settings.max-jobs = 8; + nixpkgs.config.permittedInsecurePackages = [ + "python-2.7.18.6" # for nagios-cli + "nodejs-16.20.2" # for landing page building + ]; + + nixpkgs.overlays = [ + php.overlays.php + ]; + powerManagement.cpuFreqGovernor = "powersave"; + + security.acme.certs."${name}".postRun = builtins.concatStringsSep "\n" [ + (lib.optionalString config.services.websites.env.production.enable "/run/current-system/sw/bin/machinectl shell httpd-production /usr/bin/env systemctl reload httpd.service") + (lib.optionalString config.services.websites.env.integration.enable "/run/current-system/sw/bin/machinectl shell httpd-integration /usr/bin/env systemctl reload httpd.service") + ]; + + 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; + firewall.allowedTCPPorts = [ config.myEnv.ports.zrepl_flony ]; + # FIXME: on next reboot, remove the /27 and the localCommands + interfaces."eth0".ipv4.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = 32; }) (ips.ip4 or [])) + (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips)) + ++ [ { address = lib.head 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 = [ + secrets.nixosModules.users-config-eldiron + ./databases + ./databases/mariadb.nix + ./databases/openldap + ./databases/postgresql.nix + ./databases/redis.nix + + + ./monitoring.nix + ./ejabberd + ./buildbot + ./coturn.nix + ./dns.nix + ./duply_backup.nix + ./gemini + ./gitolite + ./mail + ./websites + ./webstats + ./irc.nix + ./pub + ./tasks + ./ftp.nix + ./mpd.nix + ./vpn + ]; + + 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.websites.enable = true; + myServices.gemini.enable = true; + myServices.mail.enable = true; + myServices.ejabberd.enable = true; + myServices.vpn.enable = true; + myServices.ftp.enable = true; + + myServices.chatonsProperties.hostings.infogerance = { + file.datetime = "2022-08-27T18:50:00"; + hosting = { + name = "Infogérance"; + description = "Administration de serveurs"; + website = "https://www.immae.eu/"; + logo = "https://assets.immae.eu/logo.jpg"; + type = "HOSTEDSERVER"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + + 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" ]; + services.netdata.configDir."stream.conf" = config.secrets.fullPaths."netdata-stream.conf"; + secrets.keys = { + "ldap/pam_pgsql" = { + user = "root"; + group = "root"; + permissions = "0400"; + text = '' + database = immae + user = immae_auth_read + password = {{ .postgresql.immae_auth_read }} + table = ldap_users + user_column = login + pw_type = function + auth_query = SELECT (mechanism = 'SSHA' AND password = encode(digest( %p || salt, 'sha1'), 'hex')) FROM ldap_users WHERE login = %u OR login || '@' || realm = %u + #pwd_query = WITH newsalt as (select gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( %p || (SELECT * FROM newsalt), 'sha1'), 'hex'), salt = (SELECT * FROM newsalt), mechanism = 'SSHA' WHERE login = %u OR login || '@' || realm = %u + ''; + }; + + "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; + }; + "zrepl/${name}.key" = { + permissions = "0400"; + text = config.myEnv.zrepl_backup.certs."${name}".key; + user = "root"; + group = "root"; + }; + } // builtins.listToAttrs (map (x: lib.attrsets.nameValuePair "zrepl/certificates/${x}.crt" { + permissions = "0400"; + text = config.myEnv.zrepl_backup.certs."${x}".certificate; + user = "root"; + group = "root"; + }) (builtins.attrNames config.myEnv.zrepl_backup.certs)); + + programs.ssh.knownHosts.dilion = { + extraHostNames = ["dilion.immae.eu"]; + publicKey = config.myEnv.servers.dilion.hostKey; + }; + + 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 ]; + + environment.etc."mdadm.conf" = { + enable = true; + mode = "0644"; + user = "root"; + text = "MAILADDR ${config.myEnv.monitoring.email}"; + }; + + systemd.services.zrepl.path = [ pkgs.openssh ]; + services.zrepl = { + enable = true; + settings = { + jobs = [ + { + type = "push"; + # must not change + name = "backup-to-dilion"; + filesystems."zpool/root" = true; + filesystems."zpool/root/etc" = true; + filesystems."zpool/root/var<" = true; + connect = { + address = "dilion.immae.eu:19000"; + type = "tls"; + server_cn = "dilion"; + ca = config.secrets.fullPaths."zrepl/certificates/dilion.crt"; + cert = config.secrets.fullPaths."zrepl/certificates/eldiron.crt"; + key = config.secrets.fullPaths."zrepl/eldiron.key"; + }; + 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 = pkgs.writeScript "redis-dump" '' + # #!${pkgs.stdenv.shell} + # ${pkgs.redis}/bin/redis-cli bgsave + # ''; + # 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_.*"; } + ]; + pruning.keep_receiver = [ + { type = "regex"; regex = "^manual_.*"; } + { type = "grid"; grid = "6x4h | 7x1d | 4x7d | 6x30d"; regex = "^zrepl_.*"; } + ]; + } + { + type = "source"; + # must not change + name = "backup-to-wd-zpool"; + serve.type = "tls"; + serve.listen = ":${builtins.toString config.myEnv.ports.zrepl_flony}"; + serve.ca = config.secrets.fullPaths."zrepl/certificates/flony.crt"; + serve.cert = config.secrets.fullPaths."zrepl/certificates/eldiron.crt"; + serve.key = config.secrets.fullPaths."zrepl/eldiron.key"; + serve.client_cns = [ "flony" ]; + filesystems."zpool/root" = true; + filesystems."zpool/root/etc" = true; + filesystems."zpool/root/var<" = true; + filesystems."zfast/root/var<" = true; + send.encrypted = true; + snapshotting.type = "manual"; + } + ]; + }; + }; + + environment.etc."fail2ban/filter.d/postgresql.conf".text = '' + [Definition] + failregex = \S+ FATAL: password authentication failed for user .+$ + \S+ FATAL: PAM authentication failed for user.+$ + \S+ FATAL: no pg_hba.conf entry for host.+$ + ''; + environment.etc."fail2ban/filter.d/mysqld-auth.local".text = '' + [Definition] + _daemon = mysql[-\w]* + ''; + services.fail2ban.jails.dovecot = '' + enabled = true + ''; + services.fail2ban.jails.postfix-sasl = '' + enabled = true + ''; + services.fail2ban.jails.proftpd = '' + enabled = true + ''; + services.fail2ban.jails.postgresql = '' + enabled = true + port = 5432 + logpath = %(syslog_daemon)s + backend = %(default_backend)s + journalmatch = _SYSTEMD_UNIT=postgresql.service + _COMM=postgres + ''; + services.fail2ban.jails.mysqld-auth = '' + enabled = true + journalmatch = _SYSTEMD_UNIT=mysql.service + _COMM=mysqld + ''; + # 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 = "23.05"; # Did you read the comment? + + security.pam.services.ldap.text = '' + # Authentication from ldap for pgsql + auth required ${pkgs.pam_pgsql}/lib/security/pam_pgsql.so config_file=/var/secrets/ldap/pam_pgsql + account required ${pkgs.pam_pgsql}/lib/security/pam_pgsql.so config_file=/var/secrets/ldap/pam_pgsql + ''; + services.saslauthd = { + enable = true; + mechanism = "pam"; + }; + environment.etc."sasl2/slapd.conf".text = '' + mech_list: plain + pwcheck_method: saslauthd + saslauthd_path: /run/saslauthd/mux + ''; +} diff --git a/systems/eldiron/buildbot/default.nix b/systems/eldiron/buildbot/default.nix new file mode 100644 index 0000000..e86b081 --- /dev/null +++ b/systems/eldiron/buildbot/default.nix @@ -0,0 +1,310 @@ +{ lib, pkgs, config, buildbot, ... }: +let + varDir = "/var/lib/buildbot"; + bb-python = buildbot.pythonModule; +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 { + myEnv.buildbot.projects.test = { + name = "test"; + workerPort = config.myEnv.ports.buildbot_test; + packages = [ pkgs.git pkgs.gzip pkgs.openssh ]; + pythonPathHome = false; + secrets = { + apprise_webhooks = builtins.concatStringsSep "\n" [ + "{{ .apprise_webhooks.matrix_immae_eu_alert }}" + ]; + notify_xmpp_password = "{{ .xmpp.notify_bot }}"; + }; + activationScript = '' + install -m 0755 -o buildbot -g buildbot -d /var/lib/ftp/release.immae.eu/test + ''; + webhookTokens = [ + "{{ .buildbot.webhookTokens.Immae }}" + "{{ .buildbot.webhookTokens.Immae }}" + ]; + }; + + myServices.chatonsProperties.hostings.buildbot = { + file.datetime = "2022-08-21T10:37:00"; + hosting = { + name = "Buildbot"; + description = "Python-based continuous integration testing framework"; + type = "INSTANCE"; + website = "https://git.immae.eu"; + logo = "https://www.buildbot.net/img/icon.png"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/forge-logicielle.html"; + }; + software = { + name = "Buildbot"; + website = "https://www.buildbot.net/"; + license.url = "https://github.com/buildbot/buildbot/blob/master/LICENSE"; + license.name = "GNU General Public License v2.0"; + version = pkgs.buildbot.version; + source.url = "https://github.com/buildbot/buildbot"; + }; + }; + nixpkgs.overlays = [ + (self: super: { + follow-systemd-unit = self.writeScriptBin "follow-systemd-unit" '' + #!${self.stdenv.shell} + + set -euo pipefail + + service=$1 + before_invocation_id=$2 + + get_id() { + systemctl show -p InvocationID --value "$service" + } + + while [ "$(get_id)" = "$before_invocation_id" ]; do sleep 1; done + + invocation_id="$(get_id)" + cursor="$(mktemp)" + trap "rm -f $cursor" EXIT + + get_logs() { + journalctl --quiet --cursor-file=$cursor INVOCATION_ID=$invocation_id + _SYSTEMD_INVOCATION_ID=$invocation_id + } + + while [ -n "$(systemctl show -p Job --value "$service")" ]; do + get_logs + done + get_logs + ''; + }) + ]; + 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" "systemd-journal" ]; + useDefaultShell = true; + openssh.authorizedKeys.keys = [ config.myEnv.buildbot.ssh_key.public ]; + }; + + 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"; + keyDependencies = [ (buildbot.buildbot_config project).src ] ++ project.secretsDeps; + text = let + project_env = with lib.attrsets; + mapAttrs' (k: v: nameValuePair "BUILDBOT_${k}" v) project.environment // + { + BUILDBOT_PROJECT_DIR = (buildbot.buildbot_config project).src; + 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; + }; + "buildbot/ssh_known_hosts" = { + permissions = "0644"; + user = "buildbot"; + group = "buildbot"; + text = '' + git.immae.eu ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF + eldiron ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF + phare.normalesup.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN2GomItXICXpCtCFRMT2xuerqx2nLMO/3mNUuWyzFr1 + ''; + }; + }; + + 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; + preStart = let + master-cfg = "${buildbot.buildbot_common}/${bb-python.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 + install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_known_hosts"} ${varDir}/buildbot_hosts || 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 + HOME = "${varDir}/${project.name}"; + PYTHONPATH = "${bb-python.withPackages (self: + buildbot.common_packages self ++ + [ (buildbot.buildbot_config project) ] + )}/${bb-python.sitePackages}${if project.pythonPathHome then ":${varDir}/${project.name}/.local/${bb-python.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/systems/eldiron/coturn.nix b/systems/eldiron/coturn.nix new file mode 100644 index 0000000..d8b02c5 --- /dev/null +++ b/systems/eldiron/coturn.nix @@ -0,0 +1,73 @@ +{ config, name, lib, pkgs, ... }: +{ + config = lib.mkIf (name == "eldiron") { + myServices.chatonsProperties.services.coturn = { + file.datetime = "2022-08-27T19:00:00"; + service = { + name = "Coturn"; + description = "coturn TURN server"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "FULL"; + install.type = "PACKAGE"; + }; + software = { + name = "coturn"; + website = "https://github.com/coturn/coturn"; + license.url = "https://github.com/coturn/coturn/blob/master/LICENSE"; + license.name = "3-Clause BSD License"; + version = pkgs.coturn.version; + source.url = "https://github.com/coturn/coturn"; + }; + }; + networking.firewall.allowedTCPPorts = [ + config.services.coturn.alt-listening-port + config.services.coturn.alt-tls-listening-port + config.services.coturn.listening-port + config.services.coturn.tls-listening-port + ]; + networking.firewall.allowedTCPPortRanges = [ + { from = config.services.coturn.min-port; to = config.services.coturn.max-port; } + ]; + networking.firewall.allowedUDPPortRanges = [ + { from = config.services.coturn.min-port; to = config.services.coturn.max-port; } + ]; + networking.firewall.allowedUDPPorts = [ + config.services.coturn.alt-listening-port + config.services.coturn.alt-tls-listening-port + config.services.coturn.listening-port + config.services.coturn.tls-listening-port + ]; + #users.users.turnserver.extraGroups = [ "keys" ]; + services.coturn = { + enable = true; + no-cli = true; + no-tls = true; + no-dtls = true; + use-auth-secret = true; + lt-cred-mech = true; + realm = "eldiron.immae.eu"; + extraConfig = '' + fingerprint + total-quota=0 + bps-capacity=0 + stale-nonce + no-multicast-peers + ''; + static-auth-secret = config.myEnv.coturn.auth_access_key; + #cert = "/var/lib/acme/eldiron/fullchain.pem"; + #pkey = "/var/lib/acme/eldiron/key.pem"; + listening-ips = [ + "127.0.0.1" + "::1" + ] ++ config.myEnv.servers.eldiron.ips.main.ip4 + ++ config.myEnv.servers.eldiron.ips.main.ip6; + relay-ips = [ + "127.0.0.1" + "::1" + ] ++ config.myEnv.servers.eldiron.ips.main.ip4 + ++ config.myEnv.servers.eldiron.ips.main.ip6; + }; + }; +} diff --git a/systems/eldiron/databases/default.nix b/systems/eldiron/databases/default.nix new file mode 100644 index 0000000..d8d3048 --- /dev/null +++ b/systems/eldiron/databases/default.nix @@ -0,0 +1,56 @@ +{ lib, config, secrets, ... }: +let + cfg = config.myServices.databases; +in +{ + options.myServices = { + databases.enable = lib.mkEnableOption "my databases service"; + }; + + config.myServices.dns.zones."immae.eu".subdomains.db-1 = lib.mkIf cfg.enable (with config.myServices.dns.helpers; ips servers.eldiron.ips.main); + 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 = 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/systems/eldiron/databases/mariadb.nix b/systems/eldiron/databases/mariadb.nix new file mode 100644 index 0000000..b4a6917 --- /dev/null +++ b/systems/eldiron/databases/mariadb.nix @@ -0,0 +1,188 @@ +{ 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 = [ config.myEnv.databases.mysql.port ]; + + # 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 = { + port = config.myEnv.databases.mysql.port; + 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"; + + # This is necessary since the default ("dialog") is not + # supported by php's mysqlnd plugin (in mysqli). But with that + # change only regular login+password schemes can work (no + # "fancy" authentication methods like fprintd or keys) + pam_use_cleartext_plugin = true; + }; + }; + }; + + users.users.mysql.extraGroups = [ "keys" ]; + security.acme.certs."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/systems/eldiron/databases/openldap/default.nix b/systems/eldiron/databases/openldap/default.nix new file mode 100644 index 0000000..7cd15da --- /dev/null +++ b/systems/eldiron/databases/openldap/default.nix @@ -0,0 +1,304 @@ +{ lib, pkgs, config, openldap, ... }: +let + cfg = config.myServices.databases.openldap; +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/mdb"; + description = '' + The directory where Openldap stores its data. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/openldap"; + 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 { + myServices.dns.zones."immae.eu".subdomains.ldap = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + nixpkgs.overlays = [ + (self: super: { + openldap_libressl_cyrus = (self.openldap.override { + openssl = self.libressl; + cyrus_sasl = self.cyrus_sasl.overrideAttrs (old: { + configureFlags = old.configureFlags ++ [ "--with-configdir=/etc/sasl2" ]; + }); + }).overrideAttrs (old: { + configureFlags = old.configureFlags ++ [ "--with-cyrus-sasl" "--enable-spasswd" ]; + }); + }) + ]; + + secrets.keys = { + "ldap/password" = { + permissions = "0400"; + user = "openldap"; + group = "openldap"; + text = "${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" = { + 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; + urlList = [ "ldap://" "ldaps://" ]; + package = pkgs.openldap_libressl_cyrus; + settings = { + attrs = { + olcPidFile = cfg.pids.pid; + olcArgsFile = cfg.pids.args; + olcLogLevel = "none"; + olcTLSCertificateFile = "${config.security.acme.certs.ldap.directory}/cert.pem"; + olcTLSCertificateKeyFile = "${config.security.acme.certs.ldap.directory}/key.pem"; + olcTLSCACertificateFile = "${config.security.acme.certs.ldap.directory}/fullchain.pem"; + olcTLSCACertificatePath = "${pkgs.cacert.unbundled}/etc/ssl/certs/"; + # This makes openldap crash + # olcTLSCipherSuite = "DEFAULT"; + #olcSaslHost = "kerberos.immae.eu"; + # Map sasl "dn" to ldap dn + #olcAuthzRegexp = ''{0}"uid=([^,]*)(,cn=IMMAE.EU)?,cn=(gssapi|gss-spnego),cn=auth" "uid=$1,ou=users,dc=immae,dc=eu"''; + }; + children = { + "cn=module{0}" = { + attrs = { + cn = "module{0}"; + objectClass = [ "olcModuleList" ]; + olcModuleLoad = [ "{0}back_mdb" "{1}memberof" "{2}syncprov" ]; + }; + }; + "cn=schema".includes = map (schema: + "${config.services.openldap.package}/etc/schema/${schema}.ldif" + ) [ "core" "cosine" "inetorgperson" "nis" ] ++ [ + "${openldap.immae-ldif}" + ]; + "olcDatabase={0}config" = { + attrs = { + objectClass = "olcDatabaseConfig"; + olcDatabase = "{0}config"; + olcAccess = ["{0}to * by * none"]; + }; + }; + "olcDatabase={1}mdb" = { + attrs = { + objectClass = [ "olcDatabaseConfig" "olcMdbConfig" ]; + olcDatabase = "{1}mdb"; + olcDbIndex = [ + "objectClass eq" + "uid pres,eq" + "mail pres,eq,sub" + "cn pres,eq,sub" + "sn pres,eq,sub" + "dc eq" + "member eq" + "memberOf eq" + ]; + olcAccess = let + join = builtins.replaceStrings ["\n"] [" "]; + in [ + # First matching "to" + "by" wins + #### Replication needs full access + (join ''{0}to * + by dn.base="uid=ldap_replication,cn=ldap,ou=services,dc=immae,dc=eu" read + by * break + '') + #### Prevent modification of SASL passwords + (join ''{1}to attrs=userPassword val.regex="^.SASL..+" + by self read + by anonymous auth + by * none + '') + #### Oneself needs access to users password + (join ''{2}to attrs=userPassword,shadowLastChange + by self write + by anonymous auth + by * none + '') + #### Should be write, but disabled during migration to psql + (join ''{3}to attrs=immaeSshKey + by self read + by * break + '') + + #### Anyone can auth, and I can see myself + (join ''{4}to * + by self read + by anonymous auth + by * break + '') + + #### Specific access for phpldapadmin + (join ''{5}to filter="(uid=*)" attrs=entry,uid + by dn.base="cn=phpldapadmin,ou=services,dc=immae,dc=eu" read + by * break + '') + + #### Hosts + # The attributes are available to every host + (join ''{6}to dn.one="ou=hosts,dc=immae,dc=eu" + by dn.subtree="ou=hosts,dc=immae,dc=eu" read + by dn.base="dc=immae,dc=eu" search + by * break + '') + #### /Hosts + + #### Local services + # this/-* & user : all your ancestors have access to you + # this/memberOf/-* & user : all those whom you belong to (in a group), + # and their ancestors, have access to you + # user/immaeAccessWriteDn*/member & this : you have write access to the + # members of your immaeAccessDn + # attributes + # user/immaeAccessDn*/member & this : you have access to the members + # of your immaeAccessDn attributes + # user/immaeAccessReadSubtree* & this/-* : you have access to the + # childrens of your immaeAccessReadSubtree + # attributes + # this/memberOf/-* & user/immaeAccessReadSubtree*: you have access to + # the members of the childrens of your + # immaeAccessReadSubtree attributes + # http://www.openldap.org/faq/data/cache/1133.html + (join ''{7}to dn.subtree="dc=immae,dc=eu" + by dn.subtree="ou=external_services,dc=immae,dc=eu" break + by set.exact="this/-* & user" read + by set.exact="this/memberOf/-* & user" read + by set.exact="user/immaeAccessWriteDn*/member & this" write + by set.exact="user/immaeAccessDn*/member & this" read + by set.exact="user/immaeAccessReadSubtree* & this/-*" read + by set.exact="this/memberOf/-* & user/immaeAccessReadSubtree*" read + by users search + by * break + '') + #### /Local services + + #### External services + # http://www.openldap.org/faq/data/cache/429.html + # FIXME: Find a way to whitelist? + (join ''{8}to attrs=immaeSshKey + by dn.subtree="ou=external_services,dc=immae,dc=eu" none + '') + (join ''{9}to dn.subtree="dc=immae,dc=eu" + by set.exact="this/-* & user" read + by set.exact="this/memberOf/-* & user" read + by set.exact="user/immaeAccessDn*/member & this/-*" read + by users search + by * none + '') + #### /External services + ]; + olcDbDirectory = cfg.dataDir; + olcRootDN = cfg.rootDn; + olcRootPW.path = config.secrets.fullPaths."ldap/password"; + olcSuffix = cfg.baseDn; + }; + children = { + "olcOverlay={0}memberof" = { + attrs = { + objectClass = [ "olcOverlayConfig" "olcMemberOf" ]; + olcOverlay = "{0}memberof"; + }; + }; + "olcOverlay={1}syncprov" = { + attrs = { + objectClass = [ "olcOverlayConfig" "olcSyncProvConfig" ]; + olcOverlay = "{1}syncprov"; + olcSpCheckpoint = "100 10"; + }; + }; + }; + }; + }; + }; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "tcp" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "ldap SSL is up to date"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = ["check_tcp_ssl" "636"]; + + servicegroups = "webstatus-ssl"; + _webstatus_name = "LDAP"; + _webstatus_url = "ldap.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/databases/postgresql.nix b/systems/eldiron/databases/postgresql.nix new file mode 100644 index 0000000..721059a --- /dev/null +++ b/systems/eldiron/databases/postgresql.nix @@ -0,0 +1,236 @@ +{ 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" = { + group = "postgres"; + domain = "db-1.immae.eu"; + postRun = '' + systemctl reload postgresql.service + ''; + }; + + systemd.services.postgresql.serviceConfig = { + SupplementaryGroups = "keys"; + ExecStartPre = [ ("+" + (pkgs.writeShellScript "postgresql-fix-cert" '' + # postgresql complains: + # private key file "${config.security.acme.certs.postgresql.directory}/key.pem" must be owned by the database user or root + cp -f "${config.security.acme.certs.postgresql.directory}/key.pem" "${config.services.postgresql.dataDir}/key.pem" + chown postgres:postgres "${config.services.postgresql.dataDir}/key.pem" + chmod go-r "${config.services.postgresql.dataDir}/key.pem" + '')) ]; + }; + systemd.services.postgresql.postStart = lib.mkAfter '' + # This line is already defined in 19.09 + PSQL="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; + checkConfig = false; + logLinePrefix = "%h %q%u@%d "; # Default: '%m [%p] ', already stored independently by journald. %h needed for fail2ban + settings = { + max_connections = 300; + 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.services.postgresql.dataDir}/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} ${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/systems/eldiron/databases/redis.nix b/systems/eldiron/databases/redis.nix new file mode 100644 index 0000000..1f57aa9 --- /dev/null +++ b/systems/eldiron/databases/redis.nix @@ -0,0 +1,138 @@ +{ 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.servers."" = { + enable = true; + bind = "127.0.0.1"; + unixSocket = cfg.sockets.redis; + unixSocketPerm = 777; + maxclients = 1024; + }; + systemd.services.redis.serviceConfig.Slice = "redis.slice"; + systemd.services.redis.serviceConfig.RuntimeDirectoryMode = lib.mkForce "0755"; + services.redis.servers."php-sessions" = { + enable = true; + maxclients = 1024; + unixSocketPerm = 777; + user = "wwwrun"; + }; + + 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 = [ 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/systems/eldiron/dns.nix b/systems/eldiron/dns.nix new file mode 100644 index 0000000..486fcc1 --- /dev/null +++ b/systems/eldiron/dns.nix @@ -0,0 +1,290 @@ +{ lib, pkgs, config, dns-nix, ... }: +{ + options.myServices.dns = { + enable = lib.mkEnableOption "enable DNS resolver"; + helpers = lib.mkOption { + readOnly = true; + description = '' + Some useful constants or functions for zones definition + ''; + default = rec { + servers = config.myEnv.servers; + ips = i: { A = i.ip4; AAAA = i.ip6; }; + letsencrypt = [ { tag = "issue"; value = "letsencrypt.org"; issuerCritical = false; } ]; + toKV = a: builtins.concatStringsSep ";" (builtins.attrValues (builtins.mapAttrs (n: v: "${n}=${v}") a)); + mailMX = { + hasEmail = true; + subdomains = let + mxes = lib.filterAttrs (n: v: v ? mx && v.mx.enable) servers; + in + lib.mapAttrs' (n: v: lib.nameValuePair v.mx.subdomain (ips v.ips.main)) mxes; + }; + zoneHeader = { + TTL = 3*60*60; + SOA = { + # yyyymmdd?? (increment ?? at each change) + serial = 2022121902; # Don't change this value, it is replaced automatically! + refresh = 10800; + retry = 3600; + expire = 604800; + minimum = 10800; # negative cache ttl + adminEmail = "hostmaster@immae.eu"; #email-address s/@/./ + nameServer = "ns1.immae.eu."; + }; + }; + mailSend = { + # DKIM + subdomains._domainkey.subdomains.eldiron.TXT = [ + (toKV config.myEnv.mail.dkim.eldiron.public) + ]; + # old key, may still be used by verifiers + subdomains._domainkey.subdomains.immae_eu.TXT = [ + (toKV config.myEnv.mail.dkim.immae_eu.public) + ]; + }; + mailCommon = name: { + MX = let + mxes = lib.filterAttrs (n: v: v ? mx && v.mx.enable) servers; + in + lib.mapAttrsToList (n: v: { preference = v.mx.priority; exchange = "${v.mx.subdomain}.${name}."; }) mxes; + + # https://tools.ietf.org/html/rfc6186 + SRV = [ + { service = "submission"; proto = "tcp"; priority = 0; weight = 1; port = 587; target = "smtp.immae.eu."; } + { service = "submissions"; proto = "tcp"; priority = 0; weight = 1; port = 465; target = "smtp.immae.eu."; } + + { service = "imap"; proto = "tcp"; priority = 0; weight = 1; port = 143; target = "imap.immae.eu."; } + { service = "imaps"; proto = "tcp"; priority = 0; weight = 1; port = 993; target = "imap.immae.eu."; } + { service = "sieve"; proto = "tcp"; priority = 0; weight = 1; port = 4190; target = "imap.immae.eu."; } + + { service = "pop3"; proto = "tcp"; priority = 10; weight = 1; port = 110; target = "pop3.immae.eu."; } + { service = "pop3s"; proto = "tcp"; priority = 10; weight = 1; port = 995; target = "pop3.immae.eu."; } + ]; + + subdomains = { + # 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.TXT = [ (toKV { v = "STSv1"; id = "20200109150200Z"; }) ]; # Don't change this value, it is updated automatically! + _tls.subdomains._smtp.TXT = [ (toKV { v = "TLSRPTv1"; "rua" = "mailto:postmaster+mta-sts@immae.eu"; }) ]; + mta-sts = ips servers.eldiron.ips.main; + + # DMARC + _dmarc.TXT = [ (toKV { v = "DMARC1"; p = "none"; adkim = "r"; aspf = "r"; fo = "1"; rua = "mailto:postmaster+rua@immae.eu"; ruf = "mailto:postmaster+ruf@immae.eu"; }) ]; + }; + + # SPF + TXT = [ (toKV { v = "spf1 mx ~all"; }) ]; + }; + }; + }; + zones = lib.mkOption { + type = lib.types.attrsOf (dns-nix.lib.types.zone.substSubModules ( + dns-nix.lib.types.zone.getSubModules ++ [ + ({ name, ... }: { + options = { + hasEmail = lib.mkEnableOption "This domain has e-mails configuration"; + emailPolicies = lib.mkOption { + default = {}; + type = lib.types.attrsOf (lib.types.submodule { + options = { + receive = lib.mkEnableOption "Configure this domain to receive e-mail"; + }; + }); + apply = builtins.mapAttrs (n: v: v // { + domain = name; + fqdn = if n == "" then name else "${n}.${name}"; + }); + }; + extraConfig = lib.mkOption { + type = lib.types.lines; + description = "Extra zone configuration for bind"; + example = '' + notify yes; + ''; + default = ""; + }; + slaves = lib.mkOption { + type = lib.types.listOf lib.types.str; + description = "NS slave groups of this zone"; + default = []; + }; + ns = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + }; + }; + }) + ])); + apply = let + toNS = n: builtins.map (d: "${d}.") (builtins.concatMap (s: builtins.attrNames config.myEnv.dns.ns."${s}") n); + in + builtins.mapAttrs (n: v: v // { NS = v.NS or [] ++ toNS (v.ns); }); + default = {}; + description = '' + attrset of zones to configure + ''; + }; + }; + config = let + cfg = config.services.bind; + in lib.mkIf config.myServices.dns.enable { + myServices.chatonsProperties.hostings.dns-secondaire = { + file.datetime = "2022-08-22T02:00:00"; + hosting = { + name = "DNS secondaire"; + description = "DNS secondaire"; + website = "ns1.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "bind9"; + website = pkgs.bind.meta.homepage; + license.url = pkgs.bind.meta.license.url; + license.name = pkgs.bind.meta.license.fullName; + version = pkgs.bind.version; + source.url = "https://www.isc.org/download/"; + }; + }; + myServices.dns.zones = with config.myServices.dns.helpers; { + "imsite.eu" = lib.mkMerge [ + zoneHeader + (ips servers.eldiron.ips.main) + { + ns = [ "immae" ]; + CAA = letsencrypt; + } + ]; + "immae.dev" = lib.mkMerge [ + { + extraConfig = '' + notify yes; + ''; + slaves = [ "raito" ]; + } + zoneHeader + (ips servers.eldiron.ips.integration) + { + ns = [ "immae" "raito" ]; + CAA = letsencrypt; + } + ]; + "immae.eu" = lib.mkMerge [ + { + extraConfig = '' + notify yes; + ''; + slaves = [ "raito" ]; + } + zoneHeader + (ips servers.eldiron.ips.production) + { + ns = [ "immae" "raito" ]; + CAA = letsencrypt; + + # ns1 has glue records in gandi.net + subdomains.ns1 = ips servers.eldiron.ips.main; + # raito / kurisu.dual.lahfa.xyz ; replace with eldiron in case of problem + subdomains.ns2.A = builtins.map (address: { inherit address; ttl = 600; }) servers.eldiron.ips.main.ip4; + subdomains.ns2.AAAA = builtins.map (address: { inherit address; ttl = 600; }) servers.eldiron.ips.main.ip6; + } + { + # Machines local users + emailPolicies.localhost.receive = false; + subdomains.localhost = lib.mkMerge [ (mailCommon "immae.eu") mailSend ]; + emailPolicies.eldiron.receive = true; + subdomains.eldiron = lib.mkMerge [ (mailCommon "immae.eu") mailSend ]; + } + { + # For each server "server" and each server ip group "ipgroup", + # define ipgroup.server.immae.eu + # "main" is set as server.immae.eu instead + # if main has an "alias", it is duplicated with this alias. + # If the server is a vm, use the v.immae.eu namespace (only main is created) + subdomains = let + vms = lib.filterAttrs (n: v: v.isVm) servers; + bms = lib.filterAttrs (n: v: !v.isVm) servers; + toIps = type: builtins.mapAttrs (n: v: ips v.ips."${type}"); + in + lib.mkMerge [ + (toIps "main" bms) + + { v.subdomains = toIps "main" vms; } + + (lib.mapAttrs (_: v: { + subdomains = lib.mapAttrs' + (n': v': lib.nameValuePair "${if v'.alias == null then n' else v'.alias}" (ips v')) + (lib.filterAttrs (n': v': n' != "main" || v'.alias != null) v.ips); + }) bms) + ]; + } + { + # Outils + subdomains = { + status = ips servers.monitoring-1.ips.main; + }; + } + ]; + }; + networking.firewall.allowedUDPPorts = [ 53 ]; + networking.firewall.allowedTCPPorts = [ 53 ]; + users.users.named.extraGroups = [ "keys" ]; + services.bind = { + enable = true; + cacheNetworks = ["any"]; + extraOptions = '' + allow-recursion { 127.0.0.1; }; + allow-transfer { none; }; + + notify-source ${lib.head 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 = + builtins.mapAttrs (name: v: { + master = true; + extraConfig = v.extraConfig; + masters = []; + slaves = + lib.flatten (map (n: builtins.attrValues config.myEnv.dns.ns.${n}) v.slaves); + file = pkgs.runCommand "${name}.zone" { + text = v; + passAsFile = [ "text" ]; + # Automatically change the increment when relevant change + # happened (both serial and mta-sts) + } '' + mv "$textPath" $out + increment=$(( 100*($(date -u +%-H) * 60 + $(date -u +%-M))/1440 )) + sed -i -e "s/2022121902/$(date -u +%Y%m%d)$increment/g" $out + sed -i -e "s/20200109150200Z/$(date -u +%Y%m%d%H%M%SZ)/g" $out + ''; + }) config.myServices.dns.zones; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "dns" ]; + myServices.monitoring.fromMasterObjects.service = lib.mkMerge (lib.mapAttrsToList (name: z: + lib.optional (builtins.elem "immae" z.ns) { + service_description = "eldiron dns is active and authoritative for ${name}"; + host_name = config.hostEnv.fqdn; + use = "dns-service"; + check_command = ["check_dns" name "-A"]; + + servicegroups = "webstatus-dns"; + _webstatus_name = name; + } ++ + lib.optional (builtins.elem "raito" z.ns) { + service_description = "raito dns is active and authoritative for ${name}"; + host_name = config.hostEnv.fqdn; + use = "dns-service"; + check_command = ["check_external_dns" "kurisu.dual.lahfa.xyz" name "-A"]; + + servicegroups = "webstatus-dns"; + _webstatus_name = "${name} (Secondary DNS Raito)"; + } + ) config.myServices.dns.zones); + }; +} diff --git a/systems/eldiron/duply_backup.nix b/systems/eldiron/duply_backup.nix new file mode 100644 index 0000000..590d125 --- /dev/null +++ b/systems/eldiron/duply_backup.nix @@ -0,0 +1,151 @@ +{ 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"; + }) + ]; + + myServices.monitoring.fromMasterActivatedPlugins = [ "eriomem" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "eriomem backup is up and not full"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_backup_eriomem"; + + check_interval = 120; + notification_interval = "1440"; + + servicegroups = "webstatus-backup"; + } + + { + service_description = "ovh backup is up and not full"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_ok"; + + check_interval = 120; + notification_interval = "1440"; + + servicegroups = "webstatus-backup"; + } + ]; + }; +} diff --git a/systems/eldiron/ejabberd/default.nix b/systems/eldiron/ejabberd/default.nix new file mode 100644 index 0000000..5268516 --- /dev/null +++ b/systems/eldiron/ejabberd/default.nix @@ -0,0 +1,141 @@ +{ lib, pkgs, config, mypackages-lib, ... }: +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 { + myServices.dns.zones."immae.fr" = with config.myServices.dns.helpers; + lib.mkMerge [ + { + extraConfig = '' + notify yes; + ''; + slaves = [ "raito" ]; + emailPolicies."".receive = true; + } + zoneHeader + mailMX + (mailCommon "immae.fr") + (ips servers.eldiron.ips.main) + { + ns = [ "immae" "raito" ]; + CAA = letsencrypt; + subdomains.www = ips servers.eldiron.ips.production; + subdomains.im = ips servers.eldiron.ips.main; + subdomains.conference = ips servers.eldiron.ips.main; + subdomains.pubsub = ips servers.eldiron.ips.main; + subdomains.proxy = ips servers.eldiron.ips.main; + subdomains.upload = ips servers.eldiron.ips.main; + subdomains._xmppconnect.TXT = [ + "_xmpp-client-xbosh=https://im.immae.fr/bosh" + "_xmpp-client-websocket=wss://im.immae.fr/ws" + ]; + } + ]; + + security.acme.certs = { + "ejabberd" = { + group = "ejabberd"; + domain = "eldiron.immae.eu"; + keyType = "rsa4096"; + postRun = '' + systemctl restart ejabberd.service + ''; + extraDomainNames = [ "immae.fr" "conference.immae.fr" "proxy.immae.fr" "pubsub.immae.fr" "upload.immae.fr" ]; + }; + }; + 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 + ''; + }; + secrets.keys."postfix/scripts/ejabberd-env" = { + user = "postfixscripts"; + group = "root"; + permissions = "0400"; + text = builtins.toJSON { + jid = "notify_bot@immae.fr"; + password = "{{ .xmpp.notify_bot }}"; + }; + }; + services.postfix.extraAliases = let + nixpkgs = builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/840c782d507d60aaa49aa9e3f6d0b0e780912742.tar.gz"; + sha256 = "14q3kvnmgz19pgwyq52gxx0cs90ddf24pnplmq33pdddbb6c51zn"; + }; + pkgs' = import nixpkgs { inherit (pkgs) system; overlays = []; }; + warn_xmpp_email = scriptEnv: pkgs'.runCommand "warn_xmpp_email" { + inherit scriptEnv; + pythonEnv = pkgs'.python3.withPackages (ps: [ + ps.unidecode ps.slixmpp + ]); + } '' + substituteAll ${./warn_xmpp_email.py} $out + chmod a+x $out + ''; + in '' + ejabberd: "|${mypackages-lib.postfixScript pkgs "ejabberd" (warn_xmpp_email config.secrets.fullPaths."postfix/scripts/ejabberd-env")}" + ''; + }; +} diff --git a/systems/eldiron/ejabberd/ejabberd.yml b/systems/eldiron/ejabberd/ejabberd.yml new file mode 100644 index 0000000..82ac35b --- /dev/null +++ b/systems/eldiron/ejabberd/ejabberd.yml @@ -0,0 +1,231 @@ +### +### 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/systems/eldiron/ejabberd/warn_xmpp_email.py b/systems/eldiron/ejabberd/warn_xmpp_email.py new file mode 100755 index 0000000..d482b43 --- /dev/null +++ b/systems/eldiron/ejabberd/warn_xmpp_email.py @@ -0,0 +1,112 @@ +#!@pythonEnv@/bin/python3 + +import sys +import json +import slixmpp +import asyncio +import logging +import io + +CONFIG = json.load(open("@scriptEnv@", "r")) + +def sanitize(string): + import re + from unidecode import unidecode + return re.compile(r"[^-.A-Za-z0-9_]").sub("_", unidecode(string)) + +def parse_email(): + import email + from email.header import decode_header + + mail = email.message_from_file(sys.stdin) + try: + d = decode_header(mail["subject"])[0] + if d[1] is not None: + subject = d[0].decode(d[1]) + else: + subject = d[0] + except Exception as e: + subject = mail["subject"] + sender = mail["from"] + recipient = mail["X-Original-To"] + + body = "" + html = None + files = {} + for part in mail.walk(): + if part.get_content_type() == "text/plain": + body += "\n-------------------\n" + try: + body += part.get_payload(decode=True).decode(encoding=part.get_content_charset() or "utf-8") + except Exception as e: + body += part.get_payload(decode=False) + elif part.get_content_type() == "text/html": + html = part.get_payload(decode=True) + elif part.get_content_type() != "text/html" and\ + part.get_content_maintype() != "multipart": + + filename = part.get_filename() or "{}.dat".format(part["Content-ID"]) + files[sanitize(filename)] = (part.get_content_type(), part.get_payload(decode=True)) + + return [body, html, subject, sender, recipient, files] + +[body, html, subject, sender, recipient, files] = parse_email() + +class Bot(slixmpp.ClientXMPP): + def __init__(self, jid, password, body, html, subject, sender, recipient, files): + super().__init__(jid, password) + + self.got_error = False + self.body = body + self.html = html + self.subject = subject + self.sender = sender + self.recipient = recipient + self.files = files + self.register_plugin('xep_0363') + self.add_event_handler("session_start", self.session_start) + self.add_event_handler("message", self.message) + + @asyncio.coroutine + def session_start(self, event): + files = [] + if self.html is not None: + url = yield from self['xep_0363'].upload_file( + "mail.html", + content_type="text/html", + input_file=io.BytesIO(self.html)) + files.append(("HTML version", url)) + for f in self.files: + url = yield from self['xep_0363'].upload_file( + f, + content_type=self.files[f][0], + input_file=io.BytesIO(self.files[f][1]) + ) + files.append((f, url)) + + text = """ +New e-mail message from {sender} +Subject: {subject} +{body} +""".format(sender=self.sender, subject=self.subject, body=self.body) + if len(files) > 0: + text += "\n\nAttachments:" + for f in files: + text += "\n{}: {}".format(f[0], f[1]) + self.send_message(mto=self.recipient, mbody=text, msubject=self.subject, mtype='message') + yield from asyncio.sleep(5) + self.disconnect() + + @asyncio.coroutine + def message(self, msg): + if msg["type"] == "error": + self.got_error = True + +logging.basicConfig(level=logging.DEBUG, format='%(levelname)-8s %(message)s') +xmpp = Bot(CONFIG["jid"], CONFIG["password"], body, html, subject, sender, recipient, files) +xmpp.connect() +xmpp.process(forever=False) +if xmpp.got_error: + sys.exit(1) +else: + sys.exit(0) diff --git a/systems/eldiron/flake.lock b/systems/eldiron/flake.lock new file mode 100644 index 0000000..99a5c92 --- /dev/null +++ b/systems/eldiron/flake.lock @@ -0,0 +1,2758 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_12", + "nixpkgs": "nixpkgs_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "buildslist": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "copanier": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "diaspora": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "dns-nix": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1635273082, + "narHash": "sha256-EHiDP2jEa7Ai5ZwIf5uld9RVFcV77+2SUxjQXwJsJa0=", + "owner": "kirelagin", + "repo": "dns.nix", + "rev": "c7b9645da9c0ddce4f9de4ef27ec01bb8108039a", + "type": "github" + }, + "original": { + "owner": "kirelagin", + "repo": "dns.nix", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "etherpad-lite": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_4" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_7" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1614513358, + "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_10": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_11": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_12": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_13": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_14": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_15": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_16": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_17": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_18": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_19": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_20": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_21": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_22": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_23": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_9": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "grocy": { + "flake": false, + "locked": { + "lastModified": 1585166193, + "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=", + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + }, + "original": { + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + } + }, + "mastodon": { + "flake": false, + "locked": { + "lastModified": 1582790581, + "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=", + "owner": "tootsuite", + "repo": "mastodon", + "rev": "9bace2dd88d127d396794375c8fcb2132619a799", + "type": "github" + }, + "original": { + "owner": "tootsuite", + "ref": "v2.9.4", + "repo": "mastodon", + "type": "github" + } + }, + "mediagoblin": { + "flake": false, + "locked": { + "lastModified": 1531090939, + "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=", + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "revCount": 4805, + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + }, + "original": { + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_16", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_2": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": "nixpkgs_19", + "webapps-ttrss": "webapps-ttrss_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_3": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_21", + "webapps-ttrss": "webapps-ttrss_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_4": { + "inputs": { + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_29", + "webapps-ttrss": "webapps-ttrss_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_4": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_5": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_6": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_7": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_17": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_18": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_22": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_23": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_24": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_25": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_26": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_27": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_28": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_29": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_30": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_31": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "openarc": { + "inputs": { + "flake-utils": "flake-utils_4", + "myuids": "myuids", + "nixpkgs": "nixpkgs_7", + "openarc": "openarc_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_2": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_3": { + "inputs": { + "flake-utils": "flake-utils_6", + "myuids": "myuids_3", + "nixpkgs": "nixpkgs_9", + "openarc": "openarc_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_4": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_5": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "opendmarc": { + "inputs": { + "flake-utils": "flake-utils_5", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_2": { + "inputs": { + "flake-utils": "flake-utils_7", + "myuids": "myuids_4", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "paste": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "../../paste", + "type": "path" + }, + "original": { + "path": "../../paste", + "type": "path" + } + }, + "peertube": { + "flake": false, + "locked": { + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_2": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_3": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_open_instance": { + "inputs": { + "flake-utils": "flake-utils_9", + "myuids": "myuids_5", + "nixpkgs": "nixpkgs_12", + "peertube": "peertube" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_origin": { + "inputs": { + "flake-utils": "flake-utils_10", + "myuids": "myuids_6", + "nixpkgs": "nixpkgs_13", + "peertube": "peertube_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "private-buildbot": { + "inputs": { + "buildslist": "buildslist", + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=", + "path": "../../flakes/private/buildbot", + "type": "path" + }, + "original": { + "path": "../../flakes/private/buildbot", + "type": "path" + } + }, + "private-chatons": { + "inputs": { + "environment": "environment" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-milters": { + "inputs": { + "environment": "environment_2", + "files-watcher": "files-watcher", + "openarc": "openarc", + "opendmarc": "opendmarc", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "private-monitoring": { + "inputs": { + "environment": "environment_3", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib_2", + "secrets": "secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "private-openarc": { + "inputs": { + "files-watcher": "files-watcher_2", + "openarc": "openarc_3", + "secrets": "secrets_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "private-opendmarc": { + "inputs": { + "environment": "environment_4", + "files-watcher": "files-watcher_3", + "opendmarc": "opendmarc_2", + "secrets": "secrets_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "private-openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "private-paste": { + "inputs": { + "paste": "paste" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=", + "path": "../../flakes/private/paste", + "type": "path" + }, + "original": { + "path": "../../flakes/private/paste", + "type": "path" + } + }, + "private-peertube": { + "inputs": { + "peertube_open_instance": "peertube_open_instance", + "peertube_origin": "peertube_origin" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=", + "path": "../../flakes/private/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/private/peertube", + "type": "path" + } + }, + "private-php": { + "inputs": { + "flake-utils": "flake-utils_11", + "nixpkgs": "nixpkgs_14", + "nixpkgs-4": "nixpkgs-4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "private-ssh": { + "inputs": { + "environment": "environment_5", + "secrets": "secrets_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "private-system": { + "inputs": { + "backports": "backports", + "environment": "environment_6", + "mypackages": "mypackages", + "myuids": "myuids_7", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "public-copanier": { + "inputs": { + "copanier": "copanier", + "flake-utils": "flake-utils_13", + "nixpkgs": "nixpkgs_17" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=", + "path": "../../flakes/copanier", + "type": "path" + }, + "original": { + "path": "../../flakes/copanier", + "type": "path" + } + }, + "public-diaspora": { + "inputs": { + "diaspora": "diaspora", + "flake-utils": "flake-utils_14", + "myuids": "myuids_8", + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=", + "path": "../../flakes/diaspora", + "type": "path" + }, + "original": { + "path": "../../flakes/diaspora", + "type": "path" + } + }, + "public-etherpad-lite": { + "inputs": { + "etherpad-lite": "etherpad-lite", + "flake-utils": "flake-utils_15", + "mypackages": "mypackages_2", + "nixpkgs": "nixpkgs_20" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=", + "path": "../../flakes/etherpad-lite", + "type": "path" + }, + "original": { + "path": "../../flakes/etherpad-lite", + "type": "path" + } + }, + "public-fiche": { + "locked": { + "lastModified": 1, + "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=", + "path": "../../flakes/fiche", + "type": "path" + }, + "original": { + "path": "../../flakes/fiche", + "type": "path" + } + }, + "public-files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "public-grocy": { + "inputs": { + "flake-utils": "flake-utils_16", + "grocy": "grocy", + "mypackages": "mypackages_3", + "nixpkgs": "nixpkgs_22" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=", + "path": "../../flakes/grocy", + "type": "path" + }, + "original": { + "path": "../../flakes/grocy", + "type": "path" + } + }, + "public-loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "public-mastodon": { + "inputs": { + "flake-utils": "flake-utils_17", + "mastodon": "mastodon", + "myuids": "myuids_9", + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=", + "path": "../../flakes/mastodon", + "type": "path" + }, + "original": { + "path": "../../flakes/mastodon", + "type": "path" + } + }, + "public-mediagoblin": { + "inputs": { + "flake-utils": "flake-utils_18", + "mediagoblin": "mediagoblin", + "myuids": "myuids_10", + "nixpkgs": "nixpkgs_24" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=", + "path": "../../flakes/mediagoblin", + "type": "path" + }, + "original": { + "path": "../../flakes/mediagoblin", + "type": "path" + } + }, + "public-multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_4", + "myuids": "myuids_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "public-mypackages": { + "inputs": { + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_25", + "webapps-ttrss": "webapps-ttrss_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../flakes/mypackages", + "type": "path" + }, + "original": { + "path": "../../flakes/mypackages", + "type": "path" + } + }, + "public-myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "public-openarc": { + "inputs": { + "flake-utils": "flake-utils_19", + "myuids": "myuids_12", + "nixpkgs": "nixpkgs_26", + "openarc": "openarc_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../flakes/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/openarc", + "type": "path" + } + }, + "public-opendmarc": { + "inputs": { + "flake-utils": "flake-utils_20", + "myuids": "myuids_13", + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../flakes/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/opendmarc", + "type": "path" + } + }, + "public-peertube": { + "inputs": { + "flake-utils": "flake-utils_21", + "myuids": "myuids_14", + "nixpkgs": "nixpkgs_28", + "peertube": "peertube_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "../../flakes/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/peertube", + "type": "path" + } + }, + "public-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "public-surfer": { + "inputs": { + "flake-utils": "flake-utils_22", + "mypackages": "mypackages_4", + "nixpkgs": "nixpkgs_30", + "surfer": "surfer" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=", + "path": "../../flakes/surfer", + "type": "path" + }, + "original": { + "path": "../../flakes/surfer", + "type": "path" + } + }, + "public-taskwarrior-web": { + "inputs": { + "flake-utils": "flake-utils_23", + "nixpkgs": "nixpkgs_31", + "taskwarrior-web": "taskwarrior-web" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=", + "path": "../../flakes/taskwarrior-web", + "type": "path" + }, + "original": { + "path": "../../flakes/taskwarrior-web", + "type": "path" + } + }, + "root": { + "inputs": { + "dns-nix": "dns-nix", + "my-lib": "my-lib", + "nixpkgs": "nixpkgs_5", + "private-buildbot": "private-buildbot", + "private-chatons": "private-chatons", + "private-environment": "private-environment", + "private-milters": "private-milters", + "private-monitoring": "private-monitoring", + "private-openarc": "private-openarc", + "private-opendmarc": "private-opendmarc", + "private-openldap": "private-openldap", + "private-paste": "private-paste", + "private-peertube": "private-peertube", + "private-php": "private-php", + "private-ssh": "private-ssh", + "private-system": "private-system", + "public-copanier": "public-copanier", + "public-diaspora": "public-diaspora", + "public-etherpad-lite": "public-etherpad-lite", + "public-fiche": "public-fiche", + "public-files-watcher": "public-files-watcher", + "public-grocy": "public-grocy", + "public-loginctl-linger": "public-loginctl-linger", + "public-mastodon": "public-mastodon", + "public-mediagoblin": "public-mediagoblin", + "public-multi-apache-container": "public-multi-apache-container", + "public-mypackages": "public-mypackages", + "public-myuids": "public-myuids", + "public-openarc": "public-openarc", + "public-opendmarc": "public-opendmarc", + "public-peertube": "public-peertube", + "public-secrets": "public-secrets", + "public-surfer": "public-surfer", + "public-taskwarrior-web": "public-taskwarrior-web" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "surfer": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "taskwarrior-web": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_2": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_3": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_4": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_5": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/eldiron/flake.nix b/systems/eldiron/flake.nix new file mode 100644 index 0000000..790b638 --- /dev/null +++ b/systems/eldiron/flake.nix @@ -0,0 +1,90 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + dns-nix.url = "github:kirelagin/dns.nix"; + dns-nix.inputs.nixpkgs.follows = "nixpkgs"; + + my-lib.url = "path:../../flakes/lib"; + + public-etherpad-lite.url = "path:../../flakes/etherpad-lite"; + public-grocy.url = "path:../../flakes/grocy"; + public-openarc.url = "path:../../flakes/openarc"; + public-opendmarc.url = "path:../../flakes/opendmarc"; + public-peertube.url = "path:../../flakes/peertube"; + public-diaspora.url = "path:../../flakes/diaspora"; + public-mastodon.url = "path:../../flakes/mastodon"; + public-mediagoblin.url = "path:../../flakes/mediagoblin"; + public-surfer.url = "path:../../flakes/surfer"; + public-myuids.url = "path:../../flakes/myuids"; + public-copanier.url = "path:../../flakes/copanier"; + public-secrets.url = "path:../../flakes/secrets"; + public-files-watcher.url = "path:../../flakes/files-watcher"; + public-fiche.url = "path:../../flakes/fiche"; + public-mypackages.url = "path:../../flakes/mypackages"; + public-loginctl-linger.url = "path:../../flakes/loginctl-linger"; + public-multi-apache-container.url = "path:../../flakes/multi-apache-container"; + public-taskwarrior-web.url = "path:../../flakes/taskwarrior-web"; + + private-peertube.url = "path:../../flakes/private/peertube"; + private-buildbot.url = "path:../../flakes/private/buildbot"; + private-php.url = "path:../../flakes/private/php"; + private-environment.url = "path:../../flakes/private/environment"; + private-openarc.url = "path:../../flakes/private/openarc"; + private-openldap.url = "path:../../flakes/private/openldap"; + private-opendmarc.url = "path:../../flakes/private/opendmarc"; + private-milters.url = "path:../../flakes/private/milters"; + private-monitoring.url = "path:../../flakes/private/monitoring"; + private-paste.url = "path:../../flakes/private/paste"; + private-ssh.url = "path:../../flakes/private/ssh"; + private-chatons.url = "path:../../flakes/private/chatons"; + private-system.url = "path:../../flakes/private/system"; + }; + outputs = inputs@{ self, my-lib, nixpkgs, dns-nix, ...}: + my-lib.lib.mkColmenaFlake { + name = "eldiron"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "176.9.151.89"; + targetUser = "root"; + nixosModules = with inputs; { + base = ./base.nix; + myuids = public-myuids.nixosModule; + secrets = public-secrets.nixosModule; + loginctl-linger = public-loginctl-linger.nixosModule; + files-watcher = public-files-watcher.nixosModule; + multi-apache-container = public-multi-apache-container.nixosModule; + etherpad-lite = public-etherpad-lite.nixosModule; + mastodon = public-mastodon.nixosModule; + mediagoblin = public-mediagoblin.nixosModule; + peertube = public-peertube.nixosModule; + diaspora = public-diaspora.nixosModule; + fiche = public-fiche.nixosModule; + + environment = private-environment.nixosModule; + openarc = private-openarc.nixosModule; + opendmarc = private-opendmarc.nixosModule; + ssh = private-ssh.nixosModule; + chatons = private-chatons.nixosModule; + system = private-system.nixosModule; + monitoring = private-monitoring.nixosModule; + paste = private-paste.nixosModule; + milters = private-milters.nixosModule; + }; + moduleArgs = with inputs; { + dns-nix = dns-nix; + nixpkgsRaw = nixpkgs.legacyPackages.x86_64-linux; + mypackages-lib = public-mypackages.lib.x86_64-linux; + etherpad-lite = public-etherpad-lite.defaultPackage.x86_64-linux; + taskwarrior-web = public-taskwarrior-web.defaultPackage.x86_64-linux; + copanier = public-copanier.defaultPackage.x86_64-linux; + grocy = public-grocy.defaultPackage.x86_64-linux; + surfer = public-surfer.defaultPackage.x86_64-linux; + mediagoblin = public-mediagoblin.defaultPackage.x86_64-linux; + buildbot = private-buildbot.packages.x86_64-linux.buildbot-full; + openldap = private-openldap; + monitoring = private-monitoring; + peertube = private-peertube.packages.x86_64-linux; + php = private-php; + }; + }; +} diff --git a/systems/eldiron/ftp.nix b/systems/eldiron/ftp.nix new file mode 100644 index 0000000..6aa1afc --- /dev/null +++ b/systems/eldiron/ftp.nix @@ -0,0 +1,339 @@ +{ 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 { + myServices.dns.zones."immae.eu".subdomains.ftp = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.espace-de-stockage = { + file.datetime = "2022-08-22T01:00:00"; + service = { + name = "Espace de stockage"; + description = "Compte FTP/SFTP"; + logo = if pure-ftpd-enabled + then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png" + else if proftpd-enabled + then "http://proftpd.org/proftpd.png" + else ""; + website = "ftp.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = if pure-ftpd-enabled then { + name = "Pure-ftpd"; + website = "https://www.pureftpd.org/project/pure-ftpd/"; + license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING"; + license.name = "MIT Licence"; + version = package.version; + source.url = "https://github.com/jedisct1/pure-ftpd/"; + modules = "openssh"; + } else if proftpd-enabled then { + name = "ProFTPD"; + website = "http://proftpd.org/"; + license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.proftpd.version; + source.url = "https://github.com/proftpd/proftpd/"; + modules = "openssh"; + } else {}; + }; + #myServices.chatonsProperties.services.ftp = { + # file.datetime = "2022-08-22T01:00:00"; + # service = { + # name = "Comptes FTP"; + # description = "Compte FTP/SFTP"; + # logo = if pure-ftpd-enabled + # then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png" + # else if proftpd-enabled + # then "http://proftpd.org/proftpd.png" + # else ""; + # website = "ftp.immae.eu"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = if pure-ftpd-enabled then { + # name = "Pure-ftpd"; + # website = "https://www.pureftpd.org/project/pure-ftpd/"; + # license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING"; + # license.name = "MIT Licence"; + # version = package.version; + # source.url = "https://github.com/jedisct1/pure-ftpd/"; + # } else if proftpd-enabled then { + # name = "ProFTPD"; + # website = "http://proftpd.org/"; + # license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING"; + # license.name = "GNU General Public License v2.0"; + # version = pkgs.proftpd.version; + # source.url = "https://github.com/proftpd/proftpd/"; + # } else {}; + #}; + security.acme.certs."ftp" = { + domain = "eldiron.immae.eu"; + # FIXME: make it global + extraLegoRunFlags = ["--preferred-chain" "ISRG Root X1"]; + extraLegoRenewFlags = ["--preferred-chain" "ISRG Root X1"]; + postRun = (lib.optionalString pure-ftpd-enabled '' + systemctl restart pure-ftpd.service + '') + (lib.optionalString proftpd-enabled '' + systemctl restart proftpd.service + ''); + extraDomainNames = [ "ftp.immae.eu" ]; + }; + + 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 + AllowChrootSymlinks off + + ''; + 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}" + ]; + + myServices.monitoring.fromMasterActivatedPlugins = [ "ftp" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "ftp has access to database for authentication"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_ftp_database"; + + servicegroups = "webstatus-remote-services"; + _webstatus_name = "FTP"; + _webstatus_url = "ftp.immae.eu"; + } + + ]; + + }; + +} diff --git a/systems/eldiron/ftp_sync.sh b/systems/eldiron/ftp_sync.sh new file mode 100755 index 0000000..aff7178 --- /dev/null +++ b/systems/eldiron/ftp_sync.sh @@ -0,0 +1,47 @@ +#!/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://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/systems/eldiron/gemini/default.nix b/systems/eldiron/gemini/default.nix new file mode 100644 index 0000000..600afbc --- /dev/null +++ b/systems/eldiron/gemini/default.nix @@ -0,0 +1,50 @@ +{ 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 { + security.acme.certs.immae.postRun = '' + systemctl restart gemini.service + ''; + myServices.chatonsProperties.hostings.gemini = { + file.datetime = "2022-08-27T18:00:00"; + hosting = { + name = "Hébergement Gemini"; + description = "Hébergement de capsules Gemini"; + type = "INSTANCE"; + website = "gemini://immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "twins"; + website = "https://code.rocketnine.space/tslocum/twins"; + license.url = "https://code.rocketnine.space/tslocum/twins/src/branch/master/LICENSE"; + license.name = "MIT License"; + version = pkgs.twins.version; + source.url = "https://code.rocketnine.space/tslocum/twins"; + }; + }; + 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/systems/eldiron/gemini/public/index.gmi b/systems/eldiron/gemini/public/index.gmi new file mode 100644 index 0000000..034a0d9 --- /dev/null +++ b/systems/eldiron/gemini/public/index.gmi @@ -0,0 +1,70 @@ +# 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/systems/eldiron/gitolite/default.nix b/systems/eldiron/gitolite/default.nix new file mode 100644 index 0000000..1885234 --- /dev/null +++ b/systems/eldiron/gitolite/default.nix @@ -0,0 +1,127 @@ +{ 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.dns.zones."immae.eu".subdomains.git = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.gitolite = { + file.datetime = "2022-08-21T10:01:00"; + service = { + name = "Gitolite"; + description = "Gitolite allows you to setup git hosting on a central server, with fine-grained access control and many more powerful features."; + website = "https://git.immae.eu"; + logo = "https://git.immae.eu/cgit-css/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/forge-logicielle.html"; + }; + software = { + name = "Gitolite"; + website = "https://gitolite.com/gitolite/"; + license.url = "https://github.com/sitaramc/gitolite/blob/master/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.gitolite.version; + source.url = "https://github.com/sitaramc/gitolite"; + }; + }; + myServices.ssh.modules.gitolite = { + snippet = builtins.readFile ./ldap_gitolite.sh; + dependencies = [ pkgs.gitolite ]; + vars.ldap_group = "cn=users,cn=gitolite,ou=services,dc=immae,dc=eu"; + vars.shell_path = "${pkgs.gitolite}/bin/gitolite-shell"; + vars.services = let + toLine = login: key: ''command="${pkgs.gitolite}/bin/gitolite-shell ${login}",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ${key}''; + in builtins.concatStringsSep "\n" [ + (toLine "naemon" config.myEnv.monitoring.ssh_public_key) + (toLine "buildbot" config.myEnv.buildbot.ssh_key.public) + ]; + }; + 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 + apprise + sleekxmpp + urllib3 + pyyaml + ]; + in + [ + # For some reason it absolutely wants to include "doc" output + ((pkgs.python39.withPackages python-packages) // { doc = ""; }) + 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; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "git" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "gitolite is working"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = "check_git"; + + servicegroups = "webstatus-remote-services"; + _webstatus_name = "Git"; + _webstatus_url = "git.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/gitolite/gitolite_ldap_groups.sh b/systems/eldiron/gitolite/gitolite_ldap_groups.sh new file mode 100755 index 0000000..ffa2dab --- /dev/null +++ b/systems/eldiron/gitolite/gitolite_ldap_groups.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +uid_param="$1" +ldap_host="ldap://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/systems/eldiron/gitolite/ldap_gitolite.sh b/systems/eldiron/gitolite/ldap_gitolite.sh new file mode 100644 index 0000000..75a39bf --- /dev/null +++ b/systems/eldiron/gitolite/ldap_gitolite.sh @@ -0,0 +1,28 @@ +### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh +LDAP_GITOLITE_MEMBER="@gitolite_ldap_group@" +GITOLITE_SHELL="@gitolite_shell_path@" + +if [[ $user == gitolite ]]; then + allowed_logins=$(LDAP_BASE=$USER_LDAP_BASE \ + ldap_search '(memberOf='$LDAP_GITOLITE_MEMBER')' '' \ + | grep ^dn \ + | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \ + | paste -sd,) + + psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'git' = ANY(usage) AND login IN ($allowed_logins);" | while IFS='|' read user key; do + if [[ $user == "immae" ]] || [[ $user == "denise" ]]; then + # Capitalize first letter (backward compatibility) + user=$(sed -r 's/^([a-z])/\U\1/' <<< "$user") + fi + 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 + done +cat <&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 + ''; + extraDomainNames = [ "imap.immae.eu" "pop3.immae.eu" ]; + }; + security.acme.certs."mail" = { + postRun = '' + systemctl restart dovecot2.service + ''; + extraDomainNames = [ "imap.immae.eu" "pop3.immae.eu" ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "imap" "tcp" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "imap connection works"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_imap_connection"; + + servicegroups = "webstatus-remote-services,webstatus-email"; + _webstatus_name = "IMAP"; + _webstatus_url = "imap.immae.eu"; + } + + { + service_description = "imap SSL is up to date"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = ["check_tcp_ssl" "993"]; + + servicegroups = "webstatus-ssl"; + _webstatus_name = "IMAP"; + _webstatus_url = "imap.immae.eu"; + } + + ]; + }; +} + diff --git a/systems/eldiron/mail/postfix.nix b/systems/eldiron/mail/postfix.nix new file mode 100644 index 0000000..f95ee1b --- /dev/null +++ b/systems/eldiron/mail/postfix.nix @@ -0,0 +1,497 @@ +{ lib, pkgs, config, options, ... }: +let + getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) (lib.filterAttrs (n: v: v.receive) p.emailPolicies); + bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones; + receiving_domains = lib.flatten (builtins.attrValues bydomain); +in +{ + options.services.postfix.submissionOptions' = options.services.postfix.submissionOptions // { + type = with lib.types; attrsOf (either str (listOf str)); + apply = builtins.mapAttrs (n: v: if builtins.isList v then builtins.concatStringsSep "," v else v); + }; + config = lib.mkIf config.myServices.mail.enable { + myServices.dns.zones."immae.eu" = with config.myServices.dns.helpers; lib.mkMerge [ + mailMX + (mailCommon "immae.eu") + mailSend + { + # Virtual forwards and mailboxes for real users + emailPolicies."mail".receive = true; + # multi-domain generic mails: + # hostmaster, cron, httpd, naemon, postmaster + # system virtual mailboxes: + # devnull, printer, testconnect + emailPolicies."".receive = true; + subdomains.mail = lib.mkMerge [ (mailCommon "immae.eu") mailSend ]; + subdomains.smtp = ips servers.eldiron.ips.main; + + # DMARC reports + subdomains._dmarc.subdomains._report.subdomains = let + getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) p.emailPolicies; + bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones; + hostsWithMail = lib.flatten (builtins.attrValues bydomain); + nvpairs = builtins.map (e: { name = e; value = { TXT = [ "v=DMARC1;" ]; }; }) hostsWithMail; + in + builtins.listToAttrs nvpairs; + } + ]; + + myServices.chatonsProperties.hostings.mx-backup = { + file.datetime = "2022-08-22T01:00:00"; + hosting = { + name = "MX Backup"; + description = "Serveur e-mail secondaire"; + logo = "https://www.postfix.org/favicon.ico"; + website = "https://mail.immae.eu/"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Postfix"; + website = "http://www.postfix.org/"; + license.url = "http://postfix.mirrors.ovh.net/postfix-release/LICENSE"; + license.name = "Eclipse Public license (EPL 2.0) and IBM Public License (IPL 1.0)"; + version = pkgs.postfix.version; + source.url = "http://www.postfix.org/download.html"; + }; + }; + 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 + ''; + }; + }; + + 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 + testmail = pkgs.writeScript "testmail" '' + #! ${pkgs.stdenv.shell} + ${pkgs.coreutils}/bin/touch \ + "/var/lib/naemon/checks/email/$(${pkgs.procmail}/bin/formail -x To: | ${pkgs.coreutils}/bin/tr -d ' <>')" + ''; + in + ''testmail: "|${testmail}"''; + mapFiles = let + virtual_map = { + virtual = let + cfg = config.myEnv.monitoring.email_check.eldiron; + address = "${cfg.mail_address}@${cfg.mail_domain}"; + aliases = config.myEnv.mail.postfix.common_aliases; + admins = builtins.concatStringsSep "," config.myEnv.mail.postfix.admins; + in pkgs.writeText "postfix-virtual" ( + builtins.concatStringsSep "\n" ( + [ "${address} testmail@localhost" + ] ++ + map (a: "${a} ${admins}") config.myEnv.mail.postfix.other_aliases + ++ lib.lists.flatten ( + map (domain: + map (alias: "${alias}@${domain} ${admins}") aliases + ) receiving_domains + ) + )); + }; + 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)); + aliases = config.myEnv.mail.postfix.common_aliases; + joined = builtins.concatStringsSep ","; + admins = joined config.myEnv.mail.postfix.admins; + in pkgs.writeText "host-sender-login" + (builtins.concatStringsSep "\n" ( + mapAttrsToList (n: v: "${n} ${joined v}") addresses + ++ lib.lists.flatten ( + map (domain: + map (alias: "${alias}@${domain} ${admins}") aliases + ) receiving_domains + ) + ++ map (a: "${a} ${admins}") config.myEnv.mail.postfix.other_aliases + )); + }; + in + 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 = receiving_domains; + virtual_mailbox_maps = [ + "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}" + ]; + dovecot_destination_recipient_limit = "1"; + virtual_transport = "dovecot"; + + ### Relay domains + smtpd_relay_restrictions = [ + "defer_unauth_destination" + ]; + + ### 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 = builtins.head 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 = [ + "/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 = config.services.postfix.submissionOptions'; + 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 = [ + "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 = [ + # 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} + set -o pipefail + 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 | \ + ${pkgs.dovecot}/libexec/dovecot/dovecot-lda -f "$sender" -a "$original_recipient" -d "$user" + if echo ''${PIPESTATUS[@]} | ${pkgs.gnugrep}/bin/grep -qE '^[0 ]+$'; then + exit 0 + else + # src/global/sys_exits.h to retry + exit 75 + fi + ''; + 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 + ''; + extraDomainNames = [ "smtp.immae.eu" ]; + }; + security.acme.certs."mail-rsa" = { + postRun = '' + systemctl restart postfix.service + ''; + extraDomainNames = [ "smtp.immae.eu" ]; + }; + 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"; + + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "postfix SSL is up to date"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_smtp"; + + servicegroups = "webstatus-ssl"; + _webstatus_name = "SMTP"; + _webstatus_url = "smtp.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/mail/rspamd.nix b/systems/eldiron/mail/rspamd.nix new file mode 100644 index 0000000..a300cc5 --- /dev/null +++ b/systems/eldiron/mail/rspamd.nix @@ -0,0 +1,88 @@ +{ 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"; + systemd.services.rspamd.serviceConfig.SupplementaryGroups = [ "vhost" ]; + 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/systems/eldiron/mail/scan_reported_mails b/systems/eldiron/mail/scan_reported_mails new file mode 100755 index 0000000..fe9f4d6 --- /dev/null +++ b/systems/eldiron/mail/scan_reported_mails @@ -0,0 +1,21 @@ +#!/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/systems/eldiron/mail/sieve_bin/imapsieve_copy b/systems/eldiron/mail/sieve_bin/imapsieve_copy new file mode 100755 index 0000000..2ca1f23 --- /dev/null +++ b/systems/eldiron/mail/sieve_bin/imapsieve_copy @@ -0,0 +1,8 @@ +#!/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/systems/eldiron/mail/sieve_scripts/backup.sieve b/systems/eldiron/mail/sieve_scripts/backup.sieve new file mode 100644 index 0000000..3014c0a --- /dev/null +++ b/systems/eldiron/mail/sieve_scripts/backup.sieve @@ -0,0 +1,7 @@ +# 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/systems/eldiron/mail/sieve_scripts/report_ham.sieve b/systems/eldiron/mail/sieve_scripts/report_ham.sieve new file mode 100644 index 0000000..f9b8481 --- /dev/null +++ b/systems/eldiron/mail/sieve_scripts/report_ham.sieve @@ -0,0 +1,11 @@ +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/systems/eldiron/mail/sieve_scripts/report_spam.sieve b/systems/eldiron/mail/sieve_scripts/report_spam.sieve new file mode 100644 index 0000000..9a1f794 --- /dev/null +++ b/systems/eldiron/mail/sieve_scripts/report_spam.sieve @@ -0,0 +1,3 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve" ]; + +pipe :copy "imapsieve_copy" [ "spam" ]; diff --git a/systems/eldiron/mail/sympa.nix b/systems/eldiron/mail/sympa.nix new file mode 100644 index 0000000..8e801dd --- /dev/null +++ b/systems/eldiron/mail/sympa.nix @@ -0,0 +1,232 @@ +{ lib, pkgs, config, ... }: +let + domain = "lists.immae.eu"; + sympaConfig = config.myEnv.mail.sympa; +in +{ + config = lib.mkIf config.myServices.mail.enable { + myServices.dns.zones."immae.eu".emailPolicies."lists".receive = true; + myServices.dns.zones."immae.eu".subdomains.lists = + with config.myServices.dns.helpers; lib.mkMerge [ + (ips servers.eldiron.ips.main) + (mailCommon "immae.eu") + mailSend + ]; + + myServices.chatonsProperties.services.sympa = { + file.datetime = "2022-08-22T00:50:00"; + service = { + name = "Sympa"; + description = "Mailing lists service"; + website = "https://mail.immae.eu/sympa"; + logo = "https://mail.immae.eu/static-sympa/icons/favicon_sympa.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Sympa"; + website = "https://www.sympa.org/"; + license.url = "https://github.com/sympa-community/sympa/blob/sympa-6.2/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.sympa.version; + source.url = "https://github.com/sympa-community/sympa/"; + }; + }; + myServices.databases.postgresql.authorizedHosts = { + backup-2 = [ + { + username = "sympa"; + database = "sympa"; + ip4 = config.myEnv.servers.backup-2.ips.main.ip4; + ip6 = map (v: "${v}/128") 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_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} + ''; + }; + 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"; + }; + }; + + 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"; + create_list = "listmaster"; + }; + 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/systems/eldiron/monitoring.nix b/systems/eldiron/monitoring.nix new file mode 100644 index 0000000..2aa7f8f --- /dev/null +++ b/systems/eldiron/monitoring.nix @@ -0,0 +1,51 @@ +{ config, pkgs, lib, name, monitoring, ... }: +let + hostFQDN = config.hostEnv.fqdn; + emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check; +in +{ + config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "emails" "mdadm" "postfix" "postgresql" "zfs" "notify-secondary"]; + config.myServices.monitoring.pluginsArgs.postgresql.package = config.myServices.databases.postgresql.package; + config.myServices.monitoring.objects = lib.mkMerge [ + (monitoring.lib.objectsCommon { + inherit hostFQDN; + hostName = name; + master = false; + processWarn = "550"; processAlert = "650"; + loadWarn = "1.0"; loadAlert = "1.2"; + interface = builtins.head (builtins.attrNames config.networking.interfaces); + }) + + { + service = [ + { + service_description = "No mdadm array is degraded"; + use = "local-service"; + check_command = ["check_mdadm"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Postgresql replication for backup-2 is up to date"; + use = "local-service"; + check_command = ["check_postgresql_replication" "backup-2" "/run/postgresql" "5432"]; + __passive_servicegroups = "webstatus-databases"; + } + { + service_description = "No ZFS pool is degraded"; + use = "local-service"; + check_command = ["check_zfs"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "mailq is empty"; + use = "local-service"; + check_command = ["check_mailq"]; + __passive_servicegroups = "webstatus-email"; + } + (emailCheck "eldiron" hostFQDN // { + __passive_servicegroups = "webstatus-email"; + }) + ]; + } + ]; +} diff --git a/systems/eldiron/mpd.nix b/systems/eldiron/mpd.nix new file mode 100644 index 0000000..640b001 --- /dev/null +++ b/systems/eldiron/mpd.nix @@ -0,0 +1,60 @@ +{ 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/systems/eldiron/pub/default.nix b/systems/eldiron/pub/default.nix new file mode 100644 index 0000000..ca8122a --- /dev/null +++ b/systems/eldiron/pub/default.nix @@ -0,0 +1,100 @@ +{ lib, pkgs, config, ... }: +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} + ''; +in +{ + options = { + myServices.pub.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable pub user. + ''; + }; + myServices.pub.usersProfiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.listOf lib.types.package); + default = {}; + description = '' + specific user profile + ''; + }; + myServices.pub.restrictCommand = lib.mkOption { + type = lib.types.path; + readOnly = true; + default = "${restrict}/bin/restrict"; + description = '' + path to the restrict shell + ''; + }; + }; + + config = lib.mkIf config.myServices.pub.enable { + myServices.dns.zones."immae.eu".subdomains.pub = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.vm-like = { + file.datetime = "2022-08-22T01:00:00"; + service = { + name = "Comptes shell"; + description = "Compte shell cloisonné"; + logo = "https://www.openssh.com/favicon.ico"; + website = "pub.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Openssh"; + website = "https://www.openssh.com/"; + license.url = "https://github.com/openssh/openssh-portable/blob/master/LICENCE"; + license.name = "BSD Licence"; + version = pkgs.openssh.version; + source.url = "https://github.com/openssh/openssh-portable"; + }; + }; + myServices.ssh.modules.pub = { + snippet = builtins.readFile ./ldap_pub.sh; + dependencies = [ pkgs.coreutils ]; + vars.ldap_forward_group = "cn=forward,cn=pub,ou=services,dc=immae,dc=eu"; + vars.ldap_pub_group = "cn=restrict,cn=pub,ou=services,dc=immae,dc=eu"; + vars.echo_command = "${pkgs.coreutils}/bin/echo"; + vars.restrict_command = "${restrict}/bin/restrict"; + }; + + system.extraSystemBuilderCmds = let + toPath = u: paths: pkgs.buildEnv { + name = "${u}-profile"; + inherit paths; + }; + in '' + mkdir -p $out/pub + ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (u: m: "ln -s ${toPath u m} $out/pub/${u}") config.myServices.pub.usersProfiles)} + ''; + users.users.pub = let + in { + createHome = true; + description = "Restricted shell user"; + home = "/var/lib/pub"; + uid = config.myEnv.users.pub.uid; + isNormalUser = true; + group = "nogroup"; + useDefaultShell = true; + packages = [ + pkgs.tmux + ]; + }; + }; +} diff --git a/systems/eldiron/pub/ldap_pub.sh b/systems/eldiron/pub/ldap_pub.sh new file mode 100644 index 0000000..9f03ffe --- /dev/null +++ b/systems/eldiron/pub/ldap_pub.sh @@ -0,0 +1,38 @@ +### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh +LDAP_PUB_RESTRICT_MEMBER="@pub_ldap_pub_group@" +LDAP_PUB_FORWARD_MEMBER="@pub_ldap_forward_group@" +ECHO="@pub_echo_command@" + +if [[ $user == pub ]]; then + allowed_logins=$(LDAP_BASE=$USER_LDAP_BASE \ + ldap_search '(memberOf='$LDAP_PUB_RESTRICT_MEMBER')' '' \ + | grep ^dn \ + | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \ + | paste -sd,) + + allowed_forwards=$(LDAP_BASE=$USER_LDAP_BASE \ + ldap_search '(memberOf='$LDAP_PUB_FORWARD_MEMBER')' '' \ + | grep ^dn \ + | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \ + | paste -sd,) + + psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'pub' = ANY(usage) AND login IN ($allowed_logins);" | while IFS='|' read user key; do + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'command="@pub_restrict_command@ '$user'" ' + echo $key + fi + fi + done + + psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'forward' = ANY(usage) AND login IN ($allowed_logins,$allowed_forwards);" | while IFS='|' read user key; do + 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 + done + exit 0 +fi + diff --git a/systems/eldiron/pub/restrict b/systems/eldiron/pub/restrict new file mode 100644 index 0000000..698e394 --- /dev/null +++ b/systems/eldiron/pub/restrict @@ -0,0 +1,71 @@ +#!/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 + if [ -e "/run/current-system/pub/$user" ]; then + nix-store -q -R "/run/current-system/pub/$user" \ + | while read i; do + printf '%s--ro-bind\0'$i'\0'$i'\0' '' + done + printf '%s--ro-bind\0/run/current-system/pub/'$user'/bin\0/bin-pub-'$user'\0' '' + fi + } + + 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-pub-$user:/bin:/bin-pub" \ + --setenv HOME "/var/lib/pub" \ + --file 11 /etc/passwd \ + --file 12 /etc/group \ + -- $orig) \ + 10< <(nix_store_paths | sort | uniq) \ + 11< <(getent passwd $UID 65534) \ + 12< <(getent group $(id -g) 65534) + ;; +esac diff --git a/systems/eldiron/pub/tmux.restrict.conf b/systems/eldiron/pub/tmux.restrict.conf new file mode 100644 index 0000000..5aefd1c --- /dev/null +++ b/systems/eldiron/pub/tmux.restrict.conf @@ -0,0 +1,43 @@ +# 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/systems/eldiron/tasks/default.nix b/systems/eldiron/tasks/default.nix new file mode 100644 index 0000000..0772a5f --- /dev/null +++ b/systems/eldiron/tasks/default.nix @@ -0,0 +1,384 @@ +{ lib, pkgs, config, taskwarrior-web, ... }: +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 + ''; + 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 { + myServices.dns.zones."immae.eu".subdomains.task = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.taskwarrior = { + file.datetime = "2022-08-22T00:00:00"; + service = { + name = "Taskwarrior"; + description = "Taskwarrior is Free and Open Source Software that manages your TODO list from the command line. Web interface and synchronization server"; + website = "https://task.immae.eu/"; + logo = "https://taskwarrior.org/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Taskwarrior"; + website = "https://taskwarrior.org/"; + license.url = "https://github.com/GothenburgBitFactory/taskwarrior/blob/develop/LICENSE"; + license.name = "MIT License"; + version = taskwarrior-web.version; + source.url = "https://taskwarrior.org/download/"; + }; + }; + 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" ( + let + credentials = "${userConfig.org}/${name}/${userConfig.key}"; + dateFormat = userConfig.date; + cacert = 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-----''; + in { + inherit user group; + permissions = "0400"; + text = '' + 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=${cacert} + taskd.server=${fqdn}:${toString config.services.taskserver.listenPort} + taskd.credentials=${credentials} + dateformat=${dateFormat} + ''; + keyDependencies = [ cacert ]; + })) env.taskwarrior-web); + security.acme.certs.eldiron.extraDomainNames = [ "task.immae.eu" ]; + 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"; + 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[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Task:'"; + "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.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + }; + + security.acme.certs."task" = { + inherit 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/systems/eldiron/tasks/www/index.php b/systems/eldiron/tasks/www/index.php new file mode 100644 index 0000000..bde773d --- /dev/null +++ b/systems/eldiron/tasks/www/index.php @@ -0,0 +1,168 @@ + $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=
    +taskd.ca=/path/to/ca.cert.pem
    + 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=//
    +
    +
    +For Mirakel, download and import the file: + +For Android Taskwarrior app, see instructions here. + + + diff --git a/systems/eldiron/vpn/default.nix b/systems/eldiron/vpn/default.nix new file mode 100644 index 0000000..df56249 --- /dev/null +++ b/systems/eldiron/vpn/default.nix @@ -0,0 +1,92 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.myServices.vpn; +in +{ + options.myServices = { + vpn.enable = lib.mkEnableOption "Enable vpn service"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.vpn = with config.myServices.dns.helpers; + ips servers.eldiron.ips.main // { + subdomains.gw.AAAA = [ "${config.myEnv.vpn.eldiron.prefix}:0:ffff:1" ]; + # Fake address to designate the subnet + subdomains.sn.AAAA = [ "${config.myEnv.vpn.eldiron.prefix}::" ]; + }; + myServices.chatonsProperties.hostings.vpn = { + file.datetime = "2022-08-27T18:00:00"; + hosting = { + name = "VPN"; + description = "VPN"; + website = "https://vpn.immae.eu"; + logo = "https://tinc-vpn.org/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration.load = "FULL"; + install.type = "PACKAGE"; + }; + software = { + name = "tinc"; + website = "https://tinc-vpn.org/"; + license.url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"; + license.name = "GNU General Public License v2.0"; + version = pkgs.tinc.version; + source.url = "https://tinc-vpn.org/git/browse?p=tinc"; + }; + }; + 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.getent 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/systems/eldiron/vpn/tinc/host-down b/systems/eldiron/vpn/tinc/host-down new file mode 100755 index 0000000..1e79bd3 --- /dev/null +++ b/systems/eldiron/vpn/tinc/host-down @@ -0,0 +1,7 @@ +#!/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/systems/eldiron/vpn/tinc/host-up b/systems/eldiron/vpn/tinc/host-up new file mode 100755 index 0000000..2f7cee2 --- /dev/null +++ b/systems/eldiron/vpn/tinc/host-up @@ -0,0 +1,11 @@ +#!/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/systems/eldiron/vpn/tinc/tinc-down b/systems/eldiron/vpn/tinc/tinc-down new file mode 100755 index 0000000..1cc45c0 --- /dev/null +++ b/systems/eldiron/vpn/tinc/tinc-down @@ -0,0 +1,12 @@ +#!/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/systems/eldiron/vpn/tinc/tinc-up b/systems/eldiron/vpn/tinc/tinc-up new file mode 100755 index 0000000..26c1ec3 --- /dev/null +++ b/systems/eldiron/vpn/tinc/tinc-up @@ -0,0 +1,14 @@ +#!/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/systems/eldiron/vpn/tinc/tinc.conf b/systems/eldiron/vpn/tinc/tinc.conf new file mode 100644 index 0000000..7a4f103 --- /dev/null +++ b/systems/eldiron/vpn/tinc/tinc.conf @@ -0,0 +1,11 @@ +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/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html b/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html new file mode 100644 index 0000000..ff6dbf3 --- /dev/null +++ b/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html @@ -0,0 +1 @@ +google-site-verification: googleb6d69446ff4ca3e5.html \ No newline at end of file diff --git a/systems/eldiron/websites/_www/index.htm b/systems/eldiron/websites/_www/index.htm new file mode 100644 index 0000000..0274251 --- /dev/null +++ b/systems/eldiron/websites/_www/index.htm @@ -0,0 +1,9 @@ + + + + Hello World HTML + + +

    It works!

    + + diff --git a/systems/eldiron/websites/_www/maintenance_immae.html b/systems/eldiron/websites/_www/maintenance_immae.html new file mode 100644 index 0000000..90f265f --- /dev/null +++ b/systems/eldiron/websites/_www/maintenance_immae.html @@ -0,0 +1,58 @@ + + + + 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/systems/eldiron/websites/_www/nossl.html b/systems/eldiron/websites/_www/nossl.html new file mode 100644 index 0000000..4401a80 --- /dev/null +++ b/systems/eldiron/websites/_www/nossl.html @@ -0,0 +1,11 @@ + + + + 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/systems/eldiron/websites/assets/default.nix b/systems/eldiron/websites/assets/default.nix new file mode 100644 index 0000000..02a4952 --- /dev/null +++ b/systems/eldiron/websites/assets/default.nix @@ -0,0 +1,98 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.tools.assets; + fetchFont = v: pkgs.runCommand "fetch-font" { + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = v.sha256; + } '' + mkdir -p $out + ${pkgs.curl}/bin/curl -k --output $out/font.css -H "User-Agent: Firefox/100.0" "${v.url}" + cat $out/font.css | grep -o "https://[^ )]*" | while read url; do + filename=$(echo "$url" | sed -e "s@.*/@@g") + ${pkgs.curl}/bin/curl -k --output "$out/$filename" "$url" + sed -i -e "s@$url@./$filename@" "$out/font.css" + done + ''; + fetchTgz = v: pkgs.runCommand "fetch-tgz" { + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = v.sha256; + } '' + mkdir -p $out + cd $out + ${pkgs.curl}/bin/curl -L -k "${v.url}" | tar -xz --strip-components=${builtins.toString v.tgzRemoveComponents} + ''; + fetchAsset = v: + if v.assetType == "googleFont" + then fetchFont v + else if v.assetType == "tgz" + then fetchTgz v + else pkgs.fetchurl { url = v.url; sha256 = v.sha256; }; + assets_urls = lib.mapAttrs (k: fetchAsset) config.myEnv.tools.assets; + assets = pkgs.runCommand "assets" {} ('' + mkdir -p $out + cp -a ${./static}/* $out/ + '' + builtins.concatStringsSep "\n" + (lib.mapAttrsToList (k: v: '' + if [ -d "${v}" ]; then + mkdir -p "$out/$(dirname "${k}")" + cp -a "${v}" "$out/${k}" + chmod -R u+rwX "$out/${k}" + else + install -D -m644 -T "${v}" "$out/${k}" + fi + '') assets_urls)); +in +{ + options.myServices.websites.tools.assets = { + enable = lib.mkEnableOption "Enable assets website"; + }; + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.assets = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + services.websites.env.production.bindMounts."/run/imgproxy" = {}; + security.acme.certs.eldiron.extraDomainNames = [ "assets.immae.eu" ]; + services.websites.env.tools.vhostConfs.assets = { + certName = "eldiron"; + 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 "*" + + + MergeSlashes OFF + + ProxyPass unix:///run/imgproxy/imgproxy.sock|http://assets.immae.eu + ProxyPassReverse unix:///run/imgproxy/imgproxy.sock|http://assets.immae.eu + + '' + ]; + }; + systemd.services.imgproxy = { + description = "IMG proxy"; + wantedBy = [ "multi-user.target" ]; + + environment = { + IMGPROXY_NETWORK = "unix"; + IMGPROXY_BIND = "%t/imgproxy/imgproxy.sock"; + }; + serviceConfig = { + User = "wwwrun"; + Group = "wwwrun"; + RuntimeDirectory = "imgproxy"; + ExecStart = "${pkgs.imgproxy}/bin/imgproxy"; + }; + }; + }; +} diff --git a/systems/eldiron/websites/assets/static/favicon.png b/systems/eldiron/websites/assets/static/favicon.png new file mode 100644 index 0000000..1caf5a4 Binary files /dev/null and b/systems/eldiron/websites/assets/static/favicon.png differ diff --git a/systems/eldiron/websites/assets/static/logger.png b/systems/eldiron/websites/assets/static/logger.png new file mode 100644 index 0000000..d9579fb Binary files /dev/null and b/systems/eldiron/websites/assets/static/logger.png differ diff --git a/systems/eldiron/websites/assets/static/logger.txt b/systems/eldiron/websites/assets/static/logger.txt new file mode 100644 index 0000000..50dccc6 --- /dev/null +++ b/systems/eldiron/websites/assets/static/logger.txt @@ -0,0 +1,3 @@ +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/systems/eldiron/websites/assets/static/logo.jpg b/systems/eldiron/websites/assets/static/logo.jpg new file mode 100644 index 0000000..a89172d Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo.jpg differ diff --git a/systems/eldiron/websites/assets/static/logo.txt b/systems/eldiron/websites/assets/static/logo.txt new file mode 100644 index 0000000..327e62a --- /dev/null +++ b/systems/eldiron/websites/assets/static/logo.txt @@ -0,0 +1,7 @@ +size: 2 +dpi: 72 +background: white +plot_type: fullcolor +center: "whole" +whitespace: 0.5 +format: jpg diff --git a/systems/eldiron/websites/assets/static/logo_big.jpg b/systems/eldiron/websites/assets/static/logo_big.jpg new file mode 100644 index 0000000..45448f2 Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo_big.jpg differ diff --git a/systems/eldiron/websites/assets/static/logo_big.txt b/systems/eldiron/websites/assets/static/logo_big.txt new file mode 100644 index 0000000..ce92c09 --- /dev/null +++ b/systems/eldiron/websites/assets/static/logo_big.txt @@ -0,0 +1,7 @@ +size: 4 +dpi: 72 +background: white +plot_type: fullcolor +center: "whole" +whitespace: 0.5 +format: jpg diff --git a/systems/eldiron/websites/assets/static/logo_center.jpg b/systems/eldiron/websites/assets/static/logo_center.jpg new file mode 100644 index 0000000..6b177e0 Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo_center.jpg differ diff --git a/systems/eldiron/websites/assets/static/logo_center.txt b/systems/eldiron/websites/assets/static/logo_center.txt new file mode 100644 index 0000000..60a8f1c --- /dev/null +++ b/systems/eldiron/websites/assets/static/logo_center.txt @@ -0,0 +1,8 @@ +size: 4 +dpi: 72 +background: white +plot_type: fullcolor +center: "center" +whitespace: 0.5 +format: jpg + diff --git a/systems/eldiron/websites/assets/static/monitoring.png b/systems/eldiron/websites/assets/static/monitoring.png new file mode 100644 index 0000000..0024fee Binary files /dev/null and b/systems/eldiron/websites/assets/static/monitoring.png differ diff --git a/systems/eldiron/websites/assets/static/monitoring.txt b/systems/eldiron/websites/assets/static/monitoring.txt new file mode 100644 index 0000000..9f3e13a --- /dev/null +++ b/systems/eldiron/websites/assets/static/monitoring.txt @@ -0,0 +1,3 @@ +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/systems/eldiron/websites/assets/static/photos/ct.jpg b/systems/eldiron/websites/assets/static/photos/ct.jpg new file mode 100644 index 0000000..ab7876b Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/ct.jpg differ diff --git a/systems/eldiron/websites/assets/static/photos/fretlink.jpg b/systems/eldiron/websites/assets/static/photos/fretlink.jpg new file mode 100644 index 0000000..c941e1d Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/fretlink.jpg differ diff --git a/systems/eldiron/websites/assets/static/photos/raton.jpg b/systems/eldiron/websites/assets/static/photos/raton.jpg new file mode 100644 index 0000000..a859e1c Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/raton.jpg differ diff --git a/systems/eldiron/websites/cloud/add-htaccess.php b/systems/eldiron/websites/cloud/add-htaccess.php new file mode 100644 index 0000000..e11d943 --- /dev/null +++ b/systems/eldiron/websites/cloud/add-htaccess.php @@ -0,0 +1,70 @@ +a = $a; + } + public function getValue($val, $default) { + if(isset($this->a[$val])) { + return $this->a[$val]; + } else { + return $default; + } + } + } +} + +namespace { + class NServer { + private $argv; + public function __construct($argv) { + $this->argv = $argv; + } + public function getSystemConfig() { + return new OC\SystemConfig(Array( + 'htaccess.RewriteBase' => $this->argv[1], + )); + } + + public function get($c) { + return new $c(); + } + public function getL10N() { + return new \OCP\IL10N(); + } + public function query($c) { + return new $c(); + } + public function getSecureRandom() { + return new \OCP\Security\ISecureRandom(); + } + } + + class OC { + public static Bool $CLI = false; + public static $SERVERROOT = '.'; + public static $WEBROOT; + public static \NServer $server; + } + + \OC::$server = new NServer($argv); + \OC::$WEBROOT = $argv[1]; + + require "./lib/private/Setup.php"; + $result = \OC\Setup::updateHtaccess(); + if ($result) { + echo "done"; + }; +} diff --git a/systems/eldiron/websites/cloud/default.nix b/systems/eldiron/websites/cloud/default.nix new file mode 100644 index 0000000..e1df883 --- /dev/null +++ b/systems/eldiron/websites/cloud/default.nix @@ -0,0 +1,151 @@ +{ lib, pkgs, config, ... }: +let + ncfg = config.myServices.tools.cloud.farm.instances.immae; + env = config.myEnv.tools.nextcloud; + cfg = config.myServices.websites.tools.cloud; +in { + options.myServices.websites.tools.cloud = { + enable = lib.mkEnableOption "enable cloud website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.cloud = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.nextcloud = { + file.datetime = "2022-08-21T19:50:00"; + hosting = { + name = "Nextcloud"; + description = "The self-hosted productivity platform that keeps you in control"; + website = "https://cloud.immae.eu/"; + logo = "https://cloud.immae.eu/core/img/favicon.ico"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.nextcloud = { + file.datetime = "2022-08-21T19:50:00"; + service = { + name = "Nextcloud"; + description = "The self-hosted productivity platform that keeps you in control"; + website = "https://cloud.immae.eu/"; + logo = "https://cloud.immae.eu/core/img/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/nextcloud.html"; + }; + software = { + name = "Nextcloud"; + website = "https://nextcloud.com/"; + license.url = "https://github.com/nextcloud/server/blob/master/COPYING"; + license.name = "GNU Affero General Public License v3.0"; + version = ncfg.rootDir.version; + source.url = "https://github.com/nextcloud/server"; + modules = map (a: a.appName) ncfg.rootDir.apps; + }; + }; + + myServices.tools.cloud.farm.instances.immae = { + nextcloud = pkgs.webapps-nextcloud_27.override ({ + # Allow /index.php redirects + postInstall = '' + cd $out + ${pkgs.php81}/bin/php ${./add-htaccess.php} / + ''; + }); + apps = a: [ + a.side_menu a.audioplayer a.bookmarks a.calendar a.carnet a.contacts + a.cookbook a.deck a.extract a.files_markdown a.files_mindmap + a.gpxpod a.keeweb a.maps a.metadata a.music + a.notes a.passman a.polls a.spreed a.tasks + ]; + varDir = "/var/lib/nextcloud"; + secretsPath = "webapps/tools-nextcloud"; + phpPackage = pkgs.php81; + # Be careful when editing that: config from here takes + # precedence over the regular one, but if a key got removed, it my + # still exist in the default config file + config = let + env = config.myEnv.tools.nextcloud; + in { + "dbtype" = "pgsql"; + "dbname" = env.postgresql.database; + "dbhost" = env.postgresql.socket; + "dbport" = ""; + "dbtableprefix" = "oc_"; + "dbuser" = env.postgresql.user; + "dbpassword" = env.postgresql.password; + + "instanceid" = env.instance_id; + "passwordsalt" = env.password_salt; + "secret" = env.secret; + + "trusted_domains" = [ "cloud.immae.eu" ]; + "overwrite.cli.url" = "https://cloud.immae.eu"; + + "lost_password_link" = "disabled"; + + "remember_login_cookie_lifetime" = 60*60*24*30; + "session_keepalive" = true; + "session_lifefime" = 60*60*24*30; + + "maxZipInputSize" = 0; + "allowZipDownload" = true; + + # set by Carnet + "has_rebuilt_cache" = true; + + "memcache.distributed" = "\\OC\\Memcache\\Redis"; + "memcache.locking" = "\\OC\\Memcache\\Redis"; + "filelocking.enabled" = true; + "redis" = { + "host" = env.redis.socket; + "port" = 0; + "dbindex" = env.redis.db; + }; + + "ldapIgnoreNamingRules" = false; + "ldapProviderFactory" = "\\OCA\\User_LDAP\\LDAPProviderFactory"; + + "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"; + }; + }; + services.websites.env.tools.modules = [ "proxy_fcgi" ]; + + security.acme.certs.eldiron.extraDomainNames = [ "cloud.immae.eu" ]; + services.websites.env.tools.vhostConfs.cloud = { + certName = "eldiron"; + hosts = ["cloud.immae.eu" ]; + root = ncfg.rootDir; + extraConfig = [ + ncfg.vhost + ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "owncloud website is running on cloud.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "cloud.immae.eu" "/" "a safe home for all your data"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Nextcloud"; + _webstatus_url = "https://cloud.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/cloud/farm.nix b/systems/eldiron/websites/cloud/farm.nix new file mode 100644 index 0000000..df24cba --- /dev/null +++ b/systems/eldiron/websites/cloud/farm.nix @@ -0,0 +1,221 @@ +{ lib, pkgs, config, ... }: +let + scfg = config.secrets.fullPaths; + cfg = config.myServices.tools.cloud.farm; + apacheUser = config.services.websites.env.production.user; + apacheGroup = config.services.websites.env.production.group; + additionalConfs = icfg: lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) icfg.rootDir.otherConfig; + overrideConfig = icfg: pkgs.writeText "override.config.php" '' + + 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.${icfg.phpPoolName}.socket}|fcgi://localhost" + + +
    + ''; +in +{ + options.myServices.tools.cloud.farm = { + instances = lib.mkOption { + description = "Instances names for the nextcloud Farm"; + default = {}; + type = lib.types.attrsOf (lib.types.submodule ({ name, config, ... }: { + options = { + nextcloud = lib.mkOption { + description = "Nextcloud version to use"; + default = pkgs.webapps-nextcloud_27; + type = lib.types.package; + }; + apps = lib.mkOption { + description = "Applications to use"; + default = a: []; + #type = functionTo (listOf packages) + type = lib.types.unspecified; + }; + config = lib.mkOption { + description = "Config keys"; + default = {}; + type = lib.types.attrsOf lib.types.unspecified; + }; + secretsPath = lib.mkOption { + description = "Path in secrets to nextcloud config file"; + default = "websites/${name}/nextcloud"; + type = lib.types.str; + }; + configOverride = lib.mkOption { + description = "Path to config override"; + readOnly = true; + default = scfg."${config.secretsPath}"; + type = lib.types.path; + }; + phpPackage = lib.mkOption { + description = "PHP package to use"; + default = pkgs.php81; + type = lib.types.package; + apply = v: (v.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache all.imagick all.sysvsem ])).override { extraConfig = '' + apc.enable_cli = 1 + apc.enabled = 1 + ''; + }; + }; + rootDir = lib.mkOption { + description = "Instance root dirs"; + readOnly = true; + type = lib.types.package; + default = config.nextcloud.withApps config.apps; + }; + phpPoolName = lib.mkOption { + description = "Php pool name for the instance"; + readOnly = true; + type = lib.types.str; + default = "nextcloud_farm_" + name; + }; + phpBaseDir = lib.mkOption { + description = "Php basedir for the instance"; + readOnly = true; + type = lib.types.str; + default = builtins.concatStringsSep ":" ( + [ config.rootDir config.varDir ] + ++ config.rootDir.apps + ++ [ config.configOverride (overrideConfig config) ] + ++ (builtins.attrValues (additionalConfs config)) + ); + }; + varDir = lib.mkOption { + description = "Instance var dir"; + type = lib.types.path; + default = "/var/lib/nextcloud_farm/${name}"; + }; + vhost = lib.mkOption { + description = "Instance vhost config"; + readOnly = true; + type = lib.types.str; + default = toVhost config; + }; + }; + })); + }; + }; + + config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) { + systemd.services = lib.mapAttrs' (k: v: lib.nameValuePair ("phpfpm-" + v.phpPoolName) { + after = lib.mkAfter [ "postgresql.service" ]; + wants = [ "postgresql.service" ]; + serviceConfig.ExecStartPre = + "+${pkgs.writeScript "phpfpm-nextcloud-${k}-pre-start" '' + #!${pkgs.stdenv.shell} + + install -m 0755 -o wwwrun -g wwwrun -d ${v.varDir} -d ${v.varDir}/config + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: f: + "ln -sf ${f} ${v.varDir}/config/${n}.json" + ) (additionalConfs v))} + ln -sf ${overrideConfig v} ${v.varDir}/config/override.config.php + ''}"; + }) cfg.instances; + services.phpfpm.pools = lib.mapAttrs' (k: v: lib.nameValuePair v.phpPoolName { + user = apacheUser; + group = apacheGroup; + settings = { + "listen.owner" = apacheUser; + "listen.group" = apacheGroup; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "3"; + "pm.min_spare_servers" = "3"; + "pm.max_spare_servers" = "3"; + "pm.process_idle_timeout" = "60"; + + "php_admin_value[output_buffering]" = "0"; + "php_admin_value[max_execution_time]" = "1800"; + "php_admin_value[zend_extension]" = "opcache"; + "php_value[apc.enable_cli]" = "1"; + "php_value[apc.enabled]" = "1"; + #already enabled by default? + #"php_value[opcache.enable]" = "1"; + "php_value[opcache.enable_cli]" = "1"; + "php_value[opcache.interned_strings_buffer]" = "32"; + "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:${v.phpBaseDir}:/proc/cpuinfo:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:NextcloudFarm:${k}:'"; + }; + phpPackage = v.phpPackage; + }) cfg.instances; + environment.systemPackages = let + toOcc = name: icfg: pkgs.writeScriptBin "nextcloud-occ-${name}" '' + #! ${pkgs.stdenv.shell} + cd ${icfg.rootDir} + NEXTCLOUD_CONFIG_DIR="${icfg.varDir}/config" \ + exec \ + sudo -E -u wwwrun ${icfg.phpPackage}/bin/php \ + -d memory_limit=512M \ + -c ${icfg.phpPackage}/etc/php.ini \ + occ $* + ''; + in lib.mapAttrsToList toOcc cfg.instances; + services.cron = { + enable = true; + systemCronJobs = let + toScript = name: icfg: 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="${icfg.varDir}/config" + ${icfg.phpPackage}/bin/php -c ${icfg.phpPackage}/etc/php.ini -d memory_limit=512M -f ${icfg.rootDir}/cron.php + ''; + toLine = name: icfg: '' + */5 * * * * wwwrun ${toScript name icfg}/bin/nextcloud-cron + ''; + in lib.mapAttrsToList toLine cfg.instances; + }; + + secrets.keys = lib.mapAttrs' (name: v: lib.nameValuePair "${v.secretsPath}" { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0600"; + # Be careful when editing that: config from this file takes + # precedence over the regular one, but if a key got removed, it my + # still exist in the default config file + text = builtins.toJSON ( { + "datadirectory" = if name == "immae" then v.varDir else "${v.varDir}/data"; + + "appstoreenabled" = false; + "integrity.check.disabled" = true; + "updater.release.channel" = "stable"; + "upgrade.disable-web" = true; + + "memcache.local" = "\\OC\\Memcache\\APCu"; + + "htaccess.RewriteBase" = "/"; + + "loglevel" = 2; + "logtimezone" = "Europe/Paris"; + + "default_phone_region" = "FR"; + "skeletondirectory" = ""; + "theme" = ""; + } // v.config); + }) cfg.instances; + }; +} diff --git a/systems/eldiron/websites/commento/default.nix b/systems/eldiron/websites/commento/default.nix new file mode 100644 index 0000000..c5131b8 --- /dev/null +++ b/systems/eldiron/websites/commento/default.nix @@ -0,0 +1,84 @@ +{ 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 { + myServices.dns.zones."immae.eu".subdomains.commento = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.commento = { + file.datetime = "2022-08-21T01:11:00"; + service = { + name = "Commento"; + description = "Commento is a fast, privacy-focused commenting platform"; + website = "https://commento.immae.eu"; + logo = "https://commento.immae.eu/images/logo.svg"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Commento"; + website = "https://www.commento.io/"; + license.url = "https://gitlab.com/commento/commento/-/blob/master/LICENSE"; + license.name = "MIT License"; + version = pkgs.commento.version; + source.url = "https://gitlab.com/commento/commento"; + }; + }; + 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} + ''; + }; + }; + + security.acme.certs.eldiron.extraDomainNames = [ "commento.immae.eu" ]; + services.websites.env.tools.vhostConfs.commento = { + certName = "eldiron"; + 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/systems/eldiron/websites/cryptpad/default.nix b/systems/eldiron/websites/cryptpad/default.nix new file mode 100644 index 0000000..4635548 --- /dev/null +++ b/systems/eldiron/websites/cryptpad/default.nix @@ -0,0 +1,89 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.myServices.websites.tools.cryptpad; + envCfg = config.myEnv.tools.cryptpad; + 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.dns.zones."immae.eu".subdomains.cryptpad = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.cryptpad = { + file.datetime = "2022-08-21T01:20:00"; + hosting = { + name = "Cryptpad"; + description = "Collaboration suite, encrypted and open-source"; + website = "https://cryptpad.immae.eu/"; + logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.cryptpad = { + file.datetime = "2022-08-21T01:20:00"; + service = { + name = "Cryptpad"; + description = "Collaboration suite, encrypted and open-source"; + website = "https://cryptpad.immae.eu/"; + logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "FREE" "MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Cryptpad"; + website = "https://cryptpad.org/"; + license.url = "https://github.com/xwiki-labs/cryptpad/blob/main/LICENSE"; + license.name = "GNU Affero General Public License v3.0"; + version = pkgs.cryptpad.version; + source.url = "https://github.com/xwiki-labs/cryptpad"; + }; + }; + myServices.tools.cryptpad.farm.hosts.immaeEu = { + inherit domain port; + config = configFile; + }; + services.websites.env.tools.modules = [ "proxy_wstunnel" ]; + security.acme.certs.eldiron.extraDomainNames = [ domain ]; + services.websites.env.tools.vhostConfs.cryptpad = { + certName = "eldiron"; + hosts = [domain]; + root = config.myServices.tools.cryptpad.farm.vhostRoots.immaeEu; + extraConfig = [ + config.myServices.tools.cryptpad.farm.vhosts.immaeEu + ]; + }; + }; +} diff --git a/systems/eldiron/websites/cryptpad/farm.nix b/systems/eldiron/websites/cryptpad/farm.nix new file mode 100644 index 0000000..58393ab --- /dev/null +++ b/systems/eldiron/websites/cryptpad/farm.nix @@ -0,0 +1,186 @@ +{ 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; + }; + vhostVarDirs = lib.mkOption { + description = "Instance vhosts var dirs"; + readOnly = true; + type = lib.types.attrsOf lib.types.path; + default = lib.genAttrs (builtins.attrNames cfg.hosts) (n: "/var/lib/cryptpad/${n}"); + }; + }; + 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/systems/eldiron/websites/dav/davical.nix b/systems/eldiron/websites/dav/davical.nix new file mode 100644 index 0000000..b418cb8 --- /dev/null +++ b/systems/eldiron/websites/dav/davical.nix @@ -0,0 +1,128 @@ +{ stdenv, fetchurl, gettext, writeText, env, awl, davical, config }: +rec { + 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"; + "php_admin_value[include_path]" = "${awl}/inc:${webapp}/inc"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools: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/systems/eldiron/websites/dav/default.nix b/systems/eldiron/websites/dav/default.nix new file mode 100644 index 0000000..109715d --- /dev/null +++ b/systems/eldiron/websites/dav/default.nix @@ -0,0 +1,140 @@ +{ 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; + davical = pkgs.webapps-davical; + awl = pkgs.webapps-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 { + myServices.dns.zones."immae.eu".subdomains.dav = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services = { + davical = { + file.datetime = "2022-08-21T01:33:00"; + service = { + name = "Davical"; + description = "DAViCal is a server for calendar sharing"; + website = "https://dav.immae.eu"; + logo = "https://www.davical.org/images/logo.gif"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Davical"; + website = "https://www.davical.org/"; + license.url = "https://gitlab.com/davical-project/davical/-/blob/master/COPYING"; + license.name = "GNU General Public License Version 2"; + version = pkgs.webapps-davical.version; + source.url = "https://gitlab.com/davical-project/davical/"; + modules = "infcloud"; + }; + }; + #calendar = { + # file.datetime = "2022-08-22T00:00:00"; + # service = { + # name = "Calendar"; + # description = "Opensource CalDAV web client"; + # website = "https://dav.immae.eu/caldavzap/"; + # logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "InfCloud"; + # website = "https://inf-it.com/open-source/clients/infcloud/"; + # license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html"; + # license.name = "GNU Affero General Public License (version 3.0)"; + # version = pkgs.webapps-infcloud.version; + # source.url = "https://inf-it.com/open-source/clients/infcloud/"; + # }; + #}; + #contacts = { + # file.datetime = "2022-08-22T00:00:00"; + # service = { + # name = "Contacts"; + # description = "Opensource Carddav web client"; + # website = "https://dav.immae.eu/carddavmate/"; + # logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "InfCloud"; + # website = "https://inf-it.com/open-source/clients/infcloud/"; + # license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html"; + # license.name = "GNU Affero General Public License (version 3.0)"; + # version = pkgs.webapps-infcloud.version; + # source.url = "https://inf-it.com/open-source/clients/infcloud/"; + # }; + #}; + }; + secrets.keys = davical.keys; + services.websites.env.tools.modules = davical.apache.modules; + + security.acme.certs.eldiron.extraDomainNames = [ "dav.immae.eu" ]; + services.websites.env.tools.vhostConfs.dav = { + certName = "eldiron"; + 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.websites.env.tools.user; + group = config.services.websites.env.tools.group; + settings = davical.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "davical website is running on dav.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "dav.immae.eu" "/davical/" "Log On Please"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Davical"; + _webstatus_url = "https://dav.immae.eu/davical"; + } + ]; + }; +} + diff --git a/systems/eldiron/websites/dav/www/index.html b/systems/eldiron/websites/dav/www/index.html new file mode 100644 index 0000000..91c25ba --- /dev/null +++ b/systems/eldiron/websites/dav/www/index.html @@ -0,0 +1,42 @@ + + + + + + Dav configuration + + + +

    + Dav configuration: +

      +
    • Server: https://dav.immae.eu/caldav.php +
    • +
    +

    +

    Clients: +

    +

    + + + diff --git a/systems/eldiron/websites/db/default.nix b/systems/eldiron/websites/db/default.nix new file mode 100644 index 0000000..339948f --- /dev/null +++ b/systems/eldiron/websites/db/default.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, ... }: +let + 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 = [ "proxy_fcgi" ]; + security.acme.certs.eldiron.extraDomainNames = [ "db-1.immae.eu" ]; + services.websites.env.tools.vhostConfs.db-1 = { + certName = "eldiron"; + hosts = ["db-1.immae.eu" ]; + root = null; + extraConfig = [ '' + Alias /adminer ${pkgs.webapps-adminer} + + DirectoryIndex index.php + + SetHandler "proxy:unix:${config.services.phpfpm.pools.adminer.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/systems/eldiron/websites/default.nix b/systems/eldiron/websites/default.nix new file mode 100644 index 0000000..68205de --- /dev/null +++ b/systems/eldiron/websites/default.nix @@ -0,0 +1,319 @@ +{ lib, pkgs, config, mypackages-lib, ... }: +let + www_root = ./_www; + theme_root = (mypackages-lib.apache-theme {}).theme; + apacheConfig = { + shutdownconfig = { + # Only give 5 seconds to workers to finish their work + extraConfig = '' + GracefulShutdownTimeout 5 + ''; + }; + 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 = (mypackages-lib.apache-theme { 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 +{ + imports = [ + ./immae/production.nix + ./immae/release.nix + + # Tools + ./assets + ./cloud + ./cloud/farm.nix + ./cryptpad + ./cryptpad/farm.nix + ./commento + ./dav + ./vpn + ./db + ./diaspora + ./ether + ./git + ./im + ./mastodon + ./mgoblin + ./peertube + ./performance + ./tools + ./mail + ./stats + ./visio + ./kanboard/farm.nix + + # Games + ./games/codenames + ./games/terraforming-mars + ]; + + options.myServices.websites.enable = lib.mkEnableOption "enable websites"; + + config = lib.mkIf config.myServices.websites.enable { + myServices.dns.zones."immae.eu".subdomains = with config.myServices.dns.helpers; + { + games = ips servers.eldiron.ips.main; + nossl = ips servers.eldiron.ips.main; + }; + + myServices.chatonsProperties.hostings.web = { + file.datetime = "2022-08-22T01:30:00"; + hosting = { + name = "Hébergement Web"; + description = "Service d'hébergement web avec php/mysql/postgresql"; + website = "https://www.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Apache Httpd"; + website = "https://httpd.apache.org/"; + license.url = "https://www.apache.org/licenses/"; + license.name = "Apache License Version 2"; + version = pkgs.apacheHttpd.version; + source.url = "https://httpd.apache.org/download.cgi"; + modules = "openssh,pure-ftpd"; + }; + }; + 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.websites.env.production = { + enable = true; + moduleType = "container"; + adminAddr = "httpd@immae.eu"; + bindMounts."/var/lib/ftp" = {}; + # FIXME: Bind directly the needed files + bindMounts."/var/secrets" = {}; + bindMounts."/var/lib/goaccess" = {}; + bindMounts."/var/lib/acme" = {}; + bindMounts."/run/phpfpm" = {}; + ips = + let ips = config.myEnv.servers.eldiron.ips.production; + in (ips.ip4 or []) ++ (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; + moduleType = "container"; + adminAddr = "httpd@immae.eu"; + bindMounts."/var/lib/ftp" = {}; + bindMounts."/var/secrets" = {}; + bindMounts."/var/lib/goaccess" = {}; + bindMounts."/var/lib/acme" = {}; + bindMounts."/run/phpfpm" = {}; + ips = + let ips = config.myEnv.servers.eldiron.ips.integration; + in (ips.ip4 or []) ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig ++ moomin; + fallbackVhost = { + certName = "integration"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + watchPaths = [ config.secrets.fullPaths."apache-ldap" ]; + }; + + services.websites.env.tools = { + enable = true; + moduleType = "main"; + adminAddr = "httpd@immae.eu"; + ips = + let ips = config.myEnv.servers.eldiron.ips.main; + in (ips.ip4 or []) ++ (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"; + root = ./nossl; + }; + fallbackVhost = { + certName = "eldiron"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + watchPaths = [ config.secrets.fullPaths."apache-ldap" ]; + }; + + myServices.websites = { + immae = { + production.enable = true; + release.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; + tools.visio.enable = true; + + games.codenames.enable = true; + games.terraforming-mars.enable = true; + }; + }; +} diff --git a/systems/eldiron/websites/diaspora/default.nix b/systems/eldiron/websites/diaspora/default.nix new file mode 100644 index 0000000..c536446 --- /dev/null +++ b/systems/eldiron/websites/diaspora/default.nix @@ -0,0 +1,224 @@ +{ 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 { + myServices.dns.zones."immae.eu".subdomains.diaspora = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.diaspora = { + file.datetime = "2022-08-21T01:39:00"; + service = { + name = "Diaspora"; + description = "The online social world where you are in control"; + website = "https://diaspora.immae.eu"; + logo = "https://diaspora.immae.eu/assets/apple-touch-icon-9f7c9cc3923b4817fbb25bfeb0dd5fd34638827fd9c82b5a03f7b68e6e90806f.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Diaspora*"; + website = "https://diasporafoundation.org/"; + license.url = "https://github.com/diaspora/diaspora/blob/develop/LICENSE"; + license.name = "GNU Affero General Public License v3.0"; + version = dcfg.package.version; + source.url = "https://github.com/diaspora/diaspora"; + }; + }; + 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"; + keyDependencies = [ pkgs.cacert ]; + 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; + withLdap = 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" + ]; + security.acme.certs.eldiron.extraDomainNames = [ "diaspora.immae.eu" ]; + services.websites.env.tools.vhostConfs.diaspora = { + certName = "eldiron"; + 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 + + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "diaspora website is running on diaspora.immae.eu"; + host_name = config.hostEnv.fqdn; + 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/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/ether/default.nix b/systems/eldiron/websites/ether/default.nix new file mode 100644 index 0000000..3993553 --- /dev/null +++ b/systems/eldiron/websites/ether/default.nix @@ -0,0 +1,251 @@ +{ lib, pkgs, config, nixpkgsRaw, etherpad-lite, ... }: +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 = nixpkgsRaw.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 { + myServices.dns.zones."immae.eu".subdomains.ether = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.etherpad = { + file.datetime = "2021-01-04T00:01:00"; + service = { + name = "Etherpad"; + description = "Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément."; + website = "https://ether.immae.eu"; + logo = "https://ether.immae.eu/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Etherpad"; + website = "https://etherpad.org/"; + license.url = "https://github.com/ether/etherpad-lite/blob/develop/LICENSE"; + license.name = "Apache License Version 2.0"; + version = ecfg.package.version; + source.url = "https://github.com/ether/etherpad-lite"; + modules = ecfg.package.moduleNames; + }; + }; + 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"; + keyDependencies = [ libreoffice ]; + 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" : false, + "maxAge" : 21600, + "abiword" : null, + "soffice" : "${libreoffice}/bin/soffice", + "tidyHtml" : "", + "allowUnknownFileEnds" : true, + "requireAuthentication" : false, + "requireAuthorization" : false, + "trustProxy" : true, + "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 = 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"; + systemd.services.etherpad-lite-cleanup.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" + ]; + security.acme.certs.eldiron.extraDomainNames = [ "ether.immae.eu" ]; + services.websites.env.tools.vhostConfs.etherpad-lite = { + certName = "eldiron"; + 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 + + 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 + + + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "etherpad website is running on ether.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "ether.immae.eu" "/" "Etherpad"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Etherpad"; + _webstatus_url = "https://ether.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/games/codenames/codenames.patch b/systems/eldiron/websites/games/codenames/codenames.patch new file mode 100644 index 0000000..9faf069 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/codenames.patch @@ -0,0 +1,8306 @@ +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/systems/eldiron/websites/games/codenames/default.nix b/systems/eldiron/websites/games/codenames/default.nix new file mode 100644 index 0000000..7f09cc3 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/default.nix @@ -0,0 +1,76 @@ +{ 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 { + myServices.dns.zones."immae.eu".subdomains.games.subdomains.codenames = with config.myServices.dns.helpers; + ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.codenames = { + file.datetime = "2022-08-27T14:08:00"; + service = { + name = "Codenames Green"; + description = "Co-op codenames app"; + website = "https://codenames.games.immae.eu/"; + logo = "https://codenames.games.immae.eu/images/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Codenames Green"; + website = "https://www.codenamesgreen.com/"; + license.url = "https://github.com/jbowens/codenamesgreen/blob/master/package.json"; + license.name = "MIT"; + version = greenapid.version; + source.url = "https://github.com/jbowens/codenamesgreen"; + }; + }; + 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; + }; + }; + + security.acme.certs.games.domain = "games.immae.eu"; + security.acme.certs.games.extraDomainNames = [ "codenames.games.immae.eu" ]; + services.websites.env.tools.vhostConfs.games_codenames = { + certName = "games"; + 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/ + + <Directory ${frontend}> + FallbackResource index.html + </Directory> + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/games/codenames/deps.nix b/systems/eldiron/websites/games/codenames/deps.nix new file mode 100644 index 0000000..fddec2e --- /dev/null +++ b/systems/eldiron/websites/games/codenames/deps.nix @@ -0,0 +1,11 @@ +[ + { + goPackagePath = "github.com/jbowens/dictionary"; + fetch = { + type = "git"; + url = "https://github.com/jbowens/dictionary"; + rev = "229cf68df1a675e7a2462c4028d7df4abfd98854"; + sha256 = "0gyg3xcx4xqx6w8id2dq5s280mdfhs6yc9flg2jbj8jff040s28w"; + }; + } +] diff --git a/systems/eldiron/websites/games/codenames/elm-srcs.nix b/systems/eldiron/websites/games/codenames/elm-srcs.nix new file mode 100644 index 0000000..031e7ff --- /dev/null +++ b/systems/eldiron/websites/games/codenames/elm-srcs.nix @@ -0,0 +1,77 @@ +{ + + "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/systems/eldiron/websites/games/codenames/frontend.nix b/systems/eldiron/websites/games/codenames/frontend.nix new file mode 100644 index 0000000..0f29070 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/frontend.nix @@ -0,0 +1,22 @@ +{ 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/systems/eldiron/websites/games/codenames/greenapid.nix b/systems/eldiron/websites/games/codenames/greenapid.nix new file mode 100644 index 0000000..52bda3b --- /dev/null +++ b/systems/eldiron/websites/games/codenames/greenapid.nix @@ -0,0 +1,18 @@ +{ 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/systems/eldiron/websites/games/codenames/greenapid.patch b/systems/eldiron/websites/games/codenames/greenapid.patch new file mode 100644 index 0000000..21a9fad --- /dev/null +++ b/systems/eldiron/websites/games/codenames/greenapid.patch @@ -0,0 +1,39 @@ +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/systems/eldiron/websites/games/codenames/immae-assets.patch b/systems/eldiron/websites/games/codenames/immae-assets.patch new file mode 100644 index 0000000..c53ab97 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/immae-assets.patch @@ -0,0 +1,15 @@ +diff --git a/src/index.html b/src/index.html +index 2559a37..84a0d64 100644 +--- a/src/index.html ++++ b/src/index.html +@@ -6,8 +6,8 @@ + <meta name="description" content="Online cooperative codenames game. Play with two or more players."> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> + <meta name="theme-color" content="#ffffff"> +- <link href="https://fonts.googleapis.com/css?family=Exo+2&display=swap" rel="stylesheet"> +- <link href="https://unpkg.com/ionicons@4.5.10-0/dist/css/ionicons.min.css" rel="stylesheet"> ++ <link href="https://assets.immae.eu/fonts/Exo2_swap/font.css" rel="stylesheet"> ++ <link href="https://assets.immae.eu/ionicons/4.5.10-0/dist/css/ionicons.min.css" rel="stylesheet"> + <link rel="manifest" href="/codenames.manifest"> + <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png"> diff --git a/systems/eldiron/websites/games/codenames/node-packages.nix b/systems/eldiron/websites/games/codenames/node-packages.nix new file mode 100644 index 0000000..1fb2db3 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/node-packages.nix @@ -0,0 +1,7622 @@ +# 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} + patch -p1 < ${./immae-assets.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/systems/eldiron/websites/games/codenames/registry.dat b/systems/eldiron/websites/games/codenames/registry.dat new file mode 100644 index 0000000..a8585a8 Binary files /dev/null and b/systems/eldiron/websites/games/codenames/registry.dat differ diff --git a/systems/eldiron/websites/games/codenames/shell.nix b/systems/eldiron/websites/games/codenames/shell.nix new file mode 100644 index 0000000..053696b --- /dev/null +++ b/systems/eldiron/websites/games/codenames/shell.nix @@ -0,0 +1,50 @@ +{ pkgs ? import <nixpkgs> {} }: 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/systems/eldiron/websites/games/codenames/wordlists/french.txt b/systems/eldiron/websites/games/codenames/wordlists/french.txt new file mode 100644 index 0000000..462ddc4 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/wordlists/french.txt @@ -0,0 +1,694 @@ +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/systems/eldiron/websites/games/terraforming-mars/default.nix b/systems/eldiron/websites/games/terraforming-mars/default.nix new file mode 100644 index 0000000..e90e72f --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/default.nix @@ -0,0 +1,75 @@ +{ 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 { + myServices.dns.zones."immae.eu".subdomains.games.subdomains.terraforming-mars = with config.myServices.dns.helpers; + ips servers.eldiron.ips.main; + myServices.chatonsProperties.services.terraforming-mars = { + file.datetime = "2022-08-27T14:20:00"; + service = { + name = "Terraforming Mars"; + description = "Terraforming Mars Boardgame"; + website = "https://terraforming-mars.games.immae.eu/"; + logo = "https://terraforming-mars.games.immae.eu/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Terraforming Mars"; + website = "https://github.com/terraforming-mars/terraforming-mars"; + license.url = "https://github.com/terraforming-mars/terraforming-mars/blob/main/LICENSE"; + license.name = "GNU General Public License v3.0"; + version = "unversionned"; + source.url = "https://github.com/terraforming-mars/terraforming-mars"; + }; + }; + systemd.services.terraforming-mars = { + path = [ pkgs.nodejs_16 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 + ''; + environment.NPM_CONFIG_LOGS_DIR = "%S/terraforming-mars/npm_logs"; + environment.NPM_CONFIG_CACHE = "%S/terraforming-mars/npm_cache"; + serviceConfig = { + User = "terraformingmars"; + DynamicUser = true; + SupplementaryGroups = [ "wwwrun" ]; + Type = "simple"; + WorkingDirectory = terraforming-mars; + RuntimeDirectory = "terraforming-mars"; + StateDirectory = "terraforming-mars"; + }; + }; + + security.acme.certs.games.extraDomainNames = [ "terraforming-mars.games.immae.eu" ]; + security.acme.certs.games.domain = "games.immae.eu"; + services.websites.env.tools.vhostConfs.games_terraforming-mars = { + certName = "games"; + 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/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch b/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch new file mode 100644 index 0000000..684a7df --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch @@ -0,0 +1,13 @@ +diff --git a/assets/index.html b/assets/index.html +index 220192834..d77a0fc80 100644 +--- a/assets/index.html ++++ b/assets/index.html +@@ -2,7 +2,7 @@ + <html> + <head> + <link +- href="https://fonts.googleapis.com/css?family=Ubuntu&display=swap" ++ href="https://assets.immae.eu/fonts/Ubuntu_swap/font.css" + rel="stylesheet" + /> + <link rel="stylesheet" type="text/css" media="all" href="/styles.css" /> diff --git a/systems/eldiron/websites/games/terraforming-mars/node-packages.nix b/systems/eldiron/websites/games/terraforming-mars/node-packages.nix new file mode 100644 index 0000000..e5fac49 --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/node-packages.nix @@ -0,0 +1,4353 @@ +# 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/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix b/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix new file mode 100644 index 0000000..f190221 --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix @@ -0,0 +1,39 @@ +{ fetchgit, runCommand, callPackage, mylibs, nodePackages, nodejs_16, 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 { nodejs = nodejs_16; }; + globalBuildInputs = [ nodejs_16.pkgs.node-pre-gyp ]; + }; + terraforming-mars = runCommand "terraforming-mars" { + buildInputs = [ nodejs_16 git ]; + } '' + cp -r ${source} ./source + chmod -R u+w source + cd source + patch -p1 < ${./immae-assets.patch} + ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules . + # See https://stackoverflow.com/questions/74548318/how-to-resolve-error-error0308010cdigital-envelope-routinesunsupported-no + export NODE_OPTIONS=--openssl-legacy-provider + 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/systems/eldiron/websites/git/cgit_js.html b/systems/eldiron/websites/git/cgit_js.html new file mode 100644 index 0000000..4101071 --- /dev/null +++ b/systems/eldiron/websites/git/cgit_js.html @@ -0,0 +1,16 @@ +<script src="https://assets.immae.eu/jquery/3.5.1/jquery.min.js"></script> +<script type="application/javascript"> + $(document).ready(function() { + const linksObject = { + "/github/fretlink": "Fretlink Open-source Github forks", + "/github": "Github forks", + "/perso/Denise": "Denise", + "/perso/Immae": "Immae", + } + function toRow(href, name) { + return `<a href='/cgit${href}'>${name}</a>`; + } + const links = Object.keys(linksObject).map(function(k) { return toRow(k, linksObject[k]); }).join(""); + $("table.tabs a.active[href='/cgit/']").after(links); + }); +</script> diff --git a/systems/eldiron/websites/git/default.nix b/systems/eldiron/websites/git/default.nix new file mode 100644 index 0000000..46ba34d --- /dev/null +++ b/systems/eldiron/websites/git/default.nix @@ -0,0 +1,98 @@ +{ lib, pkgs, config, ... }: +let + mantisbt = pkgs.callPackage ./mantisbt.nix { + mantisbt_2 = pkgs.webapps-mantisbt_2; + mantisbt_2-plugins = pkgs.webapps-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 { + myServices.chatonsProperties.services.mantisbt = { + file.datetime = "2022-08-21T10:08:00"; + service = { + name = "MantisBT"; + description = "Mantis Bug Tracker"; + website = "https://git.immae.eu/mantisbt"; + logo = "https://git.immae.eu/mantisbt/images/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/forge-logicielle.html"; + }; + software = { + name = "MantisBT"; + website = "https://mantisbt.org/"; + license.url = "https://opensource.org/licenses/gpl-license"; + license.name = "GNU General Public License"; + version = mantisbt.webRoot.version; + source.url = "https://github.com/mantisbt/mantisbt"; + modules = mantisbt.webRoot.pluginNames; + }; + }; + secrets.keys = mantisbt.keys; + services.websites.env.tools.modules = + gitweb.apache.modules ++ + mantisbt.apache.modules; + + security.acme.certs.eldiron.extraDomainNames = [ "git.immae.eu" ]; + services.websites.env.tools.vhostConfs.git = { + certName = "eldiron"; + 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.websites.env.tools.user; + group = config.services.websites.env.tools.group; + settings = mantisbt.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "gitweb website is running on git.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "git.immae.eu" "/cgit" "<title>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 = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "git.immae.eu" "/mantisbt/" "<title>My View - MantisBT"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Mantisbt"; + _webstatus_url = "https://git.immae.eu/mantisbt"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/git/gitweb.nix b/systems/eldiron/websites/git/gitweb.nix new file mode 100644 index 0000000..40f99e0 --- /dev/null +++ b/systems/eldiron/websites/git/gitweb.nix @@ -0,0 +1,124 @@ +{ 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 + head-include=${./cgit_js.html} + + 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 + + <Directory "${git}/libexec/git-core"> + Require all granted + </Directory> + <Directory "${root}"> + DirectoryIndex gitweb.cgi + Require all granted + AllowOverride None + Options ExecCGI FollowSymLinks + <Files gitweb.cgi> + SetHandler cgi-script + SetEnv GITWEB_CONFIG "${config}" + </Files> + </Directory> + + SetEnv CGIT_CONFIG ${cgitConfig} + ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/" + Alias /cgit-css "${cgit}/cgit" + <Directory "${cgit}/cgit/"> + AllowOverride None + Options ExecCGI FollowSymlinks + Require all granted + </Directory> + + RewriteEngine On + RewriteCond %{QUERY_STRING} ^$ + RewriteRule ^/?$ /cgit [L,R=302] + + RewriteCond %{REQUEST_URI} ^(.*)(\.git)?/?$ + RewriteCond ${varDir}/repositories/%1.git/HEAD -f + RewriteRule ^(.+)$ /cgit$1 [L,R=302] + ''; + }; +} diff --git a/systems/eldiron/websites/git/mantisbt.nix b/systems/eldiron/websites/git/mantisbt.nix new file mode 100644 index 0000000..3bd78e1 --- /dev/null +++ b/systems/eldiron/websites/git/mantisbt.nix @@ -0,0 +1,86 @@ +{ env, mantisbt_2, mantisbt_2-plugins, config }: +rec { + keys."webapps/tools-mantisbt" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + <?php + $g_hostname = '${env.postgresql.socket}'; + $g_db_username = '${env.postgresql.user}'; + $g_db_password = '${env.postgresql.password}'; + $g_database_name = '${env.postgresql.database}'; + $g_db_type = 'pgsql'; + $g_crypto_master_salt = '${env.master_salt}'; + $g_allow_signup = OFF; + $g_allow_anonymous_login = ON; + $g_anonymous_account = 'anonymous'; + + $g_phpMailer_method = PHPMAILER_METHOD_SENDMAIL; + $g_smtp_host = 'localhost'; + $g_smtp_username = '''; + $g_smtp_password = '''; + $g_webmaster_email = 'mantisbt@tools.immae.eu'; + $g_from_email = 'mantisbt@tools.immae.eu'; + $g_return_path_email = 'mantisbt@tools.immae.eu'; + $g_from_name = 'Mantis Bug Tracker at git.immae.eu'; + $g_email_receive_own = ON; + # --- LDAP --- + $g_login_method = LDAP; + $g_ldap_protocol_version = 3; + $g_ldap_server = 'ldaps://${env.ldap.host}:636'; + $g_ldap_root_dn = 'ou=users,${env.ldap.base}'; + $g_ldap_bind_dn = '${env.ldap.dn}'; + $g_ldap_bind_passwd = '${env.ldap.password}'; + $g_use_ldap_email = ON; + $g_use_ldap_realname = ON; + $g_ldap_uid_field = 'uid'; + $g_ldap_realname_field = 'cn'; + $g_ldap_organization = '${env.ldap.filter}'; + ''; + }; + webRoot = (mantisbt_2.override { mantis_config = config.secrets.fullPaths."webapps/tools-mantisbt"; }).withPlugins (p: [p.slack p.source-integration]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /mantisbt "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + Options FollowSymlinks + Require all granted + </Directory> + <Directory "${root}/admin"> + #Reenable during upgrade + Require all denied + </Directory> + ''; + }; + 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"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:MantisBT:'"; + }; + }; +} diff --git a/systems/eldiron/websites/im/default.nix b/systems/eldiron/websites/im/default.nix new file mode 100644 index 0000000..7755a5c --- /dev/null +++ b/systems/eldiron/websites/im/default.nix @@ -0,0 +1,118 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.myServices.websites.tools.im; + converseVersion = "9.1.1"; + www = pkgs.runCommand "www" {} '' + cp -a ${./www} $out + substituteInPlace $out/converse.html --replace {{converseVersion}} ${converseVersion} + ''; +in +{ + options.myServices.websites.tools.im = { + enable = lib.mkEnableOption "enable im website"; + }; + + config = lib.mkIf cfg.enable { + myServices.chatonsProperties.services.converse = { + file.datetime = "2022-08-21T19:20:00"; + service = { + name = "Converse"; + description = "A free and open-source XMPP chat client in your browser"; + website = "https://im.immae.fr/converse"; + logo = "https://conversejs.org/docs/html/_static/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "FREE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Converse"; + website = "https://conversejs.org/"; + license.name = "Mozilla Public License 2.0"; + license.url = "https://github.com/conversejs/converse.js/blob/master/LICENSE"; + version = "9.1.1"; + source.url = "https://github.com/conversejs/converse.js"; + }; + }; + myServices.chatonsProperties.services.weechat-bridge = { + file.datetime = "2022-08-21T19:20:00"; + service = { + name = "Weechat bridge"; + description = "WeeChat web frontend"; + website = "https://im.immae.fr/glowing-bear"; + logo = "https://im.immae.fr/glowing-bear/assets/img/glowing_bear_128x128.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "FREE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Glowing bear"; + website = "https://www.ejabberd.im/"; + license.name = "GNU General Public License v3.0"; + license.url = "https://github.com/processone/ejabberd"; + version = pkgs.glowing-bear.version; + source.url = "https://github.com/glowing-bear/glowing-bear"; + }; + }; + myServices.chatonsProperties.services.xmpp = { + file.datetime = "2022-08-21T19:20:00"; + service = { + name = "XMPP"; + description = "Universal messaging standard"; + website = "https://im.immae.fr/"; + logo = "https://xmpp.org/favicon-32x32.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "ejabberd"; + website = "https://www.ejabberd.im/"; + license.url = "https://github.com/processone/ejabberd/blob/master/COPYING"; + license.name = "GNU GENERAL PUBLIC LICENSE Version 2"; + version = pkgs.ejabberd.version; + source.url = "https://github.com/processone/ejabberd"; + modules = "converse"; + }; + }; + security.acme.certs.eldiron.extraDomainNames = [ "im.immae.fr" ]; + services.websites.env.tools.vhostConfs.im = { + certName = "eldiron"; + hosts = ["im.immae.fr"]; + root = www; + extraConfig = [ + '' + Alias /glowing-bear ${pkgs.glowing-bear} + Alias /converse ${www}/converse.html + ProxyPreserveHost On + <Location "/bosh"> + ProxyPass http://localhost:5280/bosh + ProxyPassReverse http://localhost:5280/bosh + </Location> + <Location "/ws"> + ProxyPass ws://localhost:5280/ws + </Location> + 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 + <Directory ${pkgs.glowing-bear}> + AllowOverride none + Require all granted + </Directory> + <Directory ${www}> + Require all granted + AllowOverride none + </Directory> + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/im/www/converse.html b/systems/eldiron/websites/im/www/converse.html new file mode 100644 index 0000000..4ca451d --- /dev/null +++ b/systems/eldiron/websites/im/www/converse.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <title>Converse + + + + + + + + + + + + + + + + + + diff --git a/systems/eldiron/websites/im/www/index.html b/systems/eldiron/websites/im/www/index.html new file mode 100644 index 0000000..90c5458 --- /dev/null +++ b/systems/eldiron/websites/im/www/index.html @@ -0,0 +1,47 @@ + + + + + + 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/systems/eldiron/websites/immae/matrix/client b/systems/eldiron/websites/immae/matrix/client new file mode 100644 index 0000000..89136a0 --- /dev/null +++ b/systems/eldiron/websites/immae/matrix/client @@ -0,0 +1,11 @@ +{ + "m.homeserver": { + "base_url": "https://immae.ems.host" + }, + "m.identity_server": { + "base_url": "https://vector.im" + }, + "org.matrix.msc3575.proxy": { + "url": "https://immae.ems.host" + } +} diff --git a/systems/eldiron/websites/immae/matrix/server b/systems/eldiron/websites/immae/matrix/server new file mode 100644 index 0000000..449155a --- /dev/null +++ b/systems/eldiron/websites/immae/matrix/server @@ -0,0 +1,3 @@ +{ + "m.server": "immae.ems.host:443" +} diff --git a/systems/eldiron/websites/immae/production.nix b/systems/eldiron/websites/immae/production.nix new file mode 100644 index 0000000..e4060ba --- /dev/null +++ b/systems/eldiron/websites/immae/production.nix @@ -0,0 +1,107 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.immae.production; + varDir = "/var/lib/buildbot/outputs/immae/blog"; + historyDir = "/var/lib/buildbot/outputs/immae/history"; + docsDir = "/var/lib/buildbot/outputs/immae/docs/"; +in { + options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website"; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains = with config.myServices.dns.helpers; + { + www = ips servers.eldiron.ips.production; + matrix.CNAME = [ "immae.element.io." ]; + }; + services.webstats.sites = [ { name = "www.immae.eu"; } ]; + + security.acme.certs.immae.domain = "www.immae.eu"; + security.acme.certs.immae.extraDomainNames = [ "immae.eu" ]; + services.websites.env.production.bindMounts."${varDir}" = {}; + services.websites.env.production.bindMounts."${docsDir}" = {}; + services.websites.env.production.bindMounts."${historyDir}" = {}; + services.websites.env.production.vhostConfs.immae_production = { + certName = "immae"; + 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/matrix ${./matrix} + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + Header always set Access-Control-Allow-Origin "*" + + + Alias /docs ${docsDir} + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + + Alias /eurl ${./sarl} + Alias /eurl ${./sarl} + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + + Alias /history ${historyDir} + + DirectoryIndex index.html + AllowOverride None + Require all granted + + + Alias /.well-known/chatonsinfos ${config.myServices.chatonsProperties.propertiesPath} + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "blog website is running on immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "www.immae.eu" "/blog/" "egrep -ri TODO /etc"]; + + servicegroups = "webstatus-websites"; + _webstatus_name = "Immae’s Blog"; + _webstatus_url = "https://www.immae.eu/blog"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/immae/release.nix b/systems/eldiron/websites/immae/release.nix new file mode 100644 index 0000000..4882bac --- /dev/null +++ b/systems/eldiron/websites/immae/release.nix @@ -0,0 +1,40 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.immae.release; + varDir = "/var/lib/ftp/release.immae.eu"; +in { + options.myServices.websites.immae.release.enable = lib.mkEnableOption "enable Release' website"; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.release = with config.myServices.dns.helpers; + ips servers.eldiron.ips.production; + services.webstats.sites = [ { name = "release.immae.eu"; } ]; + + security.acme.certs.immae.extraDomainNames = [ "release.immae.eu" ]; + services.websites.env.production.vhostConfs.immae_release = { + certName = "immae"; + 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/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt b/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt new file mode 100644 index 0000000..671534c --- /dev/null +++ b/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt @@ -0,0 +1,23 @@ +-----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/systems/eldiron/websites/kanboard/farm.nix b/systems/eldiron/websites/kanboard/farm.nix new file mode 100644 index 0000000..a70d0d6 --- /dev/null +++ b/systems/eldiron/websites/kanboard/farm.nix @@ -0,0 +1,183 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.tools.kanboard.farm; + apacheUser = config.services.websites.env.tools.user; + apacheGroup = config.services.websites.env.tools.group; + toVardir = name: "/var/lib/kanboard_farm/${name}"; + varDirs = lib.mapAttrsToList (name: v: toVardir name) cfg.instances; + toPhpBaseDir = name: [ rootDir (toVardir name) ]; + phpBaseDir = builtins.concatStringsSep ":" (lib.unique (lib.flatten (lib.mapAttrsToList (name: v: toPhpBaseDir name) cfg.instances))); + rootDir = pkgs.kanboard; + + toVhost = name: '' + Alias /${name} "${rootDir}" + + SetEnv DATA_DIR "${toVardir name}" + SetEnv MAIL_FROM "kanboard@tools.immae.eu" + + ''; + toCustomVhost = name: lib.optionalAttrs (cfg.instances."${name}".customHost != null) { + "kanboard_farm_${name}" = { + certName = "eldiron"; + hosts = [cfg.instances."${name}".customHost]; + root = null; + extraConfig = [ + '' + Alias / "${rootDir}" + + SetEnv DATA_DIR "${toVardir name}" + SetEnv MAIL_FROM "kanboard@tools.immae.eu" + + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${config.services.phpfpm.pools.kanboard_farm.socket}|fcgi://localhost" + + + + Require all denied + + '' + ]; + }; + }; + customHosts = lib.filter (n: n != null) (map (n: cfg.instances."${n}".customHost) (builtins.attrNames cfg.instances)); + customVhosts = lib.foldl (o: n: o // n) {} (map toCustomVhost (builtins.attrNames cfg.instances)); + phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [all.redis]); +in +{ + options.myServices.tools.kanboard.farm = { + instances = lib.mkOption { + description = "Instances names for the kanboard Farm"; + default = {}; + type = lib.types.attrsOf (lib.types.submodule { + options = { + customHost = lib.mkOption { + description = "Custom host to use for the kanboard instance"; + default = null; + type = lib.types.nullOr lib.types.str; + }; + }; + }); + }; + vhosts = lib.mkOption { + description = "Instance vhosts configs"; + readOnly = true; + type = lib.types.attrsOf lib.types.str; + default = lib.mapAttrs (name: v: toVhost name) cfg.instances; + }; + }; + + config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) { + myServices.dns.zones."immae.eu".subdomains.kanboard = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.kanboard = { + file.datetime = "2022-08-21T19:40:00"; + hosting = { + name = "Kanboard"; + description = "Kanban project management software"; + website = "https://tools.immae.eu/kanboard"; + logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.kanboard = { + file.datetime = "2022-08-21T19:40:00"; + service = { + name = "Kanboard"; + description = "Kanban project management software"; + website = "https://tools.immae.eu/kanboard"; + logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Kanboard"; + website = "https://kanboard.org/"; + license.url = "https://github.com/kanboard/kanboard/blob/main/LICENSE"; + license.name = "MIT License"; + version = pkgs.kanboard.version; + source.url = "https://github.com/kanboard/kanboard"; + }; + }; + system.activationScripts.kanboard_farm_vardirs = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${builtins.concatStringsSep " " varDirs} + ''; + }; + services.phpfpm.pools.kanboard_farm = { + user = apacheUser; + group = apacheGroup; + settings = let + instanceNb = builtins.length (builtins.attrNames cfg.instances); + in { + "listen.owner" = apacheUser; + "listen.group" = apacheGroup; + "pm" = "dynamic"; + "pm.max_children" = builtins.toString (60 * instanceNb); + "pm.start_servers" = builtins.toString (2 * instanceNb); + "pm.min_spare_servers" = builtins.toString (2 * instanceNb); + "pm.max_spare_servers" = builtins.toString (3 * instanceNb); + "pm.process_idle_timeout" = "60"; + + "php_admin_value[output_buffering]" = "0"; + "php_admin_value[max_execution_time]" = "1800"; + "php_admin_value[zend_extension]" = "opcache"; + "php_value[apcu.enable_cli]" = "1"; + "php_value[apcu.enabled]" = "1"; + #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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:KanboardFarm:'"; + }; + inherit phpPackage; + }; + security.acme.certs.eldiron.extraDomainNames = customHosts ++ [ "kanboard.immae.eu" ]; + services.websites.env.tools.vhostConfs = { + kanboard = { + certName = "eldiron"; + hosts = ["kanboard.immae.eu"]; + root = null; + extraConfig = [ + '' + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${config.services.phpfpm.pools.kanboard_farm.socket}|fcgi://localhost" + + + + Require all denied + + '' + ] ++ builtins.attrValues cfg.vhosts; + }; + } // customVhosts; + }; +} diff --git a/systems/eldiron/websites/mail/default.nix b/systems/eldiron/websites/mail/default.nix new file mode 100644 index 0000000..0a0342b --- /dev/null +++ b/systems/eldiron/websites/mail/default.nix @@ -0,0 +1,141 @@ +{ lib, pkgs, config, ... }: +let + roundcubemail = pkgs.callPackage ./roundcubemail.nix { + roundcubemail = 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 { + #myServices.chatonsProperties.services.mail-rainloop = { + # file.datetime = "2022-08-22T00:30:00"; + # service = { + # name = "Rainloop"; + # description = "Simple, modern & fast web-based email client"; + # website = "https://mail.immae.eu/rainloop"; + # logo = "https://www.rainloop.net/static/img/logo-16x16.png"; + # status.level = "ERROR"; + # status.description = "Stopped due to CVE-2022-29360"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "Rainloop"; + # website = "https://www.rainloop.net/"; + # license.url = "https://www.rainloop.net/licensing/"; + # license.name = "GNU Affero General Public License v3.0"; + # version = rainloop.webRoot.version; + # source.url = "https://github.com/RainLoop/rainloop-webmail"; + # }; + #}; + #myServices.chatonsProperties.services.mail-roundcube = { + # file.datetime = "2022-08-22T00:30:00"; + # service = { + # name = "Roundcube"; + # description = "The Roundcube Webmail suite"; + # website = "https://mail.immae.eu/roundcube"; + # logo = "https://mail.immae.eu/roundcube/skins/elastic/images/favicon.ico"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "Roundcube"; + # website = "https://roundcube.net/"; + # license.url = "https://github.com/roundcube/roundcubemail/blob/master/LICENSE"; + # license.name = "GNU General Public License v3.0"; + # version = roundcubemail.webRoot.version; + # source.url = "https://github.com/roundcube/roundcubemail"; + # modules = map (a: a.pluginName) roundcubemail.webRoot.plugins ++ map (a: a.skinName) roundcubemail.webRoot.skins; + # }; + #}; + + myServices.dns.zones."immae.eu".subdomains.mail = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + secrets.keys = roundcubemail.keys; + + services.websites.env.tools.modules = + [ "proxy_fcgi" ] + ++ rainloop.apache.modules + ++ roundcubemail.apache.modules; + + security.acme.certs.mail.extraDomainNames = [ "mail.immae.eu" ]; + services.websites.env.tools.vhostConfs.mail = { + certName = "mail"; + 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 all.redis ]); + }; + services.phpfpm.pools.rainloop = { + user = "wwwrun"; + group = "wwwrun"; + settings = rainloop.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + system.activationScripts = { + roundcubemail = roundcubemail.activationScript; + rainloop = rainloop.activationScript; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "roundcube website is running on mail.immae.eu"; + host_name = config.hostEnv.fqdn; + 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/"; + } + ]; + }; + +} diff --git a/systems/eldiron/websites/mail/mta-sts.nix b/systems/eldiron/websites/mail/mta-sts.nix new file mode 100644 index 0000000..2438702 --- /dev/null +++ b/systems/eldiron/websites/mail/mta-sts.nix @@ -0,0 +1,42 @@ +{ lib, pkgs, config, ... }: +let + getDomains = p: lib.mapAttrsToList (n: v: v) (lib.filterAttrs (n: v: v.receive) p.emailPolicies); + bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones; + domains = lib.flatten (builtins.attrValues bydomain); + mxes = lib.mapAttrsToList + (n: v: v.mx.subdomain) + (lib.attrsets.filterAttrs (n: v: v.mx.enable) config.myEnv.servers); + file = d: pkgs.writeText "mta-sts-${d.fqdn}.txt" ( + builtins.concatStringsSep "\r\n" ([ "version: STSv1" "mode: testing" ] + ++ (map (v: "mx: ${v}.${d.domain}") mxes) + ++ [ "max_age: 604800" ] + )); + root = pkgs.runCommand "mta-sts_root" {} '' + mkdir -p $out + ${builtins.concatStringsSep "\n" (map (d: + "cp ${file d} $out/${d.fqdn}.txt" + ) domains)} + ''; + cfg = config.myServices.websites.tools.email; +in +{ + config = lib.mkIf cfg.enable { + security.acme.certs.mail.extraDomainNames = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains; + services.websites.env.tools.vhostConfs.mta_sts = { + certName = "mail"; + hosts = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains; + root = root; + extraConfig = [ + '' + RewriteEngine on + RewriteCond %{HTTP_HOST} ^mta-sts.(.*)$ + RewriteRule ^/.well-known/mta-sts.txt$ %{DOCUMENT_ROOT}/%1.txt [L] + <Directory ${root}> + Require all granted + Options -Indexes + </Directory> + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/mail/rainloop.nix b/systems/eldiron/websites/mail/rainloop.nix new file mode 100644 index 0000000..f821005 --- /dev/null +++ b/systems/eldiron/websites/mail/rainloop.nix @@ -0,0 +1,54 @@ +{ 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}/data + ''; + }; + webRoot = rainloop.override { dataPath = "${varDir}/data"; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /rainloop "${root}" + <Directory "${root}"> + DirectoryIndex index.php + AllowOverride All + Options -FollowSymlinks + Require all denied + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + + <DirectoryMatch "${root}/data"> + Require all denied + </DirectoryMatch> + ''; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Rainloop:'"; + }; + }; +} diff --git a/systems/eldiron/websites/mail/roundcubemail.nix b/systems/eldiron/websites/mail/roundcubemail.nix new file mode 100644 index 0000000..21a10fe --- /dev/null +++ b/systems/eldiron/websites/mail/roundcubemail.nix @@ -0,0 +1,119 @@ +{ 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 + ''; + }; + 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 '' + <?php + $config['db_dsnw'] = '${psql_url}'; + $config['default_host'] = 'ssl://imap.immae.eu'; + $config['username_domain'] = array( + "imap.immae.eu" => "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'; + ''; + keyDependencies = [ apacheHttpd ]; + }; + 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}" + <Directory "${root}"> + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + ''; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Roundcubemail:'"; + }; + }; +} diff --git a/systems/eldiron/websites/mail/www/index.html b/systems/eldiron/websites/mail/www/index.html new file mode 100644 index 0000000..88b0ebd --- /dev/null +++ b/systems/eldiron/websites/mail/www/index.html @@ -0,0 +1,74 @@ +<!doctype html> +<html lang="fr"> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>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/systems/eldiron/websites/mastodon/default.nix b/systems/eldiron/websites/mastodon/default.nix new file mode 100644 index 0000000..603fc9e --- /dev/null +++ b/systems/eldiron/websites/mastodon/default.nix @@ -0,0 +1,174 @@ +{ lib, pkgs, config, ... }: +let + env = config.myEnv.tools.mastodon; + root = "${mcfg.workdir}/public/"; + cfg = config.myServices.websites.tools.mastodon; + mcfg = config.immaeServices.mastodon; +in { + options.myServices.websites.tools.mastodon = { + enable = lib.mkEnableOption "enable mastodon's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.mastodon = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.mastodon = { + file.datetime = "2022-08-21T19:50:00"; + service = { + name = "Mastodon"; + description = "Your self-hosted, globally interconnected microblogging community"; + website = "https://mastodon.immae.eu/"; + logo = "https://mastodon.immae.eu/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Mastodon"; + website = "https://joinmastodon.org/"; + license.url = "https://github.com/tootsuite/mastodon/blob/master/LICENSE"; + license.name = "GNU General Public License v3.0"; + version = mcfg.package.version; + source.url = "https://github.com/tootsuite/mastodon"; + }; + }; + 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}" + ''; + }; + immaeServices.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" + ]; + security.acme.certs.eldiron.extraDomainNames = [ "mastodon.immae.eu" ]; + services.websites.env.tools.vhostConfs.mastodon = { + certName = "eldiron"; + 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 + + RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L] + RewriteRule ^/api/v1/streaming/public$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/public [P,NE,QSA,L] + RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L] + RewriteCond %{REQUEST_URI} !/500.html + RewriteCond %{REQUEST_URI} !/sw.js + RewriteCond %{REQUEST_URI} !/embed.js + RewriteCond %{REQUEST_URI} !/robots.txt + RewriteCond %{REQUEST_URI} !/manifest.json + RewriteCond %{REQUEST_URI} !/browserconfig.xml + RewriteCond %{REQUEST_URI} !/mask-icon.svg + RewriteCond %{REQUEST_URI} !^(/.*\.(png|ico|gif)$) + RewriteCond %{REQUEST_URI} !^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge) + RewriteRule ^/(.*)$ unix:///run/mastodon/live_immae_puma.sock|http://mastodon.immae.eu/$1 [P,NE,QSA,L] + 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 + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "mastodon website is running on mastodon.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "mastodon.immae.eu" "/" "Mastodon"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Mastodon"; + _webstatus_url = "https://mastodon.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/mgoblin/default.nix b/systems/eldiron/websites/mgoblin/default.nix new file mode 100644 index 0000000..f276c62 --- /dev/null +++ b/systems/eldiron/websites/mgoblin/default.nix @@ -0,0 +1,173 @@ +{ lib, pkgs, config, mediagoblin, ... }: +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 { + myServices.dns.zones."immae.eu".subdomains.mgoblin = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.mediagoblin = { + file.datetime = "2022-08-21T20:00:00"; + service = { + name = "Mediagoblin"; + description = "MediaGoblin is a free software media publishing platform that anyone can run"; + website = "https://mgoblin.immae.eu/"; + logo = "https://mgoblin.immae.eu/mgoblin_static/images/goblin.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Mediagoblin"; + website = "https://mediagoblin.org/"; + license.url = "http://www.gnu.org/licenses/agpl.html"; + license.name = "GNU Affero General Public License"; + version = mcfg.package.version; + source.url = "https://git.savannah.gnu.org/git/mediagoblin.git"; + modules = map (a: a.pluginName) mcfg.package.plugins; + }; + }; + 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 = 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" ]; + security.acme.certs.eldiron.extraDomainNames = [ "mgoblin.immae.eu" ]; + services.websites.env.tools.vhostConfs.mgoblin = { + certName = "eldiron"; + 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/ + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "mediagoblin website is running on mgoblin.immae.eu"; + host_name = config.hostEnv.fqdn; + 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/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/moomin.txt b/systems/eldiron/websites/moomin.txt new file mode 100644 index 0000000..036fb1c --- /dev/null +++ b/systems/eldiron/websites/moomin.txt @@ -0,0 +1,16 @@ +⠀⠀⠀⠀⠀⠀⠀⢠⢦⡀⠀⡰⣩⠃ +⠀⠀⠀⠀⠀⠀⠀⠘⣄⠙⠍⠁⠙⠦⡀ +⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⡠⠄⠔⠊⠉⠒⠒⠒⢄ +⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠆ +⠀⠀⢠⢤⠜⡆⠀⢸⠀⠰⣄⠀⠀⠀⠀⠀⠀⠀⣠⠎ +⠀⠀⠱⠤⡁⠈⠑⠇⠀⠀⠀⠉⠒⠤⠤⠄⢖⠊⠀⡐⠧⣄⣀ +⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡉⠀⣀⣨⡷ +⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢱⠜⠁ +⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣸⠱⡀ +⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⣣ +⠀⠀⠀⠀⠀⠀⠀⠑⣄⠀⠀⠀⠀⠀⠀⠀⢀⣠⣀⠴⠊⠁ +⠰⢍⢒⢄⠀⠀⠀⠀⢸⢳⢆⠀⠀⠀⠰⡖⠋⠁ +⠀⠳⠴⣙⢄⠀⢀⡠⣣⠃⠈⠑⢤⡄⠀⡸⠂ +⠀⠀⠀⠀⠑⠋⠓⠊⠁⠀⠀⠀⠓⠒⠉ +Credentials: https://twitter.com/thingskatedid/status/1278274012754309120 +Credentials: https://gist.github.com/katef/09581d7c84eddf784508fa430f6ef47a diff --git a/systems/eldiron/websites/nossl/index.html b/systems/eldiron/websites/nossl/index.html new file mode 100644 index 0000000..4401a80 --- /dev/null +++ b/systems/eldiron/websites/nossl/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> + <head> + <title>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/systems/eldiron/websites/peertube/default.nix b/systems/eldiron/websites/peertube/default.nix new file mode 100644 index 0000000..0ebe4e7 --- /dev/null +++ b/systems/eldiron/websites/peertube/default.nix @@ -0,0 +1,147 @@ +{ lib, pkgs, config, ... }: +let + env = config.myEnv.tools.peertube; + cfg = config.myServices.websites.tools.peertube; + pcfg = config.immaeServices.peertube; +in { + options.myServices.websites.tools.peertube = { + enable = lib.mkEnableOption "enable Peertube's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.peertube = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.peertube = { + file.datetime = "2022-08-21T20:00:00"; + hosting = { + name = "Peertube"; + description = "Free software to take back control of your videos"; + website = "https://peertube.immae.eu/"; + logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.peertube = { + file.datetime = "2022-08-21T20:00:00"; + service = { + name = "Peertube"; + description = "Free software to take back control of your videos"; + website = "https://peertube.immae.eu/"; + logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Peertube"; + website = "https://joinpeertube.org/"; + license.url = "https://github.com/Chocobozzz/PeerTube/blob/develop/LICENSE"; + license.name = "GNU Affero General Public License"; + version = pcfg.package.version; + source.url = "https://github.com/Chocobozzz/PeerTube"; + }; + }; + immaeServices.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 ]; + }; + + security.acme.certs.eldiron.extraDomainNames = [ "peertube.immae.eu" ]; + services.websites.env.tools.vhostConfs.peertube = { + certName = "eldiron"; + 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 + '' ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "peertube website is running on peertube.immae.eu"; + host_name = config.hostEnv.fqdn; + 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/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/performance/default.nix b/systems/eldiron/websites/performance/default.nix new file mode 100644 index 0000000..23f754a --- /dev/null +++ b/systems/eldiron/websites/performance/default.nix @@ -0,0 +1,93 @@ +{ 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 { + myServices.dns.zones."immae.eu".subdomains.performance = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + 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: ${builtins.toString 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" ]; + + security.acme.certs.eldiron.extraDomainNames = [ "performance.immae.eu" ]; + services.websites.env.tools.vhostConfs.performance = { + certName = "eldiron"; + hosts = [ "performance.immae.eu" ]; + root = apacheRoot; + extraConfig = [ + '' + <Directory ${apacheRoot}> + DirectoryIndex index.html + AllowOverride None + Require all granted + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${config.services.phpfpm.pools.status_engine.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + ]; + }; + + 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[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:StatusEngine:'"; + "php_admin_value[open_basedir]" = "${package}:/tmp:${config.secrets.fullPaths."status_engine_ui"}"; + }; + phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + + }; +} diff --git a/systems/eldiron/websites/stats/default.nix b/systems/eldiron/websites/stats/default.nix new file mode 100644 index 0000000..665010b --- /dev/null +++ b/systems/eldiron/websites/stats/default.nix @@ -0,0 +1,51 @@ +{ 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} + ''; + }; + }; + + security.acme.certs.eldiron.extraDomainNames = [ "stats.immae.eu" ]; + services.websites.env.tools.vhostConfs.stats = { + certName = "eldiron"; + 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/systems/eldiron/websites/tools/adminer.nix b/systems/eldiron/websites/tools/adminer.nix new file mode 100644 index 0000000..5e865b1 --- /dev/null +++ b/systems/eldiron/websites/tools/adminer.nix @@ -0,0 +1,83 @@ +{ config, webapps-adminer, php82, lib, forcePhpSocket ? null }: +rec { + webRoot = webapps-adminer; + phpFpm = rec { + user = apache.user; + group = apache.group; + phpPackage = let + #mysqli_pam = php81.extensions.mysqli.overrideAttrs(old: { + # configureFlags = [ "--with-mysqli=${libmysqlclient_pam.dev}/bin/mysql_config" "--with-mysql-sock=/run/mysqld/mysqld.sock" ]; + #}); + in + php82.withExtensions ({ enabled, all }: [all.mysqli all.redis all.pgsql]); + 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"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Adminer:'"; + }; + }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /adminer ${webRoot} + <Directory ${webRoot}> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${if forcePhpSocket != null then forcePhpSocket else socket}|fcgi://localhost" + </FilesMatch> + + 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 + </Directory> + ''; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "adminer website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https_auth" "tools.immae.eu" "/adminer/" "www.adminerevo.org"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Adminer"; + _webstatus_url = "https://tools.immae.eu/adminer/"; + } + ]; + + chatonsProperties = { + published = false; + file.datetime = "2023-08-21T15:20:00"; + service = { + name = "Adminer"; + description = "Database management in a single PHP file"; + website = "https://tools.immae.eu/adminer/"; + logo = "https://tools.immae.eu/adminer/?file=favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Adminer"; + website = "https://docs.adminerevo.org/"; + license.url = "https://github.com/adminerevo/adminerevo/blob/main/readme.md"; + license.name = "Apache License 2.0 or GPL 2"; + version = webRoot.version; + source.url = "https://github.com/adminerevo/adminerevo/"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/default.nix b/systems/eldiron/websites/tools/default.nix new file mode 100644 index 0000000..4d9e3c1 --- /dev/null +++ b/systems/eldiron/websites/tools/default.nix @@ -0,0 +1,547 @@ +{ lib, pkgs, config, mypackages-lib, grocy, ... }: +let + composerEnv = mypackages-lib.composerEnv; + adminer = pkgs.callPackage ./adminer.nix { inherit config; }; + ympd = pkgs.callPackage ./ympd.nix { + env = config.myEnv.tools.ympd; + inherit config; + }; + ttrss = pkgs.callPackage ./ttrss.nix { + ttrss = pkgs.webapps-ttrss; + ttrss-plugins = pkgs.webapps-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 = composerEnv.override { + php = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]); + }; + }; + env = config.myEnv.tools.wallabag; + inherit config; + }; + yourls = pkgs.callPackage ./yourls.nix { + yourls = pkgs.webapps-yourls; + yourls-plugins = pkgs.webapps-yourls-plugins; + env = config.myEnv.tools.yourls; + inherit config; + }; + rompr = pkgs.callPackage ./rompr.nix { + rompr = pkgs.webapps-rompr; + env = config.myEnv.tools.rompr; + inherit config; + }; + shaarli = pkgs.callPackage ./shaarli.nix { + env = config.myEnv.tools.shaarli; + inherit config; + }; + dokuwiki = pkgs.callPackage ./dokuwiki.nix { + dokuwiki = pkgs.webapps-dokuwiki; + dokuwiki-plugins = pkgs.webapps-dokuwiki-plugins; + inherit config; + }; + ldap = pkgs.callPackage ./ldap.nix { + phpldapadmin = pkgs.webapps-phpldapadmin; + env = config.myEnv.tools.phpldapadmin; + inherit config; + }; + grocy' = pkgs.callPackage ./grocy.nix { + grocy = grocy.override { composerEnv = 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-bin-env = pkgs.buildEnv { + name = "webhook-env"; + paths = [ pkgs.apprise ]; + pathsToLink = [ "/bin" ]; + }; + webhooks = pkgs.callPackage ./webhooks.nix { + env = config.myEnv.tools.webhooks; + binEnv = webhooks-bin-env; + }; + dmarc-reports = pkgs.callPackage ./dmarc_reports.nix { + env = config.myEnv.tools.dmarc_reports; + inherit config; + }; + + landing = pkgs.callPackage ./landing.nix { }; + + cfg = config.myServices.websites.tools.tools; + pcfg = config.services.phpfpm.pools; +in { + options.myServices.websites.tools.tools = { + enable = lib.mkEnableOption "enable tools website"; + }; + + config = lib.mkIf cfg.enable { + # Services needing to send e-mails + myServices.dns.zones."immae.eu".emailPolicies."tools".receive = true; + myServices.dns.zones."immae.eu".subdomains = + with config.myServices.dns.helpers; + { + outils = ips servers.eldiron.ips.main; + tools = lib.mkMerge [ + (mailCommon "immae.eu") + mailSend + (ips servers.eldiron.ips.main) + ]; + }; + + myServices.chatonsProperties.services = { + adminer = adminer.chatonsProperties; + dokuwiki = dokuwiki.chatonsProperties; + shaarli = shaarli.chatonsProperties; + ttrss = ttrss.chatonsProperties; + wallabag = wallabag.chatonsProperties; + paste = { + file.datetime = "2022-08-22T00:15:00"; + service = { + name = "Paste"; + description = "A simple paster script with syntax highlight"; + website = "https://tools.immae.eu/paste/"; + logo = "https://assets.immae.eu/logo.jpg"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://tools.immae.eu/paste/"; + }; + software = { + name = "Paste"; + website = "https://tools.immae.eu/paste/"; + license.url = "https://tools.immae.eu/paste/license"; + license.name = "MIT License"; + version = "Unversioned"; + source.url = "https://tools.immae.eu/paste/abcd123/py"; + }; + }; + }; + myServices.chatonsProperties.hostings = { + dokuwiki = dokuwiki.chatonsHostingProperties; + phpbb = phpbb.chatonsHostingProperties; + }; + secrets.keys = + kanboard.keys + // ldap.keys + // shaarli.keys + // ttrss.keys + // wallabag.keys + // yourls.keys + // dmarc-reports.keys + // webhooks.keys + // ({ "webapps/tools-landing-sql-rw" = { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = let + env = config.myEnv.tools.landing; + in '' + SetEnv PGUSER "${env.postgresql.user}" + SetEnv PGPASSWORD "${env.postgresql.password}" + SetEnv PGDATABASE "${env.postgresql.database}" + SetEnv PGHOST "${env.postgresql.socket}" + ''; + }; }); + 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; + + myServices.dns.zones."immae.dev" = with config.myServices.dns.helpers; { + subdomains.tools = ips servers.eldiron.ips.integration; + }; + security.acme.certs.integration.domain = "tools.immae.dev"; + services.websites.env.integration.vhostConfs.devtools = { + certName = "integration"; + 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}" + <Directory "/var/lib/ftp/immae/devtools"> + DirectoryIndex index.php index.htm index.html + AllowOverride all + Require all granted + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${pcfg.devtools.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + ]; + }; + + + security.acme.certs.eldiron.extraDomainNames = [ "outils.immae.eu" "tools.immae.eu" ]; + services.websites.env.tools.vhostConfs.tools = { + certName = "eldiron"; + 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 + + <Directory "${landing}"> + Include ${config.secrets.fullPaths."webapps/tools-landing-sql-rw"} + DirectoryIndex index.html + AllowOverride None + Require all granted + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + (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) + '' + <Location "/paste/"> + 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 + </Location> + <Location "/paste"> + 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 + </Location> + + <Location "/ntfy/"> + SetEnv proxy-nokeepalive 1 + SetEnv proxy-sendchunked 1 + LimitRequestBody 102400 + + RewriteEngine On + + # FIXME: why is landing prefixed in the url? + RewriteCond %{HTTP:Upgrade} websocket [NC] + RewriteCond %{HTTP:Connection} upgrade [NC] + RewriteRule ^(${landing}/ntfy)?/?(.*) unix:///run/ntfy/ntfy.sock|ws://tools.immae.eu/$2 [P,NE,QSA,L] + + RewriteRule ^(${landing}/ntfy)?/?(.*) unix:///run/ntfy/ntfy.sock|http://tools.immae.eu/$2 [P,NE,QSA,L] + </Location> + Alias /BIP39 /var/lib/buildbot/outputs/immae/bip39 + <Directory "/var/lib/buildbot/outputs/immae/bip39"> + DirectoryIndex index.html + AllowOverride None + Require all granted + </Directory> + + Alias /webhooks ${config.secrets.fullPaths."webapps/webhooks"} + <Directory "${config.secrets.fullPaths."webapps/webhooks"}"> + Options -Indexes + DirectoryIndex index.php + Require all granted + AllowOverride None + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + ]; + }; + + services.websites.env.tools.vhostConfs.outils = { + certName = "eldiron"; + 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; + }; + ntfy = { + description = "send push notifications to your phone or desktop via scripts from any computer"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.ntfy-sh}/bin/ntfy serve --listen-http '' --listen-unix %t/ntfy/ntfy.sock --cache-file %S/ntfy/cache.db --cache-duration 120h --behind-proxy --attachment-cache-dir %S/ntfy/attachments --base-url https://tools.immae.eu/ntfy"; + Type = "simple"; + WorkingDirectory = "%S/ntfy"; + RuntimeDirectory = "ntfy"; + StateDirectory = "ntfy"; + User = "wwwrun"; + }; + }; + 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"; + + "php_admin_value[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Tools:'"; + # 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" + "${webhooks-bin-env}/bin" + ]; + }; + phpEnv = { + CONTACT_EMAIL = config.myEnv.tools.contact; + }; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + 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[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Devtools:'"; + "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.sqlite3 all.redis all.apcu all.opcache ]); + }; + adminer = adminer.phpFpm; + ttrss = { + user = "wwwrun"; + group = "wwwrun"; + settings = ttrss.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + wallabag = { + user = "wwwrun"; + group = "wwwrun"; + settings = wallabag.phpFpm.pool; + phpPackage = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy all.redis]); + }; + yourls = { + user = "wwwrun"; + group = "wwwrun"; + settings = yourls.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + rompr = { + user = "wwwrun"; + group = "wwwrun"; + settings = rompr.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + shaarli = { + user = "wwwrun"; + group = "wwwrun"; + settings = shaarli.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + dmarc-reports = { + user = "wwwrun"; + group = "wwwrun"; + settings = dmarc-reports.phpFpm.pool; + phpEnv = dmarc-reports.phpFpm.phpEnv; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + dokuwiki = { + user = "wwwrun"; + group = "wwwrun"; + settings = dokuwiki.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + phpbb = { + user = "wwwrun"; + group = "wwwrun"; + settings = phpbb.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + ldap = { + user = "wwwrun"; + group = "wwwrun"; + settings = ldap.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + kanboard = { + user = "wwwrun"; + group = "wwwrun"; + settings = kanboard.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + grocy = { + user = "wwwrun"; + group = "wwwrun"; + settings = grocy'.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + }; + + system.activationScripts = { + grocy = grocy'.activationScript; + ttrss = ttrss.activationScript; + wallabag = wallabag.activationScript; + rompr = rompr.activationScript; + shaarli = shaarli.activationScript; + dokuwiki = dokuwiki.activationScript; + phpbb = phpbb.activationScript; + kanboard = kanboard.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" ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = lib.mkMerge [ + ttrss.monitoringPlugins + rompr.monitoringPlugins + wallabag.monitoringPlugins + yourls.monitoringPlugins + ympd.monitoringPlugins + dokuwiki.monitoringPlugins + shaarli.monitoringPlugins + ldap.monitoringPlugins + adminer.monitoringPlugins + ]; + myServices.monitoring.fromMasterObjects = lib.mkMerge [ + ttrss.monitoringObjects + rompr.monitoringObjects + wallabag.monitoringObjects + yourls.monitoringObjects + ympd.monitoringObjects + dokuwiki.monitoringObjects + shaarli.monitoringObjects + ldap.monitoringObjects + adminer.monitoringObjects + ]; + }; +} + diff --git a/systems/eldiron/websites/tools/dmarc_reports.nix b/systems/eldiron/websites/tools/dmarc_reports.nix new file mode 100644 index 0000000..8b3aa99 --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports.nix @@ -0,0 +1,61 @@ +{ env, config }: +rec { + keys."webapps/tools-dmarc-reports.php" = { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + <?php + $dbhost = "${env.mysql.host}"; + $dbname = "${env.mysql.database}"; + $dbuser = "${env.mysql.user}"; + $dbpass = "${env.mysql.password}"; + $dbport = "${builtins.toString env.mysql.port}"; + $anonymous_key = "${env.anonymous_key}"; + ?> + ''; + }; + webRoot = ./dmarc_reports; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /dmarc-reports "${root}" + <Directory "${root}"> + DirectoryIndex index.html + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride None + Options +FollowSymlinks + + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + Use LDAPConnect + Require all granted + Require ldap-attribute uid=immae + </Directory> + ''; + }; + 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"; + + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:DmarcReports:'"; + # 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/systems/eldiron/websites/tools/dmarc_reports/api.php b/systems/eldiron/websites/tools/dmarc_reports/api.php new file mode 100644 index 0000000..850f9ce --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/api.php @@ -0,0 +1,122 @@ +<?php + +require(getenv("SECRETS_FILE")); + +$response = array( + "status" => "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/systems/eldiron/websites/tools/dmarc_reports/app.js b/systems/eldiron/websites/tools/dmarc_reports/app.js new file mode 100644 index 0000000..8e8a6c4 --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/app.js @@ -0,0 +1,103 @@ +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/systems/eldiron/websites/tools/dmarc_reports/default.css b/systems/eldiron/websites/tools/dmarc_reports/default.css new file mode 100644 index 0000000..9e0c63f --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/default.css @@ -0,0 +1,130 @@ +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/systems/eldiron/websites/tools/dmarc_reports/index.html b/systems/eldiron/websites/tools/dmarc_reports/index.html new file mode 100644 index 0000000..0afc82f --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/index.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="robots" content="noindex"> + <title>Dmarc reports + + + + +
    +
    +
    + Anonymize + + +
    + +
    + +

    DMARC Reports

    +

    + No information could be fetched. If in non-anonymous mode you need to be logged-in +

    + + + + + + + + + + + + + + + +
    Start DateEnd DateDomainReporting OrganizationReport IDMessages
    +
    + + + + + + diff --git a/systems/eldiron/websites/tools/dokuwiki.nix b/systems/eldiron/websites/tools/dokuwiki.nix new file mode 100644 index 0000000..813c426 --- /dev/null +++ b/systems/eldiron/websites/tools/dokuwiki.nix @@ -0,0 +1,106 @@ +{ lib, stdenv, dokuwiki, dokuwiki-plugins, config }: +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 + ''; + }; + chatonsHostingProperties = { + file.datetime = "2022-08-21T22:50:00"; + hosting = { + name = "Dokuwiki"; + description = "DokuWiki is a simple to use and highly versatile Open Source wiki software"; + website = "https://tools.immae.eu/dokuwiki/"; + logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "Dokuwiki"; + description = "DokuWiki is a simple to use and highly versatile Open Source wiki software"; + website = "https://tools.immae.eu/dokuwiki/"; + logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Dokuwiki"; + website = "https://www.dokuwiki.org/dokuwiki"; + license.url = "http://www.gnu.org/licenses/gpl-2.0.html"; + license.name = "GNU General Public License Version 2"; + version = webRoot.version; + source.url = "https://download.dokuwiki.org/"; + modules = map (a: a.pluginName) webRoot.plugins; + }; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Dokuwiki:'"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "dokuwiki website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + 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/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/grocy.nix b/systems/eldiron/websites/tools/grocy.nix new file mode 100644 index 0000000..96e18a3 --- /dev/null +++ b/systems/eldiron/websites/tools/grocy.nix @@ -0,0 +1,48 @@ +{ lib, stdenv, grocy }: +rec { + varDir = "/var/lib/grocy"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data + ''; + }; + webRoot = grocy.webRoot; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /grocy "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + Options +FollowSymlinks + Require all granted + </Directory> + ''; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Grocy:'"; + }; + }; +} + diff --git a/systems/eldiron/websites/tools/kanboard.nix b/systems/eldiron/websites/tools/kanboard.nix new file mode 100644 index 0000000..db39ecd --- /dev/null +++ b/systems/eldiron/websites/tools/kanboard.nix @@ -0,0 +1,81 @@ +{ 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 -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 = '' + SetEnv MAIL_FROM "kanboard@tools.immae.eu" + + SetEnv DB_DRIVER "postgres" + SetEnv DB_USERNAME "${env.postgresql.user}" + SetEnv DB_PASSWORD "${env.postgresql.password}" + SetEnv DB_HOSTNAME "${env.postgresql.socket}" + SetEnv DB_NAME "${env.postgresql.database}" + + SetEnv DATA_DIR "${varDir}" + SetEnv LDAP_AUTH "true" + SetEnv LDAP_SERVER "${env.ldap.host}" + SetEnv LDAP_START_TLS "true" + + SetEnv LDAP_BIND_TYPE "proxy" + SetEnv LDAP_USERNAME "${env.ldap.dn}" + SetEnv LDAP_PASSWORD "${env.ldap.password}" + SetEnv LDAP_USER_BASE_DN "${env.ldap.base}" + SetEnv LDAP_USER_FILTER "${env.ldap.filter}" + SetEnv LDAP_GROUP_ADMIN_DN "${env.ldap.admin_dn}" + ''; + }; + webRoot = kanboard; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /kanboard "${root}" + <Location /kanboard> + Include ${config.secrets.fullPaths."webapps/tools-kanboard"} + </Location> + <Directory "${root}"> + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + <DirectoryMatch "${root}/data"> + Require all denied + </DirectoryMatch> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "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]" = "KanboardPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Kanboard:'"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/landing.nix b/systems/eldiron/websites/tools/landing.nix new file mode 100644 index 0000000..f5d851e --- /dev/null +++ b/systems/eldiron/websites/tools/landing.nix @@ -0,0 +1,38 @@ +{ stdenv, yarn2nix-moretea, nodejs_16 }: +let + source = builtins.fetchGit { + url = "https://git.immae.eu/github/bastienwirtz/homer.git"; + ref = "gitolite_local/local_changes"; + rev = "bb60c5b869931f305f15c5bfa9cdb3f68702f01f"; + narHash = "sha256-xBIBUJhQ7KPY0d92pW9ErA9OvGafWcxyuGkbHShF4Bs="; + }; + yarnModules = yarn2nix-moretea.mkYarnModules rec { + nodejs = nodejs_16; + name = "landing"; + pname = name; + version = "v1.0.0"; + packageJSON = "${source}/package.json"; + yarnLock = "${source}/yarn.lock"; + yarnNix = ./landing/yarn-packages.nix; + }; +in + stdenv.mkDerivation rec { + pname = "landing"; + version = "v1.0.0"; + src = source; + + buildInputs = [ yarnModules yarn2nix-moretea.yarn ]; + configurePhase = '' + ln -s ${yarnModules}/node_modules . + ''; + buildPhase = '' + # See https://stackoverflow.com/questions/74548318/how-to-resolve-error-error0308010cdigital-envelope-routinesunsupported-no + export NODE_OPTIONS=--openssl-legacy-provider + yarn build + ''; + installPhase = '' + cp -a dist $out + cp ${./landing}/*.php $out/ + ln -s service-worker.js $out/worker.js + ''; + } diff --git a/systems/eldiron/websites/tools/landing/ldap_password.php b/systems/eldiron/websites/tools/landing/ldap_password.php new file mode 100644 index 0000000..efb4f57 --- /dev/null +++ b/systems/eldiron/websites/tools/landing/ldap_password.php @@ -0,0 +1,170 @@ +<?php + +/** + * LDAP PHP Change Password Webpage + * @author: Matt Rude <http://mattrude.com> + * @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 changePasswordLDAP($con, $user_dn, $newPassword){ + global $message; + $salt = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',4)),0,4); + $encoded_newPassword = "{SSHA}" . base64_encode(pack("H*", sha1($newPassword.$salt)).$salt); + + $entry = array(); + $entry["userPassword"] = "$encoded_newPassword"; + + if (ldap_modify($con,$user_dn,$entry) === false){ + $error = ldap_error($con); + $errno = ldap_errno($con); + $message[] = "$errno - $error"; + return false; + } else { + return true; + } +} + +function changePasswordSQL($user_realm, $newPassword) { + global $message; + + foreach(["PGUSER", "PGPASSWORD", "PGDATABASE", "PGHOST"] as $k) { + if (isset($_SERVER[$k]) && !isset($_ENV[$k])) { + putenv("${k}=" . $_SERVER[$k]); + } + } + $con = pg_connect(""); + $result = pg_query_params($con, "WITH newsalt as (SELECT gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( $1 || (SELECT * FROM newsalt), 'sha1'), 'hex'), mechanism = 'SSHA', salt = (SELECT * FROM newsalt) where login || '@' || realm = $2", array($newPassword, $user_realm)); + if (!$result) { + $message[] = "Error when accessing database"; + return false; + } else { + return true; + } +} + +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.<br/>Your password must be at least 6 characters long."; + return false; + } + + $user_search = ldap_search($con,"dc=immae,dc=eu","(uid=$user)"); + $auth_entry = ldap_first_entry($con, $user_search); + + $mail_address = ldap_get_values($con, $auth_entry, "mail")[0]; + $first_name = ldap_get_values($con, $auth_entry, "givenName")[0]; + $existing_password = ldap_get_values($con, $auth_entry, "userPassword")[0]; + if (substr($existing_password, 0, 6) == "{SASL}") { + $result = changePasswordSQL(substr($existing_password, 6), $newPassword); + } else { + $result = changePasswordLDAP($con, $user_dn, $newPassword); + } + + if (!$result) { + $message[] = "E201 - Your password cannot be changed, please contact the administrator."; + } 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.<br/>An informational email has been sent to $mail_address.<br/>Your new password is now fully active."; + } +} + +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<title>Password Change Page + + + + + + +
    +
    +

    Password Change Page

    +'; + changePassword($_POST['username'],$_POST['oldPassword'],$_POST['newPassword1'],$_POST['newPassword2']); + global $message_css; + if ($message_css == "yes") { + echo '
    '; + } else { + echo '
    '; + $message[] = "Your password was not changed."; + } + foreach ( $message as $one ) { echo "

    $one

    "; } + ?>
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + diff --git a/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php b/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php new file mode 100644 index 0000000..85ed973 --- /dev/null +++ b/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php @@ -0,0 +1,343 @@ + + + + ImmaeEu Account + + + + + + +
    +

    Gestion des clés SSH

    + $row["id"], + 'apps' => json_decode($row["usage"]), + 'public_key' => $row["key"], + 'comment' => $row["comment"], + ); + } + + pg_close($pg); + return $keys; +} + +function saveKeys($keys) +{ + if (!isset($_SESSION["login"])) { + return false; + } + $pg = connectPg(); + $existingIds = pg_fetch_all_columns(pg_query_params($pg, "SELECT id FROM ldap_users_ssh_keys WHERE realm = 'immae' AND login = $1", array($_SESSION["login"]))); + foreach ($keys as $key) { + if (isset($key["id"])) { + unset($existingIds[array_search($key["id"],$existingIds)]); + pg_query_params($pg, "UPDATE ldap_users_ssh_keys SET key = $2, usage = ARRAY(SELECT * FROM json_array_elements_text($3))::ldap_users_ssh_key_usage[], comment = $4 WHERE id = $5 AND login = $1 AND realm = 'immae'", array($_SESSION["login"], $key["public_key"], json_encode($key["apps"]), $key["comment"], $key["id"])); + } else { + pg_query_params($pg, "INSERT INTO ldap_users_ssh_keys (login,realm,key,usage,comment) values ($1,'immae',$2,ARRAY(SELECT * FROM json_array_elements_text($3))::ldap_users_ssh_key_usage[],$4)", array($_SESSION["login"], $key["public_key"], json_encode($key["apps"]), $key["comment"])); + } + } + foreach ($existingIds as $removedKeyId) { + pg_query_params($pg, "DELETE FROM ldap_users_ssh_keys WHERE login = $1 AND realm = 'immae' AND id = $2", array($_SESSION["login"], $removedKeyId)); + } +} + + +// 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[] = $key; + } + } + + if (!$errors) { + $successSave = saveKeys($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 : getKeys(); +?> +

    Connecté en tant que

    + +
    + +
    + + +

    Clés enregistrées avec succès.

    + + +
    + + + $sshKey) : + ?> + + + + + + + + + + + + + + + + + + + +
    Description
    >">
    + + + +
    + + +
    + + +
    +

    Login

    + + +

    + + + + + + + + + +
    + +
    + + + + diff --git a/systems/eldiron/websites/tools/landing/myip.php b/systems/eldiron/websites/tools/landing/myip.php new file mode 100644 index 0000000..9ec1c6c --- /dev/null +++ b/systems/eldiron/websites/tools/landing/myip.php @@ -0,0 +1 @@ + diff --git a/systems/eldiron/websites/tools/landing/node-packages.nix b/systems/eldiron/websites/tools/landing/node-packages.nix new file mode 100644 index 0000000..9ebf254 --- /dev/null +++ b/systems/eldiron/websites/tools/landing/node-packages.nix @@ -0,0 +1,130 @@ +# 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/systems/eldiron/websites/tools/landing/yarn-packages.nix b/systems/eldiron/websites/tools/landing/yarn-packages.nix new file mode 100644 index 0000000..9621c3e --- /dev/null +++ b/systems/eldiron/websites/tools/landing/yarn-packages.nix @@ -0,0 +1,9357 @@ +{ fetchurl, fetchgit, linkFarm, runCommandNoCC, gnutar }: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + { + name = "_babel_code_frame___code_frame_7.10.1.tgz"; + path = fetchurl { + name = "_babel_code_frame___code_frame_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz"; + sha1 = "d5481c5095daa1c57e16e54c6f9198443afb49ff"; + }; + } + { + name = "_babel_compat_data___compat_data_7.10.1.tgz"; + path = fetchurl { + name = "_babel_compat_data___compat_data_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz"; + sha1 = "b1085ffe72cd17bf2c0ee790fc09f9626011b2db"; + }; + } + { + name = "_babel_core___core_7.10.2.tgz"; + path = fetchurl { + name = "_babel_core___core_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz"; + sha1 = "bd6786046668a925ac2bd2fd95b579b92a23b36a"; + }; + } + { + name = "_babel_generator___generator_7.10.2.tgz"; + path = fetchurl { + name = "_babel_generator___generator_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz"; + sha1 = "0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9"; + }; + } + { + name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz"; + sha1 = "f6d08acc6f70bbd59b436262553fb2e259a1a268"; + }; + } + { + name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz"; + sha1 = "0ec7d9be8174934532661f87783eb18d72290059"; + }; + } + { + name = "_babel_helper_compilation_targets___helper_compilation_targets_7.10.2.tgz"; + path = fetchurl { + name = "_babel_helper_compilation_targets___helper_compilation_targets_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz"; + sha1 = "a17d9723b6e2c750299d2a14d4637c76936d8285"; + }; + } + { + name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.10.2.tgz"; + path = fetchurl { + name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz"; + sha1 = "7474295770f217dbcf288bf7572eb213db46ee67"; + }; + } + { + name = "_babel_helper_create_regexp_features_plugin___helper_create_regexp_features_plugin_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_create_regexp_features_plugin___helper_create_regexp_features_plugin_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz"; + sha1 = "1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd"; + }; + } + { + name = "_babel_helper_define_map___helper_define_map_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_define_map___helper_define_map_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz"; + sha1 = "5e69ee8308648470dd7900d159c044c10285221d"; + }; + } + { + name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz"; + sha1 = "e9d76305ee1162ca467357ae25df94f179af2b7e"; + }; + } + { + name = "_babel_helper_function_name___helper_function_name_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_function_name___helper_function_name_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz"; + sha1 = "92bd63829bfc9215aca9d9defa85f56b539454f4"; + }; + } + { + name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz"; + sha1 = "7303390a81ba7cb59613895a192b93850e373f7d"; + }; + } + { + name = "_babel_helper_hoist_variables___helper_hoist_variables_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_hoist_variables___helper_hoist_variables_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz"; + sha1 = "7e77c82e5dcae1ebf123174c385aaadbf787d077"; + }; + } + { + name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz"; + sha1 = "432967fd7e12a4afef66c4687d4ca22bc0456f15"; + }; + } + { + name = "_babel_helper_module_imports___helper_module_imports_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_module_imports___helper_module_imports_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz"; + sha1 = "dd331bd45bccc566ce77004e9d05fe17add13876"; + }; + } + { + name = "_babel_helper_module_transforms___helper_module_transforms_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_module_transforms___helper_module_transforms_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz"; + sha1 = "24e2f08ee6832c60b157bb0936c86bef7210c622"; + }; + } + { + name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz"; + sha1 = "b4a1f2561870ce1247ceddb02a3860fa96d72543"; + }; + } + { + name = "_babel_helper_plugin_utils___helper_plugin_utils_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_plugin_utils___helper_plugin_utils_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz"; + sha1 = "ec5a5cf0eec925b66c60580328b122c01230a127"; + }; + } + { + name = "_babel_helper_regex___helper_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_regex___helper_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz"; + sha1 = "021cf1a7ba99822f993222a001cc3fec83255b96"; + }; + } + { + name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz"; + sha1 = "bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432"; + }; + } + { + name = "_babel_helper_replace_supers___helper_replace_supers_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_replace_supers___helper_replace_supers_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz"; + sha1 = "ec6859d20c5d8087f6a2dc4e014db7228975f13d"; + }; + } + { + name = "_babel_helper_simple_access___helper_simple_access_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_simple_access___helper_simple_access_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz"; + sha1 = "08fb7e22ace9eb8326f7e3920a1c2052f13d851e"; + }; + } + { + name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz"; + sha1 = "c6f4be1cbc15e3a868e4c64a17d5d31d754da35f"; + }; + } + { + name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz"; + sha1 = "5770b0c1a826c4f53f5ede5e153163e0318e94b5"; + }; + } + { + name = "_babel_helper_wrap_function___helper_wrap_function_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_wrap_function___helper_wrap_function_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz"; + sha1 = "956d1310d6696257a7afd47e4c42dfda5dfcedc9"; + }; + } + { + name = "_babel_helpers___helpers_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helpers___helpers_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz"; + sha1 = "a6827b7cb975c9d9cef5fd61d919f60d8844a973"; + }; + } + { + name = "_babel_highlight___highlight_7.10.1.tgz"; + path = fetchurl { + name = "_babel_highlight___highlight_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz"; + sha1 = "841d098ba613ba1a427a2b383d79e35552c38ae0"; + }; + } + { + name = "_babel_parser___parser_7.10.2.tgz"; + path = fetchurl { + name = "_babel_parser___parser_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz"; + sha1 = "871807f10442b92ff97e4783b9b54f6a0ca812d0"; + }; + } + { + name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz"; + sha1 = "6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55"; + }; + } + { + name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz"; + sha1 = "046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01"; + }; + } + { + name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz"; + sha1 = "9373c2d8db45345c6e30452ad77b469758e5c8f7"; + }; + } + { + name = "_babel_plugin_proposal_dynamic_import___plugin_proposal_dynamic_import_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_dynamic_import___plugin_proposal_dynamic_import_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz"; + sha1 = "e36979dc1dc3b73f6d6816fc4951da2363488ef0"; + }; + } + { + name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz"; + sha1 = "b1e691ee24c651b5a5e32213222b2379734aff09"; + }; + } + { + name = "_babel_plugin_proposal_nullish_coalescing_operator___plugin_proposal_nullish_coalescing_operator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_nullish_coalescing_operator___plugin_proposal_nullish_coalescing_operator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz"; + sha1 = "02dca21673842ff2fe763ac253777f235e9bbf78"; + }; + } + { + name = "_babel_plugin_proposal_numeric_separator___plugin_proposal_numeric_separator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_numeric_separator___plugin_proposal_numeric_separator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz"; + sha1 = "a9a38bc34f78bdfd981e791c27c6fdcec478c123"; + }; + } + { + name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz"; + sha1 = "cba44908ac9f142650b4a65b8aa06bf3478d5fb6"; + }; + } + { + name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz"; + sha1 = "c9f86d99305f9fa531b568ff5ab8c964b8b223d2"; + }; + } + { + name = "_babel_plugin_proposal_optional_chaining___plugin_proposal_optional_chaining_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_optional_chaining___plugin_proposal_optional_chaining_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz"; + sha1 = "15f5d6d22708629451a91be28f8facc55b0e818c"; + }; + } + { + name = "_babel_plugin_proposal_private_methods___plugin_proposal_private_methods_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_private_methods___plugin_proposal_private_methods_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz"; + sha1 = "ed85e8058ab0fe309c3f448e5e1b73ca89cdb598"; + }; + } + { + name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz"; + sha1 = "dc04feb25e2dd70c12b05d680190e138fa2c0c6f"; + }; + } + { + name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.8.4.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.8.4.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"; + sha1 = "a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"; + }; + } + { + name = "_babel_plugin_syntax_class_properties___plugin_syntax_class_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_class_properties___plugin_syntax_class_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz"; + sha1 = "d5bc0645913df5b17ad7eda0fa2308330bde34c5"; + }; + } + { + name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz"; + sha1 = "16b869c4beafc9a442565147bda7ce0967bd4f13"; + }; + } + { + name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz"; + sha1 = "62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"; + }; + } + { + name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"; + sha1 = "01ca21b668cd8218c9e640cb6dd88c5412b2c96a"; + }; + } + { + name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz"; + sha1 = "0ae371134a42b91d5418feb3c8c8d43e1565d2da"; + }; + } + { + name = "_babel_plugin_syntax_nullish_coalescing_operator___plugin_syntax_nullish_coalescing_operator_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_nullish_coalescing_operator___plugin_syntax_nullish_coalescing_operator_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"; + sha1 = "167ed70368886081f74b5c36c65a88c03b66d1a9"; + }; + } + { + name = "_babel_plugin_syntax_numeric_separator___plugin_syntax_numeric_separator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_numeric_separator___plugin_syntax_numeric_separator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz"; + sha1 = "25761ee7410bc8cf97327ba741ee94e4a61b7d99"; + }; + } + { + name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"; + sha1 = "60e225edcbd98a640332a2e72dd3e66f1af55871"; + }; + } + { + name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"; + sha1 = "6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"; + }; + } + { + name = "_babel_plugin_syntax_optional_chaining___plugin_syntax_optional_chaining_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_optional_chaining___plugin_syntax_optional_chaining_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"; + sha1 = "4f69c2ab95167e0180cd5336613f8c5788f7d48a"; + }; + } + { + name = "_babel_plugin_syntax_top_level_await___plugin_syntax_top_level_await_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_top_level_await___plugin_syntax_top_level_await_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz"; + sha1 = "8b8733f8c57397b3eaa47ddba8841586dcaef362"; + }; + } + { + name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz"; + sha1 = "cb5ee3a36f0863c06ead0b409b4cc43a889b295b"; + }; + } + { + name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz"; + sha1 = "e5153eb1a3e028f79194ed8a7a4bf55f862b2062"; + }; + } + { + name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz"; + sha1 = "146856e756d54b20fff14b819456b3e01820b85d"; + }; + } + { + name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz"; + sha1 = "47092d89ca345811451cd0dc5d91605982705d5e"; + }; + } + { + name = "_babel_plugin_transform_classes___plugin_transform_classes_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_classes___plugin_transform_classes_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz"; + sha1 = "6e11dd6c4dfae70f540480a4702477ed766d733f"; + }; + } + { + name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz"; + sha1 = "59aa399064429d64dce5cf76ef9b90b7245ebd07"; + }; + } + { + name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz"; + sha1 = "abd58e51337815ca3a22a336b85f62b998e71907"; + }; + } + { + name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz"; + sha1 = "920b9fec2d78bb57ebb64a644d5c2ba67cc104ee"; + }; + } + { + name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz"; + sha1 = "c900a793beb096bc9d4d0a9d0cde19518ffc83b9"; + }; + } + { + name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz"; + sha1 = "279c3116756a60dd6e6f5e488ba7957db9c59eb3"; + }; + } + { + name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz"; + sha1 = "ff01119784eb0ee32258e8646157ba2501fcfda5"; + }; + } + { + name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz"; + sha1 = "4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d"; + }; + } + { + name = "_babel_plugin_transform_literals___plugin_transform_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_literals___plugin_transform_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz"; + sha1 = "5794f8da82846b22e4e6631ea1658bce708eb46a"; + }; + } + { + name = "_babel_plugin_transform_member_expression_literals___plugin_transform_member_expression_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_member_expression_literals___plugin_transform_member_expression_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz"; + sha1 = "90347cba31bca6f394b3f7bd95d2bbfd9fce2f39"; + }; + } + { + name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz"; + sha1 = "65950e8e05797ebd2fe532b96e19fc5482a1d52a"; + }; + } + { + name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz"; + sha1 = "d5ff4b4413ed97ffded99961056e1fb980fb9301"; + }; + } + { + name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz"; + sha1 = "9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6"; + }; + } + { + name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz"; + sha1 = "ea080911ffc6eb21840a5197a39ede4ee67b1595"; + }; + } + { + name = "_babel_plugin_transform_named_capturing_groups_regex___plugin_transform_named_capturing_groups_regex_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_named_capturing_groups_regex___plugin_transform_named_capturing_groups_regex_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz"; + sha1 = "a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"; + }; + } + { + name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz"; + sha1 = "6ee41a5e648da7632e22b6fb54012e87f612f324"; + }; + } + { + name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz"; + sha1 = "2e3016b0adbf262983bf0d5121d676a5ed9c4fde"; + }; + } + { + name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz"; + sha1 = "b25938a3c5fae0354144a720b07b32766f683ddd"; + }; + } + { + name = "_babel_plugin_transform_property_literals___plugin_transform_property_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_property_literals___plugin_transform_property_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz"; + sha1 = "cffc7315219230ed81dc53e4625bf86815b6050d"; + }; + } + { + name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz"; + sha1 = "10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490"; + }; + } + { + name = "_babel_plugin_transform_reserved_words___plugin_transform_reserved_words_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_reserved_words___plugin_transform_reserved_words_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz"; + sha1 = "0fc1027312b4d1c3276a57890c8ae3bcc0b64a86"; + }; + } + { + name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz"; + sha1 = "fd1887f749637fb2ed86dc278e79eb41df37f4b1"; + }; + } + { + name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz"; + sha1 = "e8b54f238a1ccbae482c4dce946180ae7b3143f3"; + }; + } + { + name = "_babel_plugin_transform_spread___plugin_transform_spread_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_spread___plugin_transform_spread_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz"; + sha1 = "0c6d618a0c4461a274418460a28c9ccf5239a7c8"; + }; + } + { + name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz"; + sha1 = "90fc89b7526228bed9842cff3588270a7a393b00"; + }; + } + { + name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz"; + sha1 = "914c7b7f4752c570ea00553b4284dad8070e8628"; + }; + } + { + name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz"; + sha1 = "60c0239b69965d166b80a84de7315c1bc7e0bb0e"; + }; + } + { + name = "_babel_plugin_transform_unicode_escapes___plugin_transform_unicode_escapes_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_unicode_escapes___plugin_transform_unicode_escapes_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz"; + sha1 = "add0f8483dab60570d9e03cecef6c023aa8c9940"; + }; + } + { + name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz"; + sha1 = "6b58f2aea7b68df37ac5025d9c88752443a6b43f"; + }; + } + { + name = "_babel_preset_env___preset_env_7.10.2.tgz"; + path = fetchurl { + name = "_babel_preset_env___preset_env_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz"; + sha1 = "715930f2cf8573b0928005ee562bed52fb65fdfb"; + }; + } + { + name = "_babel_preset_modules___preset_modules_0.1.3.tgz"; + path = fetchurl { + name = "_babel_preset_modules___preset_modules_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz"; + sha1 = "13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"; + }; + } + { + name = "_babel_runtime___runtime_7.10.2.tgz"; + path = fetchurl { + name = "_babel_runtime___runtime_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz"; + sha1 = "d103f21f2602497d38348a32e008637d506db839"; + }; + } + { + name = "_babel_template___template_7.10.1.tgz"; + path = fetchurl { + name = "_babel_template___template_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz"; + sha1 = "e167154a94cb5f14b28dc58f5356d2162f539811"; + }; + } + { + name = "_babel_traverse___traverse_7.10.1.tgz"; + path = fetchurl { + name = "_babel_traverse___traverse_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz"; + sha1 = "bbcef3031e4152a6c0b50147f4958df54ca0dd27"; + }; + } + { + name = "_babel_types___types_7.10.2.tgz"; + path = fetchurl { + name = "_babel_types___types_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz"; + sha1 = "30283be31cad0dbf6fb00bd40641ca0ea675172d"; + }; + } + { + name = "_fortawesome_fontawesome_free___fontawesome_free_5.13.0.tgz"; + path = fetchurl { + name = "_fortawesome_fontawesome_free___fontawesome_free_5.13.0.tgz"; + url = "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz"; + sha1 = "fcb113d1aca4b471b709e8c9c168674fbd6e06d9"; + }; + } + { + name = "_hapi_address___address_2.1.4.tgz"; + path = fetchurl { + name = "_hapi_address___address_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz"; + sha1 = "5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"; + }; + } + { + name = "_hapi_bourne___bourne_1.3.2.tgz"; + path = fetchurl { + name = "_hapi_bourne___bourne_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz"; + sha1 = "0a7095adea067243ce3283e1b56b8a8f453b242a"; + }; + } + { + name = "_hapi_hoek___hoek_8.5.1.tgz"; + path = fetchurl { + name = "_hapi_hoek___hoek_8.5.1.tgz"; + url = "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz"; + sha1 = "fde96064ca446dec8c55a8c2f130957b070c6e06"; + }; + } + { + name = "_hapi_joi___joi_15.1.1.tgz"; + path = fetchurl { + name = "_hapi_joi___joi_15.1.1.tgz"; + url = "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz"; + sha1 = "c675b8a71296f02833f8d6d243b34c57b8ce19d7"; + }; + } + { + name = "_hapi_topo___topo_3.1.6.tgz"; + path = fetchurl { + name = "_hapi_topo___topo_3.1.6.tgz"; + url = "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz"; + sha1 = "68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"; + }; + } + { + name = "_intervolga_optimize_cssnano_plugin___optimize_cssnano_plugin_1.0.6.tgz"; + path = fetchurl { + name = "_intervolga_optimize_cssnano_plugin___optimize_cssnano_plugin_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz"; + sha1 = "be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8"; + }; + } + { + name = "_mrmlnc_readdir_enhanced___readdir_enhanced_2.2.1.tgz"; + path = fetchurl { + name = "_mrmlnc_readdir_enhanced___readdir_enhanced_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz"; + sha1 = "524af240d1a360527b730475ecfa1344aa540dde"; + }; + } + { + name = "_nodelib_fs.stat___fs.stat_1.1.3.tgz"; + path = fetchurl { + name = "_nodelib_fs.stat___fs.stat_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"; + sha1 = "2b5a3ab3f918cca48a8c754c08168e3f03eba61b"; + }; + } + { + name = "_soda_friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.1.tgz"; + path = fetchurl { + name = "_soda_friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.1.tgz"; + url = "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz"; + sha1 = "706f64bcb4a8b9642b48ae3ace444c70334d615d"; + }; + } + { + name = "_soda_get_current_script___get_current_script_1.0.1.tgz"; + path = fetchurl { + name = "_soda_get_current_script___get_current_script_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.1.tgz"; + sha1 = "f4afffcb36e069a801d5339c90499601c47a2516"; + }; + } + { + name = "_types_color_name___color_name_1.1.1.tgz"; + path = fetchurl { + name = "_types_color_name___color_name_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz"; + sha1 = "1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"; + }; + } + { + name = "_types_glob___glob_7.1.2.tgz"; + path = fetchurl { + name = "_types_glob___glob_7.1.2.tgz"; + url = "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz"; + sha1 = "06ca26521353a545d94a0adc74f38a59d232c987"; + }; + } + { + name = "_types_json_schema___json_schema_7.0.4.tgz"; + path = fetchurl { + name = "_types_json_schema___json_schema_7.0.4.tgz"; + url = "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz"; + sha1 = "38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"; + }; + } + { + name = "_types_minimatch___minimatch_3.0.3.tgz"; + path = fetchurl { + name = "_types_minimatch___minimatch_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz"; + sha1 = "3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"; + }; + } + { + name = "_types_node___node_14.0.11.tgz"; + path = fetchurl { + name = "_types_node___node_14.0.11.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-14.0.11.tgz"; + sha1 = "61d4886e2424da73b7b25547f59fdcb534c165a3"; + }; + } + { + name = "_types_normalize_package_data___normalize_package_data_2.4.0.tgz"; + path = fetchurl { + name = "_types_normalize_package_data___normalize_package_data_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz"; + sha1 = "e486d0d97396d79beedd0a6e33f4534ff6b4973e"; + }; + } + { + name = "_types_q___q_1.5.4.tgz"; + path = fetchurl { + name = "_types_q___q_1.5.4.tgz"; + url = "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz"; + sha1 = "15925414e0ad2cd765bfef58842f7e26a7accb24"; + }; + } + { + name = "_vue_babel_helper_vue_jsx_merge_props___babel_helper_vue_jsx_merge_props_1.0.0.tgz"; + path = fetchurl { + name = "_vue_babel_helper_vue_jsx_merge_props___babel_helper_vue_jsx_merge_props_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz"; + sha1 = "048fe579958da408fb7a8b2a3ec050b50a661040"; + }; + } + { + name = "_vue_babel_plugin_transform_vue_jsx___babel_plugin_transform_vue_jsx_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_plugin_transform_vue_jsx___babel_plugin_transform_vue_jsx_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz"; + sha1 = "c0a3e6efc022e75e4247b448a8fc6b86f03e91c0"; + }; + } + { + name = "_vue_babel_preset_app___babel_preset_app_4.4.1.tgz"; + path = fetchurl { + name = "_vue_babel_preset_app___babel_preset_app_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.4.1.tgz"; + sha1 = "97c6796183cd0abf96a17297dc335c4c702fd8c4"; + }; + } + { + name = "_vue_babel_preset_jsx___babel_preset_jsx_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_preset_jsx___babel_preset_jsx_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz"; + sha1 = "2e169eb4c204ea37ca66c2ea85a880bfc99d4f20"; + }; + } + { + name = "_vue_babel_sugar_functional_vue___babel_sugar_functional_vue_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_functional_vue___babel_sugar_functional_vue_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz"; + sha1 = "f7e24fba09e6f1ee70104560a8808057555f1a9a"; + }; + } + { + name = "_vue_babel_sugar_inject_h___babel_sugar_inject_h_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_inject_h___babel_sugar_inject_h_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz"; + sha1 = "8a5276b6d8e2ed16ffc8078aad94236274e6edf0"; + }; + } + { + name = "_vue_babel_sugar_v_model___babel_sugar_v_model_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_v_model___babel_sugar_v_model_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz"; + sha1 = "1ff6fd1b800223fc9cb1e84dceb5e52d737a8192"; + }; + } + { + name = "_vue_babel_sugar_v_on___babel_sugar_v_on_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_v_on___babel_sugar_v_on_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz"; + sha1 = "b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b"; + }; + } + { + name = "_vue_cli_overlay___cli_overlay_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_overlay___cli_overlay_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.4.1.tgz"; + sha1 = "f1f51f31f7a00d371e9a5b5a941525184475bf8b"; + }; + } + { + name = "_vue_cli_plugin_babel___cli_plugin_babel_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_babel___cli_plugin_babel_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.1.tgz"; + sha1 = "2c6e969fe51f1b4b211bea84afb7cad18240f70f"; + }; + } + { + name = "_vue_cli_plugin_eslint___cli_plugin_eslint_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_eslint___cli_plugin_eslint_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.1.tgz"; + sha1 = "e39d6517da6de231195d227f995f495e2958a74a"; + }; + } + { + name = "_vue_cli_plugin_pwa___cli_plugin_pwa_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_pwa___cli_plugin_pwa_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-4.4.1.tgz"; + sha1 = "e7bc010bc78cfaf74968c11fb332f3abc1ef298d"; + }; + } + { + name = "_vue_cli_plugin_router___cli_plugin_router_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_router___cli_plugin_router_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.4.1.tgz"; + sha1 = "07d09df0f4bea816e637da814f578b808f1f93b2"; + }; + } + { + name = "_vue_cli_plugin_vuex___cli_plugin_vuex_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_vuex___cli_plugin_vuex_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.1.tgz"; + sha1 = "98d18fc5d36fa6e0d1fc2ecaeea37aa965564f19"; + }; + } + { + name = "_vue_cli_service___cli_service_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_service___cli_service_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.4.1.tgz"; + sha1 = "b26a435d8c953bc7efaf7b784c9835c1415bcf1c"; + }; + } + { + name = "_vue_cli_shared_utils___cli_shared_utils_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_shared_utils___cli_shared_utils_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.1.tgz"; + sha1 = "930304ade5a9f9bf0d2fd67d9305cad83d04aae1"; + }; + } + { + name = "_vue_component_compiler_utils___component_compiler_utils_3.1.2.tgz"; + path = fetchurl { + name = "_vue_component_compiler_utils___component_compiler_utils_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz"; + sha1 = "8213a5ff3202f9f2137fe55370f9e8b9656081c3"; + }; + } + { + name = "_vue_eslint_config_prettier___eslint_config_prettier_6.0.0.tgz"; + path = fetchurl { + name = "_vue_eslint_config_prettier___eslint_config_prettier_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz"; + sha1 = "ad5912b308f4ae468458e02a2b05db0b9d246700"; + }; + } + { + name = "_vue_preload_webpack_plugin___preload_webpack_plugin_1.1.1.tgz"; + path = fetchurl { + name = "_vue_preload_webpack_plugin___preload_webpack_plugin_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz"; + sha1 = "18723530d304f443021da2292d6ec9502826104a"; + }; + } + { + name = "_vue_web_component_wrapper___web_component_wrapper_1.2.0.tgz"; + path = fetchurl { + name = "_vue_web_component_wrapper___web_component_wrapper_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz"; + sha1 = "bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1"; + }; + } + { + name = "_webassemblyjs_ast___ast_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_ast___ast_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz"; + sha1 = "bd850604b4042459a5a41cd7d338cbed695ed964"; + }; + } + { + name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz"; + sha1 = "3c3d3b271bddfc84deb00f71344438311d52ffb4"; + }; + } + { + name = "_webassemblyjs_helper_api_error___helper_api_error_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_api_error___helper_api_error_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz"; + sha1 = "203f676e333b96c9da2eeab3ccef33c45928b6a2"; + }; + } + { + name = "_webassemblyjs_helper_buffer___helper_buffer_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_buffer___helper_buffer_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz"; + sha1 = "a1442d269c5feb23fcbc9ef759dac3547f29de00"; + }; + } + { + name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz"; + sha1 = "647f8892cd2043a82ac0c8c5e75c36f1d9159f27"; + }; + } + { + name = "_webassemblyjs_helper_fsm___helper_fsm_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_fsm___helper_fsm_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz"; + sha1 = "c05256b71244214671f4b08ec108ad63b70eddb8"; + }; + } + { + name = "_webassemblyjs_helper_module_context___helper_module_context_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_module_context___helper_module_context_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz"; + sha1 = "25d8884b76839871a08a6c6f806c3979ef712f07"; + }; + } + { + name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz"; + sha1 = "4fed8beac9b8c14f8c58b70d124d549dd1fe5790"; + }; + } + { + name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz"; + sha1 = "5a4138d5a6292ba18b04c5ae49717e4167965346"; + }; + } + { + name = "_webassemblyjs_ieee754___ieee754_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_ieee754___ieee754_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz"; + sha1 = "15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"; + }; + } + { + name = "_webassemblyjs_leb128___leb128_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_leb128___leb128_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz"; + sha1 = "f19ca0b76a6dc55623a09cffa769e838fa1e1c95"; + }; + } + { + name = "_webassemblyjs_utf8___utf8_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_utf8___utf8_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz"; + sha1 = "04d33b636f78e6a6813227e82402f7637b6229ab"; + }; + } + { + name = "_webassemblyjs_wasm_edit___wasm_edit_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_edit___wasm_edit_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz"; + sha1 = "3fe6d79d3f0f922183aa86002c42dd256cfee9cf"; + }; + } + { + name = "_webassemblyjs_wasm_gen___wasm_gen_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_gen___wasm_gen_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz"; + sha1 = "50bc70ec68ded8e2763b01a1418bf43491a7a49c"; + }; + } + { + name = "_webassemblyjs_wasm_opt___wasm_opt_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_opt___wasm_opt_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz"; + sha1 = "2211181e5b31326443cc8112eb9f0b9028721a61"; + }; + } + { + name = "_webassemblyjs_wasm_parser___wasm_parser_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_parser___wasm_parser_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz"; + sha1 = "9d48e44826df4a6598294aa6c87469d642fff65e"; + }; + } + { + name = "_webassemblyjs_wast_parser___wast_parser_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wast_parser___wast_parser_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz"; + sha1 = "3031115d79ac5bd261556cecc3fa90a3ef451914"; + }; + } + { + name = "_webassemblyjs_wast_printer___wast_printer_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wast_printer___wast_printer_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz"; + sha1 = "4935d54c85fef637b00ce9f52377451d00d47899"; + }; + } + { + name = "_xtuc_ieee754___ieee754_1.2.0.tgz"; + path = fetchurl { + name = "_xtuc_ieee754___ieee754_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"; + sha1 = "eef014a3145ae477a1cbc00cd1e552336dceb790"; + }; + } + { + name = "_xtuc_long___long_4.2.2.tgz"; + path = fetchurl { + name = "_xtuc_long___long_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz"; + sha1 = "d291c6a4e97989b5c61d9acf396ae4fe133a718d"; + }; + } + { + name = "accepts___accepts_1.3.7.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.7.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz"; + sha1 = "531bc726517a3b2b41f850021c6cc15eaab507cd"; + }; + } + { + name = "acorn_jsx___acorn_jsx_5.2.0.tgz"; + path = fetchurl { + name = "acorn_jsx___acorn_jsx_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz"; + sha1 = "4c66069173d6fdd68ed85239fc256226182b2ebe"; + }; + } + { + name = "acorn_walk___acorn_walk_7.1.1.tgz"; + path = fetchurl { + name = "acorn_walk___acorn_walk_7.1.1.tgz"; + url = "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz"; + sha1 = "345f0dffad5c735e7373d2fec9a1023e6a44b83e"; + }; + } + { + name = "acorn___acorn_6.4.1.tgz"; + path = fetchurl { + name = "acorn___acorn_6.4.1.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz"; + sha1 = "531e58ba3f51b9dacb9a6646ca4debf5b14ca474"; + }; + } + { + name = "acorn___acorn_7.2.0.tgz"; + path = fetchurl { + name = "acorn___acorn_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz"; + sha1 = "17ea7e40d7c8640ff54a694c889c26f31704effe"; + }; + } + { + name = "address___address_1.1.2.tgz"; + path = fetchurl { + name = "address___address_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz"; + sha1 = "bf1116c9c758c51b7a933d296b72c221ed9428b6"; + }; + } + { + name = "aggregate_error___aggregate_error_3.0.1.tgz"; + path = fetchurl { + name = "aggregate_error___aggregate_error_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz"; + sha1 = "db2fe7246e536f40d9b5442a39e117d7dd6a24e0"; + }; + } + { + name = "ajv_errors___ajv_errors_1.0.1.tgz"; + path = fetchurl { + name = "ajv_errors___ajv_errors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz"; + sha1 = "f35986aceb91afadec4102fbd85014950cefa64d"; + }; + } + { + name = "ajv_keywords___ajv_keywords_3.4.1.tgz"; + path = fetchurl { + name = "ajv_keywords___ajv_keywords_3.4.1.tgz"; + url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz"; + sha1 = "ef916e271c64ac12171fd8384eaae6b2345854da"; + }; + } + { + name = "ajv___ajv_6.12.2.tgz"; + path = fetchurl { + name = "ajv___ajv_6.12.2.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz"; + sha1 = "c629c5eced17baf314437918d2da88c99d5958cd"; + }; + } + { + 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 = "ansi_colors___ansi_colors_3.2.4.tgz"; + path = fetchurl { + name = "ansi_colors___ansi_colors_3.2.4.tgz"; + url = "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz"; + sha1 = "e3a3da4bfbae6c86a9c285625de124a234026fbf"; + }; + } + { + name = "ansi_escapes___ansi_escapes_4.3.1.tgz"; + path = fetchurl { + name = "ansi_escapes___ansi_escapes_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz"; + sha1 = "a5c47cc43181f1f38ffd7076837700d395522a61"; + }; + } + { + 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_regex___ansi_regex_4.1.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz"; + sha1 = "8b9f8f08cf1acb843756a839ca8c7e3168c51997"; + }; + } + { + name = "ansi_regex___ansi_regex_5.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz"; + sha1 = "388539f55179bf39339c81af30a654d69f87cb75"; + }; + } + { + 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 = "ansi_styles___ansi_styles_4.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz"; + sha1 = "90ae75c424d008d2624c5bf29ead3177ebfcf359"; + }; + } + { + name = "any_promise___any_promise_1.3.0.tgz"; + path = fetchurl { + name = "any_promise___any_promise_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz"; + sha1 = "abc6afeedcea52e809cdc0376aed3ce39635d17f"; + }; + } + { + 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 = "anymatch___anymatch_3.1.1.tgz"; + path = fetchurl { + name = "anymatch___anymatch_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz"; + sha1 = "c55ecf02185e2469259399310c173ce31233b142"; + }; + } + { + 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 = "arch___arch_2.1.2.tgz"; + path = fetchurl { + name = "arch___arch_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz"; + sha1 = "0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf"; + }; + } + { + 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_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_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.2.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz"; + sha1 = "24ef80a28c1a893617e2149b0c6d0d788293b099"; + }; + } + { + 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.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.4.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; + sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; + }; + } + { + 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___assert_1.5.0.tgz"; + path = fetchurl { + name = "assert___assert_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz"; + sha1 = "55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"; + }; + } + { + 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 = "astral_regex___astral_regex_1.0.0.tgz"; + path = fetchurl { + name = "astral_regex___astral_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz"; + sha1 = "6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"; + }; + } + { + name = "async_each___async_each_1.0.3.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"; + sha1 = "b727dbf87d7651602f06f4d4ac387f47d91b0cbf"; + }; + } + { + name = "async_limiter___async_limiter_1.0.1.tgz"; + path = fetchurl { + name = "async_limiter___async_limiter_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz"; + sha1 = "dd379e94f0db8310b08291f9d64c3209766617fd"; + }; + } + { + name = "async___async_2.6.3.tgz"; + path = fetchurl { + name = "async___async_2.6.3.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz"; + sha1 = "d72625e2344a3656e3a3ad4fa749fa83299d82ff"; + }; + } + { + 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.2.tgz"; + path = fetchurl { + name = "atob___atob_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; + sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; + }; + } + { + name = "autoprefixer___autoprefixer_9.8.0.tgz"; + path = fetchurl { + name = "autoprefixer___autoprefixer_9.8.0.tgz"; + url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz"; + sha1 = "68e2d2bef7ba4c3a65436f662d0a56a741e56511"; + }; + } + { + 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.10.0.tgz"; + path = fetchurl { + name = "aws4___aws4_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz"; + sha1 = "a17b3a8ea811060e74d47d306122400ad4497ae2"; + }; + } + { + name = "babel_eslint___babel_eslint_10.1.0.tgz"; + path = fetchurl { + name = "babel_eslint___babel_eslint_10.1.0.tgz"; + url = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz"; + sha1 = "6968e568a910b78fb3779cdd8b6ac2f479943232"; + }; + } + { + name = "babel_extract_comments___babel_extract_comments_1.0.0.tgz"; + path = fetchurl { + name = "babel_extract_comments___babel_extract_comments_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz"; + sha1 = "0a2aedf81417ed391b85e18b4614e693a0351a21"; + }; + } + { + name = "babel_loader___babel_loader_8.1.0.tgz"; + path = fetchurl { + name = "babel_loader___babel_loader_8.1.0.tgz"; + url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz"; + sha1 = "c611d5112bd5209abe8b9fa84c3e4da25275f1c3"; + }; + } + { + name = "babel_plugin_dynamic_import_node___babel_plugin_dynamic_import_node_2.3.3.tgz"; + path = fetchurl { + name = "babel_plugin_dynamic_import_node___babel_plugin_dynamic_import_node_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"; + sha1 = "84fda19c976ec5c6defef57f9427b3def66e17a3"; + }; + } + { + name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz"; + path = fetchurl { + name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz"; + sha1 = "fd6536f2bce13836ffa3a5458c4903a597bb3bf5"; + }; + } + { + name = "babel_plugin_transform_object_rest_spread___babel_plugin_transform_object_rest_spread_6.26.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_object_rest_spread___babel_plugin_transform_object_rest_spread_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz"; + sha1 = "0f36692d50fef6b7e2d4b3ac1478137a963b7b06"; + }; + } + { + 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 = "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_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.1.tgz"; + path = fetchurl { + name = "base64_js___base64_js_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz"; + sha1 = "58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"; + }; + } + { + 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 = "bfj___bfj_6.1.2.tgz"; + path = fetchurl { + name = "bfj___bfj_6.1.2.tgz"; + url = "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz"; + sha1 = "325c861a822bcb358a41c78a33b8e6e2086dde7f"; + }; + } + { + 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 = "big.js___big.js_5.2.2.tgz"; + path = fetchurl { + name = "big.js___big.js_5.2.2.tgz"; + url = "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz"; + sha1 = "65f0af382f578bcdc742bd9c281e9cb2d7768328"; + }; + } + { + name = "binary_extensions___binary_extensions_1.13.1.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.13.1.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"; + sha1 = "598afe54755b2868a5330d2aff9d4ebb53209b65"; + }; + } + { + name = "binary_extensions___binary_extensions_2.0.0.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz"; + sha1 = "23c0df14f6a88077f5f986c0d167ec03c3d5537c"; + }; + } + { + name = "bindings___bindings_1.5.0.tgz"; + path = fetchurl { + name = "bindings___bindings_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"; + sha1 = "10353c9e945334bc0511a6d90b38fbc7c9c504df"; + }; + } + { + name = "bluebird___bluebird_3.7.2.tgz"; + path = fetchurl { + name = "bluebird___bluebird_3.7.2.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz"; + sha1 = "9f229c15be272454ffa973ace0dbee79a1b0c36f"; + }; + } + { + name = "bn.js___bn.js_4.11.9.tgz"; + path = fetchurl { + name = "bn.js___bn.js_4.11.9.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz"; + sha1 = "26d556829458f9d1e81fc48952493d0ba3507828"; + }; + } + { + name = "bn.js___bn.js_5.1.2.tgz"; + path = fetchurl { + name = "bn.js___bn.js_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz"; + sha1 = "c9686902d3c9a27729f43ab10f9d79c2004da7b0"; + }; + } + { + name = "body_parser___body_parser_1.19.0.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.19.0.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"; + sha1 = "96b2709e57c9c4e09a6fd66a8fd979844f69f08a"; + }; + } + { + 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 = "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_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 = "braces___braces_3.0.2.tgz"; + path = fetchurl { + name = "braces___braces_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"; + sha1 = "3454e1a462ee8d599e236df336cd9ea4f8afe107"; + }; + } + { + 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.2.0.tgz"; + path = fetchurl { + name = "browserify_sign___browserify_sign_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz"; + sha1 = "545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"; + }; + } + { + 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_4.12.0.tgz"; + path = fetchurl { + name = "browserslist___browserslist_4.12.0.tgz"; + url = "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz"; + sha1 = "06c6d5715a1ede6c51fc39ff67fd647f740b656d"; + }; + } + { + name = "buffer_from___buffer_from_1.1.1.tgz"; + path = fetchurl { + name = "buffer_from___buffer_from_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz"; + sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef"; + }; + } + { + 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_json___buffer_json_2.0.0.tgz"; + path = fetchurl { + name = "buffer_json___buffer_json_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz"; + sha1 = "f73e13b1e42f196fe2fd67d001c7d7107edd7c23"; + }; + } + { + 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.2.tgz"; + path = fetchurl { + name = "buffer___buffer_4.9.2.tgz"; + url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz"; + sha1 = "230ead344002988644841ab0244af8c44bbe3ef8"; + }; + } + { + 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 = "bulma___bulma_0.8.2.tgz"; + path = fetchurl { + name = "bulma___bulma_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/bulma/-/bulma-0.8.2.tgz"; + sha1 = "5d928f16ed4a84549c2873f95c92c38c69c631a7"; + }; + } + { + 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 = "bytes___bytes_3.1.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"; + sha1 = "f6cf7933a360e0588fa9fde85651cdc7f805d1f6"; + }; + } + { + name = "cacache___cacache_12.0.4.tgz"; + path = fetchurl { + name = "cacache___cacache_12.0.4.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz"; + sha1 = "668bcbd105aeb5f1d92fe25570ec9525c8faa40c"; + }; + } + { + name = "cacache___cacache_13.0.1.tgz"; + path = fetchurl { + name = "cacache___cacache_13.0.1.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz"; + sha1 = "a8000c21697089082f85287a1aec6e382024a71c"; + }; + } + { + 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 = "cache_loader___cache_loader_4.1.0.tgz"; + path = fetchurl { + name = "cache_loader___cache_loader_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz"; + sha1 = "9948cae353aec0a1fcb1eafda2300816ec85387e"; + }; + } + { + name = "call_me_maybe___call_me_maybe_1.0.1.tgz"; + path = fetchurl { + name = "call_me_maybe___call_me_maybe_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz"; + sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b"; + }; + } + { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + path = fetchurl { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"; + sha1 = "847e0fce0a223750a9a027c54b33731ad3154134"; + }; + } + { + name = "caller_path___caller_path_2.0.0.tgz"; + path = fetchurl { + name = "caller_path___caller_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"; + sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4"; + }; + } + { + name = "callsites___callsites_2.0.0.tgz"; + path = fetchurl { + name = "callsites___callsites_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"; + sha1 = "06eb84f00eea413da86affefacbffb36093b3c50"; + }; + } + { + name = "callsites___callsites_3.1.0.tgz"; + path = fetchurl { + name = "callsites___callsites_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz"; + sha1 = "b3630abd8943432f54b3f0519238e33cd7df2f73"; + }; + } + { + name = "camel_case___camel_case_3.0.0.tgz"; + path = fetchurl { + name = "camel_case___camel_case_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz"; + sha1 = "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"; + }; + } + { + name = "camelcase___camelcase_5.3.1.tgz"; + path = fetchurl { + name = "camelcase___camelcase_5.3.1.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz"; + sha1 = "e3c9b31569e106811df242f715725a1f4c494320"; + }; + } + { + name = "caniuse_api___caniuse_api_3.0.0.tgz"; + path = fetchurl { + name = "caniuse_api___caniuse_api_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz"; + sha1 = "5e4d90e2274961d46291997df599e3ed008ee4c0"; + }; + } + { + name = "caniuse_lite___caniuse_lite_1.0.30001078.tgz"; + path = fetchurl { + name = "caniuse_lite___caniuse_lite_1.0.30001078.tgz"; + url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001078.tgz"; + sha1 = "e1b6e2ae327b6a1ec11f65ec7a0dde1e7093074c"; + }; + } + { + name = "case_sensitive_paths_webpack_plugin___case_sensitive_paths_webpack_plugin_2.3.0.tgz"; + path = fetchurl { + name = "case_sensitive_paths_webpack_plugin___case_sensitive_paths_webpack_plugin_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz"; + sha1 = "23ac613cc9a856e4f88ff8bb73bbb5e989825cf7"; + }; + } + { + 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 = "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.2.tgz"; + path = fetchurl { + name = "chalk___chalk_2.4.2.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"; + sha1 = "cd42541677a54333cf541a49108c1432b44c9424"; + }; + } + { + name = "chalk___chalk_3.0.0.tgz"; + path = fetchurl { + name = "chalk___chalk_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz"; + sha1 = "3f73c2bf526591f574cc492c51e2456349f844e4"; + }; + } + { + name = "chalk___chalk_4.0.0.tgz"; + path = fetchurl { + name = "chalk___chalk_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz"; + sha1 = "6e98081ed2d17faab615eb52ac66ec1fe6209e72"; + }; + } + { + name = "chardet___chardet_0.7.0.tgz"; + path = fetchurl { + name = "chardet___chardet_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz"; + sha1 = "90094849f0937f2eedc2425d0d28a9e5f0cbad9e"; + }; + } + { + name = "check_types___check_types_8.0.3.tgz"; + path = fetchurl { + name = "check_types___check_types_8.0.3.tgz"; + url = "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz"; + sha1 = "3356cca19c889544f2d7a95ed49ce508a0ecf552"; + }; + } + { + name = "chokidar___chokidar_3.4.0.tgz"; + path = fetchurl { + name = "chokidar___chokidar_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz"; + sha1 = "b30611423ce376357c765b9b8f904b9fba3c0be8"; + }; + } + { + name = "chokidar___chokidar_2.1.8.tgz"; + path = fetchurl { + name = "chokidar___chokidar_2.1.8.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz"; + sha1 = "804b3a7b6a99358c3c5c61e71d8728f041cff917"; + }; + } + { + name = "chownr___chownr_1.1.4.tgz"; + path = fetchurl { + name = "chownr___chownr_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"; + sha1 = "6fc9d7b42d32a583596337666e7d08084da2cc6b"; + }; + } + { + name = "chrome_trace_event___chrome_trace_event_1.0.2.tgz"; + path = fetchurl { + name = "chrome_trace_event___chrome_trace_event_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz"; + sha1 = "234090ee97c7d4ad1a2c4beae27505deffc608a4"; + }; + } + { + name = "ci_info___ci_info_1.6.0.tgz"; + path = fetchurl { + name = "ci_info___ci_info_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz"; + sha1 = "2ca20dbb9ceb32d4524a683303313f0304b1e497"; + }; + } + { + 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 = "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_css___clean_css_4.2.3.tgz"; + path = fetchurl { + name = "clean_css___clean_css_4.2.3.tgz"; + url = "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz"; + sha1 = "507b5de7d97b48ee53d84adb0160ff6216380f78"; + }; + } + { + name = "clean_stack___clean_stack_2.2.0.tgz"; + path = fetchurl { + name = "clean_stack___clean_stack_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz"; + sha1 = "ee8472dbb129e727b31e8a10a427dee9dfe4008b"; + }; + } + { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz"; + sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5"; + }; + } + { + name = "cli_cursor___cli_cursor_3.1.0.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz"; + sha1 = "264305a7ae490d1d03bf0c9ba7c925d1753af307"; + }; + } + { + name = "cli_highlight___cli_highlight_2.1.4.tgz"; + path = fetchurl { + name = "cli_highlight___cli_highlight_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz"; + sha1 = "098cb642cf17f42adc1c1145e07f960ec4d7522b"; + }; + } + { + name = "cli_spinners___cli_spinners_2.3.0.tgz"; + path = fetchurl { + name = "cli_spinners___cli_spinners_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz"; + sha1 = "0632239a4b5aa4c958610142c34bb7a651fc8df5"; + }; + } + { + name = "cli_width___cli_width_2.2.1.tgz"; + path = fetchurl { + name = "cli_width___cli_width_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz"; + sha1 = "b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"; + }; + } + { + name = "clipboardy___clipboardy_2.3.0.tgz"; + path = fetchurl { + name = "clipboardy___clipboardy_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz"; + sha1 = "3c2903650c68e46a91b388985bc2774287dba290"; + }; + } + { + name = "cliui___cliui_5.0.0.tgz"; + path = fetchurl { + name = "cliui___cliui_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz"; + sha1 = "deefcfdb2e800784aa34f46fa08e06851c7bbbc5"; + }; + } + { + name = "cliui___cliui_6.0.0.tgz"; + path = fetchurl { + name = "cliui___cliui_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz"; + sha1 = "511d702c0c4e41ca156d7d0e96021f23e13225b1"; + }; + } + { + name = "clone_deep___clone_deep_4.0.1.tgz"; + path = fetchurl { + name = "clone_deep___clone_deep_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz"; + sha1 = "c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"; + }; + } + { + 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 = "coa___coa_2.0.2.tgz"; + path = fetchurl { + name = "coa___coa_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz"; + sha1 = "43f6c21151b4ef2bf57187db0d73de229e3e7ec3"; + }; + } + { + 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.3.tgz"; + path = fetchurl { + name = "color_convert___color_convert_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"; + sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8"; + }; + } + { + name = "color_convert___color_convert_2.0.1.tgz"; + path = fetchurl { + name = "color_convert___color_convert_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"; + sha1 = "72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"; + }; + } + { + 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_name___color_name_1.1.4.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"; + sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2"; + }; + } + { + name = "color_string___color_string_1.5.3.tgz"; + path = fetchurl { + name = "color_string___color_string_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz"; + sha1 = "c9bbc5f01b58b5492f3d6857459cb6590ce204cc"; + }; + } + { + name = "color___color_3.1.2.tgz"; + path = fetchurl { + name = "color___color_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz"; + sha1 = "68148e7f85d41ad7649c5fa8c8106f098d229e10"; + }; + } + { + name = "combined_stream___combined_stream_1.0.8.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.8.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"; + sha1 = "c3d45a8b34fd730631a110a8a2520682b31d5a7f"; + }; + } + { + name = "commander___commander_2.17.1.tgz"; + path = fetchurl { + name = "commander___commander_2.17.1.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz"; + sha1 = "bd77ab7de6de94205ceacc72f1716d29f20a77bf"; + }; + } + { + name = "commander___commander_2.20.3.tgz"; + path = fetchurl { + name = "commander___commander_2.20.3.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"; + sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33"; + }; + } + { + name = "commander___commander_2.19.0.tgz"; + path = fetchurl { + name = "commander___commander_2.19.0.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz"; + sha1 = "f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"; + }; + } + { + name = "common_tags___common_tags_1.8.0.tgz"; + path = fetchurl { + name = "common_tags___common_tags_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz"; + sha1 = "8e3153e542d4a39e9b10554434afaaf98956a937"; + }; + } + { + 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.3.0.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"; + sha1 = "16e4070fba8ae29b679f2215853ee181ab2eabc0"; + }; + } + { + name = "compressible___compressible_2.0.18.tgz"; + path = fetchurl { + name = "compressible___compressible_2.0.18.tgz"; + url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz"; + sha1 = "af53cca6b070d4c3c0750fbd77286a6d7cc46fba"; + }; + } + { + name = "compression___compression_1.7.4.tgz"; + path = fetchurl { + name = "compression___compression_1.7.4.tgz"; + url = "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz"; + sha1 = "95523eff170ca57c29a0ca41e6fe131f41e5bb8f"; + }; + } + { + 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 = "concat_stream___concat_stream_1.6.2.tgz"; + path = fetchurl { + name = "concat_stream___concat_stream_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"; + sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"; + }; + } + { + name = "connect_history_api_fallback___connect_history_api_fallback_1.6.0.tgz"; + path = fetchurl { + name = "connect_history_api_fallback___connect_history_api_fallback_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz"; + sha1 = "8b32089359308d111115d81cad3fceab888f97bc"; + }; + } + { + name = "console_browserify___console_browserify_1.2.0.tgz"; + path = fetchurl { + name = "console_browserify___console_browserify_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz"; + sha1 = "67063cef57ceb6cf4993a2ab3a55840ae8c49336"; + }; + } + { + name = "consolidate___consolidate_0.15.1.tgz"; + path = fetchurl { + name = "consolidate___consolidate_0.15.1.tgz"; + url = "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz"; + sha1 = "21ab043235c71a07d45d9aad98593b0dba56bab7"; + }; + } + { + 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.3.tgz"; + path = fetchurl { + name = "content_disposition___content_disposition_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz"; + sha1 = "e130caf7e7279087c5616c2007d0485698984fbd"; + }; + } + { + 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_1.7.0.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"; + sha1 = "17a2cb882d7f77d3490585e2ce6c524424a3a442"; + }; + } + { + 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.4.0.tgz"; + path = fetchurl { + name = "cookie___cookie_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz"; + sha1 = "beb437e7022b3b6d49019d088665303ebe9c14ba"; + }; + } + { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + path = fetchurl { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"; + sha1 = "92297398cae34937fcafd6ec8139c18051f0b5e0"; + }; + } + { + 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 = "copy_webpack_plugin___copy_webpack_plugin_5.1.1.tgz"; + path = fetchurl { + name = "copy_webpack_plugin___copy_webpack_plugin_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz"; + sha1 = "5481a03dea1123d88a988c6ff8b78247214f0b88"; + }; + } + { + name = "core_js_compat___core_js_compat_3.6.5.tgz"; + path = fetchurl { + name = "core_js_compat___core_js_compat_3.6.5.tgz"; + url = "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz"; + sha1 = "2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"; + }; + } + { + name = "core_js___core_js_2.6.11.tgz"; + path = fetchurl { + name = "core_js___core_js_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz"; + sha1 = "38831469f9922bded8ee21c9dc46985e0399308c"; + }; + } + { + name = "core_js___core_js_3.6.5.tgz"; + path = fetchurl { + name = "core_js___core_js_3.6.5.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz"; + sha1 = "7395dc273af37fb2e50e9bd3d9fe841285231d1a"; + }; + } + { + 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 = "cosmiconfig___cosmiconfig_5.2.1.tgz"; + path = fetchurl { + name = "cosmiconfig___cosmiconfig_5.2.1.tgz"; + url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz"; + sha1 = "040f726809c591e77a17c0a3626ca45b4f168b1a"; + }; + } + { + 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_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 = "cross_spawn___cross_spawn_6.0.5.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"; + sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"; + }; + } + { + name = "cross_spawn___cross_spawn_7.0.3.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_7.0.3.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz"; + sha1 = "f73a85b9d5d41d045551c177e2882d4ac85728a6"; + }; + } + { + 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_declaration_sorter___css_declaration_sorter_4.0.1.tgz"; + path = fetchurl { + name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"; + sha1 = "c198940f63a76d7e36c1e71018b001721054cb22"; + }; + } + { + name = "css_loader___css_loader_3.5.3.tgz"; + path = fetchurl { + name = "css_loader___css_loader_3.5.3.tgz"; + url = "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz"; + sha1 = "95ac16468e1adcd95c844729e0bb167639eb0bcf"; + }; + } + { + name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz"; + path = fetchurl { + name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"; + sha1 = "3b2ff4972cc362ab88561507a95408a1432135d7"; + }; + } + { + 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_select___css_select_2.1.0.tgz"; + path = fetchurl { + name = "css_select___css_select_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz"; + sha1 = "6a34653356635934a81baca68d0255432105dbef"; + }; + } + { + name = "css_tree___css_tree_1.0.0_alpha.37.tgz"; + path = fetchurl { + name = "css_tree___css_tree_1.0.0_alpha.37.tgz"; + url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz"; + sha1 = "98bebd62c4c1d9f960ec340cf9f7522e30709a22"; + }; + } + { + name = "css_tree___css_tree_1.0.0_alpha.39.tgz"; + path = fetchurl { + name = "css_tree___css_tree_1.0.0_alpha.39.tgz"; + url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz"; + sha1 = "2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb"; + }; + } + { + name = "css_what___css_what_2.1.3.tgz"; + path = fetchurl { + name = "css_what___css_what_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz"; + sha1 = "a6d7604573365fe74686c3f311c56513d88285f2"; + }; + } + { + name = "css_what___css_what_3.3.0.tgz"; + path = fetchurl { + name = "css_what___css_what_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz"; + sha1 = "10fec696a9ece2e591ac772d759aacabac38cd39"; + }; + } + { + name = "cssesc___cssesc_3.0.0.tgz"; + path = fetchurl { + name = "cssesc___cssesc_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz"; + sha1 = "37741919903b868565e1c09ea747445cd18983ee"; + }; + } + { + name = "cssnano_preset_default___cssnano_preset_default_4.0.7.tgz"; + path = fetchurl { + name = "cssnano_preset_default___cssnano_preset_default_4.0.7.tgz"; + url = "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz"; + sha1 = "51ec662ccfca0f88b396dcd9679cdb931be17f76"; + }; + } + { + name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz"; + path = fetchurl { + name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"; + sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f"; + }; + } + { + name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz"; + path = fetchurl { + name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"; + sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d"; + }; + } + { + name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz"; + path = fetchurl { + name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"; + sha1 = "b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"; + }; + } + { + name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz"; + path = fetchurl { + name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"; + sha1 = "574082fb2859d2db433855835d9a8456ea18bbf3"; + }; + } + { + name = "cssnano___cssnano_4.1.10.tgz"; + path = fetchurl { + name = "cssnano___cssnano_4.1.10.tgz"; + url = "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz"; + sha1 = "0ac41f0b13d13d465487e111b778d42da631b8b2"; + }; + } + { + name = "csso___csso_4.0.3.tgz"; + path = fetchurl { + name = "csso___csso_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz"; + sha1 = "0d9985dc852c7cc2b2cacfbbe1079014d1a8e903"; + }; + } + { + name = "cyclist___cyclist_1.0.1.tgz"; + path = fetchurl { + name = "cyclist___cyclist_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz"; + sha1 = "596e9698fd0c80e12038c2b82d6eb1b35b6224d9"; + }; + } + { + 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 = "de_indent___de_indent_1.0.2.tgz"; + path = fetchurl { + name = "de_indent___de_indent_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz"; + sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d"; + }; + } + { + 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.2.6.tgz"; + path = fetchurl { + name = "debug___debug_3.2.6.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; + sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; + }; + } + { + name = "debug___debug_4.1.1.tgz"; + path = fetchurl { + name = "debug___debug_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz"; + sha1 = "3b72260255109c6b589cee050f1d516139664791"; + }; + } + { + 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.1.1.tgz"; + path = fetchurl { + name = "deep_equal___deep_equal_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz"; + sha1 = "b5c98c942ceffaf7cb051e24e1434a25a2e6076a"; + }; + } + { + name = "deep_is___deep_is_0.1.3.tgz"; + path = fetchurl { + name = "deep_is___deep_is_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + } + { + name = "deepmerge___deepmerge_1.5.2.tgz"; + path = fetchurl { + name = "deepmerge___deepmerge_1.5.2.tgz"; + url = "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz"; + sha1 = "10499d868844cdad4fee0842df8c7f6f0c95a753"; + }; + } + { + name = "default_gateway___default_gateway_4.2.0.tgz"; + path = fetchurl { + name = "default_gateway___default_gateway_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz"; + sha1 = "167104c7500c2115f6dd69b0a536bb8ed720552b"; + }; + } + { + name = "default_gateway___default_gateway_5.0.5.tgz"; + path = fetchurl { + name = "default_gateway___default_gateway_5.0.5.tgz"; + url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz"; + sha1 = "4fd6bd5d2855d39b34cc5a59505486e9aafc9b10"; + }; + } + { + name = "defaults___defaults_1.0.3.tgz"; + path = fetchurl { + name = "defaults___defaults_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + } + { + name = "define_properties___define_properties_1.1.3.tgz"; + path = fetchurl { + name = "define_properties___define_properties_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"; + sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1"; + }; + } + { + 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 = "del___del_4.1.1.tgz"; + path = fetchurl { + name = "del___del_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz"; + sha1 = "9e8f117222ea44a31ff3a156c049b99052a9f0b4"; + }; + } + { + 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 = "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.1.tgz"; + path = fetchurl { + name = "des.js___des.js_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz"; + sha1 = "5382142e1bdc53f85d86d53e5f4aa7deb91e0843"; + }; + } + { + 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_node___detect_node_2.0.4.tgz"; + path = fetchurl { + name = "detect_node___detect_node_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz"; + sha1 = "014ee8f8f669c5c58023da64b8179c083a28c46c"; + }; + } + { + 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 = "dir_glob___dir_glob_2.2.2.tgz"; + path = fetchurl { + name = "dir_glob___dir_glob_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz"; + sha1 = "fa09f0694153c8918b18ba0deafae94769fc50c4"; + }; + } + { + 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 = "doctrine___doctrine_3.0.0.tgz"; + path = fetchurl { + name = "doctrine___doctrine_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz"; + sha1 = "addebead72a6574db783639dc87a121773973961"; + }; + } + { + name = "dom_converter___dom_converter_0.2.0.tgz"; + path = fetchurl { + name = "dom_converter___dom_converter_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz"; + sha1 = "6721a9daee2e293682955b6afe416771627bb768"; + }; + } + { + name = "dom_serializer___dom_serializer_0.2.2.tgz"; + path = fetchurl { + name = "dom_serializer___dom_serializer_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz"; + sha1 = "1afb81f533717175d478655debc5e332d9f9bb51"; + }; + } + { + 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.1.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz"; + sha1 = "d048c44b37b0d10a7f2a3d5fee3f4333d790481f"; + }; + } + { + name = "domelementtype___domelementtype_2.0.1.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz"; + sha1 = "1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"; + }; + } + { + name = "domhandler___domhandler_2.4.2.tgz"; + path = fetchurl { + name = "domhandler___domhandler_2.4.2.tgz"; + url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz"; + sha1 = "8805097e933d65e85546f726d60f5eb88b44f803"; + }; + } + { + 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 = "domutils___domutils_1.7.0.tgz"; + path = fetchurl { + name = "domutils___domutils_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz"; + sha1 = "56ea341e834e06e6748af7a1cb25da67ea9f8c2a"; + }; + } + { + name = "dot_prop___dot_prop_5.2.0.tgz"; + path = fetchurl { + name = "dot_prop___dot_prop_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz"; + sha1 = "c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"; + }; + } + { + name = "dotenv_expand___dotenv_expand_5.1.0.tgz"; + path = fetchurl { + name = "dotenv_expand___dotenv_expand_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz"; + sha1 = "3fbaf020bfd794884072ea26b1e9791d45a629f0"; + }; + } + { + name = "dotenv___dotenv_8.2.0.tgz"; + path = fetchurl { + name = "dotenv___dotenv_8.2.0.tgz"; + url = "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz"; + sha1 = "97e619259ada750eea3e4ea3e26bceea5424b16a"; + }; + } + { + name = "duplexer___duplexer_0.1.1.tgz"; + path = fetchurl { + name = "duplexer___duplexer_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz"; + sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1"; + }; + } + { + name = "duplexify___duplexify_3.7.1.tgz"; + path = fetchurl { + name = "duplexify___duplexify_3.7.1.tgz"; + url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"; + sha1 = "2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"; + }; + } + { + name = "easy_stack___easy_stack_1.0.0.tgz"; + path = fetchurl { + name = "easy_stack___easy_stack_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz"; + sha1 = "12c91b3085a37f0baa336e9486eac4bf94e3e788"; + }; + } + { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + } + { + 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 = "ejs___ejs_2.7.4.tgz"; + path = fetchurl { + name = "ejs___ejs_2.7.4.tgz"; + url = "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz"; + sha1 = "48661287573dcc53e366c7a1ae52c3a120eec9ba"; + }; + } + { + name = "electron_to_chromium___electron_to_chromium_1.3.464.tgz"; + path = fetchurl { + name = "electron_to_chromium___electron_to_chromium_1.3.464.tgz"; + url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.464.tgz"; + sha1 = "fe13feaa08f6f865d3c89d5d72e54c194f463aa5"; + }; + } + { + name = "elliptic___elliptic_6.5.2.tgz"; + path = fetchurl { + name = "elliptic___elliptic_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz"; + sha1 = "05c5678d7173c049d8ca433552224a495d0e3762"; + }; + } + { + name = "emoji_regex___emoji_regex_7.0.3.tgz"; + path = fetchurl { + name = "emoji_regex___emoji_regex_7.0.3.tgz"; + url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz"; + sha1 = "933a04052860c85e83c122479c4748a8e4c72156"; + }; + } + { + name = "emoji_regex___emoji_regex_8.0.0.tgz"; + path = fetchurl { + name = "emoji_regex___emoji_regex_8.0.0.tgz"; + url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz"; + sha1 = "e818fd69ce5ccfcb404594f842963bf53164cc37"; + }; + } + { + 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 = "emojis_list___emojis_list_3.0.0.tgz"; + path = fetchurl { + name = "emojis_list___emojis_list_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz"; + sha1 = "5570662046ad29e2e916e71aae260abdff4f6a78"; + }; + } + { + 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 = "end_of_stream___end_of_stream_1.4.4.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_1.4.4.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"; + sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"; + }; + } + { + name = "enhanced_resolve___enhanced_resolve_4.1.1.tgz"; + path = fetchurl { + name = "enhanced_resolve___enhanced_resolve_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz"; + sha1 = "2937e2b8066cd0fe7ce0990a98f0d71a35189f66"; + }; + } + { + name = "entities___entities_1.1.2.tgz"; + path = fetchurl { + name = "entities___entities_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz"; + sha1 = "bdfa735299664dfafd34529ed4f8522a275fea56"; + }; + } + { + name = "entities___entities_2.0.3.tgz"; + path = fetchurl { + name = "entities___entities_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz"; + sha1 = "5c487e5742ab93c15abb5da22759b8590ec03b7f"; + }; + } + { + 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.6.tgz"; + path = fetchurl { + name = "error_stack_parser___error_stack_parser_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz"; + sha1 = "5a99a707bd7a4c58a797902d48d82803ede6aad8"; + }; + } + { + name = "es_abstract___es_abstract_1.17.5.tgz"; + path = fetchurl { + name = "es_abstract___es_abstract_1.17.5.tgz"; + url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz"; + sha1 = "d8c9d1d66c8981fb9200e2251d799eee92774ae9"; + }; + } + { + name = "es_to_primitive___es_to_primitive_1.2.1.tgz"; + path = fetchurl { + name = "es_to_primitive___es_to_primitive_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz"; + sha1 = "e55cd4c9cdc188bcefb03b366c736323fc5c898a"; + }; + } + { + 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 = "eslint_config_prettier___eslint_config_prettier_6.11.0.tgz"; + path = fetchurl { + name = "eslint_config_prettier___eslint_config_prettier_6.11.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz"; + sha1 = "f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1"; + }; + } + { + name = "eslint_loader___eslint_loader_2.2.1.tgz"; + path = fetchurl { + name = "eslint_loader___eslint_loader_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz"; + sha1 = "28b9c12da54057af0845e2a6112701a2f6bf8337"; + }; + } + { + name = "eslint_plugin_prettier___eslint_plugin_prettier_3.1.3.tgz"; + path = fetchurl { + name = "eslint_plugin_prettier___eslint_plugin_prettier_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz"; + sha1 = "ae116a0fc0e598fdae48743a4430903de5b4e6ca"; + }; + } + { + name = "eslint_plugin_vue___eslint_plugin_vue_6.2.2.tgz"; + path = fetchurl { + name = "eslint_plugin_vue___eslint_plugin_vue_6.2.2.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz"; + sha1 = "27fecd9a3a24789b0f111ecdd540a9e56198e0fe"; + }; + } + { + name = "eslint_scope___eslint_scope_4.0.3.tgz"; + path = fetchurl { + name = "eslint_scope___eslint_scope_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz"; + sha1 = "ca03833310f6889a3264781aa82e63eb9cfe7848"; + }; + } + { + name = "eslint_scope___eslint_scope_5.1.0.tgz"; + path = fetchurl { + name = "eslint_scope___eslint_scope_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz"; + sha1 = "d0f971dfe59c69e0cada684b23d49dbf82600ce5"; + }; + } + { + name = "eslint_utils___eslint_utils_2.0.0.tgz"; + path = fetchurl { + name = "eslint_utils___eslint_utils_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz"; + sha1 = "7be1cc70f27a72a76cd14aa698bcabed6890e1cd"; + }; + } + { + name = "eslint_visitor_keys___eslint_visitor_keys_1.2.0.tgz"; + path = fetchurl { + name = "eslint_visitor_keys___eslint_visitor_keys_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz"; + sha1 = "74415ac884874495f78ec2a97349525344c981fa"; + }; + } + { + name = "eslint___eslint_7.2.0.tgz"; + path = fetchurl { + name = "eslint___eslint_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/eslint/-/eslint-7.2.0.tgz"; + sha1 = "d41b2e47804b30dbabb093a967fb283d560082e6"; + }; + } + { + name = "espree___espree_6.2.1.tgz"; + path = fetchurl { + name = "espree___espree_6.2.1.tgz"; + url = "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz"; + sha1 = "77fc72e1fd744a2052c20f38a5b575832e82734a"; + }; + } + { + name = "espree___espree_7.1.0.tgz"; + path = fetchurl { + name = "espree___espree_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz"; + sha1 = "a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c"; + }; + } + { + name = "esprima___esprima_4.0.1.tgz"; + path = fetchurl { + name = "esprima___esprima_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; + sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; + }; + } + { + name = "esquery___esquery_1.3.1.tgz"; + path = fetchurl { + name = "esquery___esquery_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz"; + sha1 = "b78b5828aa8e214e29fb74c4d5b752e1c033da57"; + }; + } + { + 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.3.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz"; + sha1 = "398ad3f3c5a24948be7725e83d11a7de28cdbd1d"; + }; + } + { + name = "estraverse___estraverse_5.1.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz"; + sha1 = "374309d39fd935ae500e7b92e8a6b4c720e59642"; + }; + } + { + name = "esutils___esutils_2.0.3.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"; + sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64"; + }; + } + { + 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_pubsub___event_pubsub_4.3.0.tgz"; + path = fetchurl { + name = "event_pubsub___event_pubsub_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz"; + sha1 = "f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"; + }; + } + { + name = "eventemitter3___eventemitter3_4.0.4.tgz"; + path = fetchurl { + name = "eventemitter3___eventemitter3_4.0.4.tgz"; + url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz"; + sha1 = "b5463ace635a083d018bdc7c917b4c5f10a85384"; + }; + } + { + name = "events___events_3.1.0.tgz"; + path = fetchurl { + name = "events___events_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz"; + sha1 = "84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"; + }; + } + { + name = "eventsource___eventsource_1.0.7.tgz"; + path = fetchurl { + name = "eventsource___eventsource_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz"; + sha1 = "8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"; + }; + } + { + 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.8.0.tgz"; + path = fetchurl { + name = "execa___execa_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz"; + sha1 = "d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"; + }; + } + { + name = "execa___execa_1.0.0.tgz"; + path = fetchurl { + name = "execa___execa_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"; + sha1 = "c6236a5bb4df6d6f15e88e7f017798216749ddd8"; + }; + } + { + name = "execa___execa_3.4.0.tgz"; + path = fetchurl { + name = "execa___execa_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz"; + sha1 = "c08ed4550ef65d858fac269ffc8572446f37eb89"; + }; + } + { + 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 = "express___express_4.17.1.tgz"; + path = fetchurl { + name = "express___express_4.17.1.tgz"; + url = "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz"; + sha1 = "4491fc38605cf51f8629d39c2b5d026f98a4c134"; + }; + } + { + 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 = "external_editor___external_editor_3.1.0.tgz"; + path = fetchurl { + name = "external_editor___external_editor_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz"; + sha1 = "cb03f740befae03ea4d283caed2741a83f335495"; + }; + } + { + 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 = "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_3.1.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; + sha1 = "545145077c501491e33b15ec408c294376e94ae4"; + }; + } + { + name = "fast_diff___fast_diff_1.2.0.tgz"; + path = fetchurl { + name = "fast_diff___fast_diff_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz"; + sha1 = "73ee11982d86caaf7959828d519cfe927fac5f03"; + }; + } + { + name = "fast_glob___fast_glob_2.2.7.tgz"; + path = fetchurl { + name = "fast_glob___fast_glob_2.2.7.tgz"; + url = "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz"; + sha1 = "6953857c3afa475fff92ee6015d52da70a4cd39d"; + }; + } + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; + sha1 = "874bf69c6f404c2b5d99c481341399fd55892633"; + }; + } + { + 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 = "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.3.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.11.3.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz"; + sha1 = "5c0e9a8968e8912c286639fde977a8b209f2508e"; + }; + } + { + name = "figgy_pudding___figgy_pudding_3.5.2.tgz"; + path = fetchurl { + name = "figgy_pudding___figgy_pudding_3.5.2.tgz"; + url = "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz"; + sha1 = "b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"; + }; + } + { + name = "figures___figures_3.2.0.tgz"; + path = fetchurl { + name = "figures___figures_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz"; + sha1 = "625c18bd293c604dc4a8ddb2febf0c88341746af"; + }; + } + { + name = "file_entry_cache___file_entry_cache_5.0.1.tgz"; + path = fetchurl { + name = "file_entry_cache___file_entry_cache_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz"; + sha1 = "ca0f6efa6dd3d561333fb14515065c2fafdf439c"; + }; + } + { + name = "file_loader___file_loader_4.3.0.tgz"; + path = fetchurl { + name = "file_loader___file_loader_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz"; + sha1 = "780f040f729b3d18019f20605f723e844b8a58af"; + }; + } + { + name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; + path = fetchurl { + name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; + sha1 = "553a7b8446ff6f684359c445f1e37a05dacc33dd"; + }; + } + { + name = "filesize___filesize_3.6.1.tgz"; + path = fetchurl { + name = "filesize___filesize_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz"; + sha1 = "090bb3ee01b6f801a8a8be99d31710b3422bb317"; + }; + } + { + 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 = "fill_range___fill_range_7.0.1.tgz"; + path = fetchurl { + name = "fill_range___fill_range_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz"; + sha1 = "1919a6a7c75fe38b2c7c77e5198535da9acdda40"; + }; + } + { + name = "finalhandler___finalhandler_1.1.2.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz"; + sha1 = "b7e7d000ffd11938d0fdb053506f6ebabe9f587d"; + }; + } + { + name = "find_cache_dir___find_cache_dir_0.1.1.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz"; + sha1 = "c8defae57c8a52a8a784f9e31c57c742e993a0b9"; + }; + } + { + name = "find_cache_dir___find_cache_dir_2.1.0.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz"; + sha1 = "8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"; + }; + } + { + name = "find_cache_dir___find_cache_dir_3.3.1.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz"; + sha1 = "89b33fad4a4670daa94f855f7fbe31d6d84fe880"; + }; + } + { + 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 = "find_up___find_up_3.0.0.tgz"; + path = fetchurl { + name = "find_up___find_up_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz"; + sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73"; + }; + } + { + name = "find_up___find_up_4.1.0.tgz"; + path = fetchurl { + name = "find_up___find_up_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz"; + sha1 = "97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"; + }; + } + { + name = "flat_cache___flat_cache_2.0.1.tgz"; + path = fetchurl { + name = "flat_cache___flat_cache_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz"; + sha1 = "5d296d6f04bda44a4630a301413bdbc2ec085ec0"; + }; + } + { + name = "flatted___flatted_2.0.2.tgz"; + path = fetchurl { + name = "flatted___flatted_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz"; + sha1 = "4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"; + }; + } + { + name = "flush_write_stream___flush_write_stream_1.1.1.tgz"; + path = fetchurl { + name = "flush_write_stream___flush_write_stream_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz"; + sha1 = "8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"; + }; + } + { + name = "follow_redirects___follow_redirects_1.11.0.tgz"; + path = fetchurl { + name = "follow_redirects___follow_redirects_1.11.0.tgz"; + url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz"; + sha1 = "afa14f08ba12a52963140fe43212658897bc0ecb"; + }; + } + { + 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 = "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.3.3.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; + sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; + }; + } + { + 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 = "from2___from2_2.3.0.tgz"; + path = fetchurl { + name = "from2___from2_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz"; + sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af"; + }; + } + { + name = "fs_extra___fs_extra_4.0.3.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz"; + sha1 = "0d852122e5bc5beb453fb028e9c0c9bf36340c94"; + }; + } + { + name = "fs_extra___fs_extra_7.0.1.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz"; + sha1 = "4f189c44aa123b895f722804f55ea23eadc348e9"; + }; + } + { + name = "fs_minipass___fs_minipass_2.1.0.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz"; + sha1 = "7f5036fdbf12c63c169190cbe4199c852271f9fb"; + }; + } + { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + path = fetchurl { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz"; + sha1 = "b47df53493ef911df75731e70a9ded0189db40c9"; + }; + } + { + 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.13.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz"; + sha1 = "f325cb0455592428bcf11b383370ef70e3bfcc38"; + }; + } + { + name = "fsevents___fsevents_2.1.3.tgz"; + path = fetchurl { + name = "fsevents___fsevents_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz"; + sha1 = "fb738703ae8d2f9fe900c33836ddebee8b97f23e"; + }; + } + { + 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 = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz"; + path = fetchurl { + name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"; + sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"; + }; + } + { + name = "gensync___gensync_1.0.0_beta.1.tgz"; + path = fetchurl { + name = "gensync___gensync_1.0.0_beta.1.tgz"; + url = "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz"; + sha1 = "58f4361ff987e5ff6e1e7a210827aa371eaac269"; + }; + } + { + name = "get_caller_file___get_caller_file_2.0.5.tgz"; + path = fetchurl { + name = "get_caller_file___get_caller_file_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz"; + sha1 = "4f94412a82db32f36e3b0b9741f8a97feb031f7e"; + }; + } + { + name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz"; + path = fetchurl { + name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz"; + sha1 = "b5fde77f22cbe35f390b4e089922c50bce6ef664"; + }; + } + { + name = "get_stdin___get_stdin_6.0.0.tgz"; + path = fetchurl { + name = "get_stdin___get_stdin_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz"; + sha1 = "9e09bf712b360ab9225e812048f71fde9c89657b"; + }; + } + { + 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_stream___get_stream_4.1.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz"; + sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"; + }; + } + { + name = "get_stream___get_stream_5.1.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz"; + sha1 = "01203cdc92597f9b909067c3e656cc1f4d3c4dc9"; + }; + } + { + 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_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_parent___glob_parent_5.1.1.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz"; + sha1 = "b6c1ef417c4e5663ea498f1c45afac6916bbc229"; + }; + } + { + name = "glob_to_regexp___glob_to_regexp_0.3.0.tgz"; + path = fetchurl { + name = "glob_to_regexp___glob_to_regexp_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz"; + sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab"; + }; + } + { + name = "glob___glob_7.1.6.tgz"; + path = fetchurl { + name = "glob___glob_7.1.6.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz"; + sha1 = "141f33b81a7c2492e125594307480c46679278a6"; + }; + } + { + name = "globals___globals_11.12.0.tgz"; + path = fetchurl { + name = "globals___globals_11.12.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz"; + sha1 = "ab8795338868a0babd8525758018c2a7eb95c42e"; + }; + } + { + name = "globals___globals_12.4.0.tgz"; + path = fetchurl { + name = "globals___globals_12.4.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz"; + sha1 = "a18813576a41b00a24a97e7f815918c2e19925f8"; + }; + } + { + 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 = "globby___globby_7.1.1.tgz"; + path = fetchurl { + name = "globby___globby_7.1.1.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz"; + sha1 = "fb2ccff9401f8600945dfada97440cca972b8680"; + }; + } + { + name = "globby___globby_9.2.0.tgz"; + path = fetchurl { + name = "globby___globby_9.2.0.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz"; + sha1 = "fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"; + }; + } + { + name = "graceful_fs___graceful_fs_4.2.4.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.2.4.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz"; + sha1 = "2256bde14d3632958c465ebc96dc467ca07a29fb"; + }; + } + { + name = "gzip_size___gzip_size_5.1.1.tgz"; + path = fetchurl { + name = "gzip_size___gzip_size_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz"; + sha1 = "cb9bee692f87c0612b232840a873904e4c135274"; + }; + } + { + name = "handle_thing___handle_thing_2.0.1.tgz"; + path = fetchurl { + name = "handle_thing___handle_thing_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz"; + sha1 = "857f79ce359580c340d43081cc648970d0bb234e"; + }; + } + { + 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_5.1.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.1.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; + sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; + }; + } + { + 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_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_flag___has_flag_4.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz"; + sha1 = "944771fd9c81c81265c4d6941860da06bb59479b"; + }; + } + { + name = "has_symbols___has_symbols_1.0.1.tgz"; + path = fetchurl { + name = "has_symbols___has_symbols_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz"; + sha1 = "9f5214758a44196c406d9bd76cebf81ec2dd31e8"; + }; + } + { + 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.1.0.tgz"; + path = fetchurl { + name = "hash_base___hash_base_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz"; + sha1 = "55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"; + }; + } + { + name = "hash_sum___hash_sum_1.0.2.tgz"; + path = fetchurl { + name = "hash_sum___hash_sum_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz"; + sha1 = "33b40777754c6432573c120cc3808bbd10d47f04"; + }; + } + { + name = "hash_sum___hash_sum_2.0.0.tgz"; + path = fetchurl { + name = "hash_sum___hash_sum_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz"; + sha1 = "81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"; + }; + } + { + name = "hash.js___hash.js_1.1.7.tgz"; + path = fetchurl { + name = "hash.js___hash.js_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz"; + sha1 = "0babca538e8d4ee4a0f8988d68866537a003cf42"; + }; + } + { + name = "he___he_1.2.0.tgz"; + path = fetchurl { + name = "he___he_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz"; + sha1 = "84ae65fa7eafb165fddb61566ae14baf05664f0f"; + }; + } + { + name = "hex_color_regex___hex_color_regex_1.1.0.tgz"; + path = fetchurl { + name = "hex_color_regex___hex_color_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz"; + sha1 = "4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"; + }; + } + { + name = "highlight.js___highlight.js_9.18.1.tgz"; + path = fetchurl { + name = "highlight.js___highlight.js_9.18.1.tgz"; + url = "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz"; + sha1 = "ed21aa001fe6252bb10a3d76d47573c6539fe13c"; + }; + } + { + 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 = "hoopy___hoopy_0.1.4.tgz"; + path = fetchurl { + name = "hoopy___hoopy_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz"; + sha1 = "609207d661100033a9a9402ad3dea677381c1b1d"; + }; + } + { + name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz"; + sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488"; + }; + } + { + 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 = "hsl_regex___hsl_regex_1.0.0.tgz"; + path = fetchurl { + name = "hsl_regex___hsl_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz"; + sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e"; + }; + } + { + name = "hsla_regex___hsla_regex_1.0.0.tgz"; + path = fetchurl { + name = "hsla_regex___hsla_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz"; + sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"; + }; + } + { + name = "html_comment_regex___html_comment_regex_1.1.2.tgz"; + path = fetchurl { + name = "html_comment_regex___html_comment_regex_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz"; + sha1 = "97d4688aeb5c81886a364faa0cad1dda14d433a7"; + }; + } + { + name = "html_entities___html_entities_1.3.1.tgz"; + path = fetchurl { + name = "html_entities___html_entities_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz"; + sha1 = "fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"; + }; + } + { + name = "html_minifier___html_minifier_3.5.21.tgz"; + path = fetchurl { + name = "html_minifier___html_minifier_3.5.21.tgz"; + url = "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz"; + sha1 = "d0040e054730e354db008463593194015212d20c"; + }; + } + { + name = "html_tags___html_tags_2.0.0.tgz"; + path = fetchurl { + name = "html_tags___html_tags_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz"; + sha1 = "10b30a386085f43cede353cc8fa7cb0deeea668b"; + }; + } + { + name = "html_webpack_plugin___html_webpack_plugin_3.2.0.tgz"; + path = fetchurl { + name = "html_webpack_plugin___html_webpack_plugin_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz"; + sha1 = "b01abbd723acaaa7b37b6af4492ebda03d9dd37b"; + }; + } + { + name = "htmlparser2___htmlparser2_3.10.1.tgz"; + path = fetchurl { + name = "htmlparser2___htmlparser2_3.10.1.tgz"; + url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz"; + sha1 = "bd679dc3f59897b6a34bb10749c855bb53a9392f"; + }; + } + { + 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.7.2.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz"; + sha1 = "4f5029cf13239f31036e5b2e55292bcfbcc85c8f"; + }; + } + { + 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_errors___http_errors_1.7.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz"; + sha1 = "6c619e4f9c60308c38519498c14fbb10aacebb06"; + }; + } + { + name = "http_parser_js___http_parser_js_0.5.2.tgz"; + path = fetchurl { + name = "http_parser_js___http_parser_js_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz"; + sha1 = "da2e31d237b393aae72ace43882dd7e270a8ff77"; + }; + } + { + name = "http_proxy_middleware___http_proxy_middleware_0.19.1.tgz"; + path = fetchurl { + name = "http_proxy_middleware___http_proxy_middleware_0.19.1.tgz"; + url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz"; + sha1 = "183c7dc4aa1479150306498c210cdaf96080a43a"; + }; + } + { + name = "http_proxy___http_proxy_1.18.1.tgz"; + path = fetchurl { + name = "http_proxy___http_proxy_1.18.1.tgz"; + url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz"; + sha1 = "401541f0534884bbf95260334e72f88ee3976549"; + }; + } + { + 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 = "human_signals___human_signals_1.1.1.tgz"; + path = fetchurl { + name = "human_signals___human_signals_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz"; + sha1 = "c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"; + }; + } + { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; + }; + } + { + name = "icss_utils___icss_utils_4.1.1.tgz"; + path = fetchurl { + name = "icss_utils___icss_utils_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz"; + sha1 = "21170b53789ee27447c2f47dd683081403f9a467"; + }; + } + { + name = "ieee754___ieee754_1.1.13.tgz"; + path = fetchurl { + name = "ieee754___ieee754_1.1.13.tgz"; + url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz"; + sha1 = "ec168558e95aa181fd87d37f55c32bbcb6708b84"; + }; + } + { + name = "iferr___iferr_0.1.5.tgz"; + path = fetchurl { + name = "iferr___iferr_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz"; + sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"; + }; + } + { + name = "ignore___ignore_3.3.10.tgz"; + path = fetchurl { + name = "ignore___ignore_3.3.10.tgz"; + url = "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz"; + sha1 = "0a97fb876986e8081c631160f8f9f389157f0043"; + }; + } + { + name = "ignore___ignore_4.0.6.tgz"; + path = fetchurl { + name = "ignore___ignore_4.0.6.tgz"; + url = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz"; + sha1 = "750e3db5862087b4737ebac8207ffd1ef27b25fc"; + }; + } + { + name = "import_cwd___import_cwd_2.1.0.tgz"; + path = fetchurl { + name = "import_cwd___import_cwd_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz"; + sha1 = "aa6cf36e722761285cb371ec6519f53e2435b0a9"; + }; + } + { + name = "import_fresh___import_fresh_2.0.0.tgz"; + path = fetchurl { + name = "import_fresh___import_fresh_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz"; + sha1 = "d81355c15612d386c61f9ddd3922d4304822a546"; + }; + } + { + name = "import_fresh___import_fresh_3.2.1.tgz"; + path = fetchurl { + name = "import_fresh___import_fresh_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz"; + sha1 = "633ff618506e793af5ac91bf48b72677e15cbe66"; + }; + } + { + name = "import_from___import_from_2.1.0.tgz"; + path = fetchurl { + name = "import_from___import_from_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz"; + sha1 = "335db7f2a7affd53aaa471d4b8021dee36b7f3b1"; + }; + } + { + name = "import_local___import_local_2.0.0.tgz"; + path = fetchurl { + name = "import_local___import_local_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz"; + sha1 = "55070be38a5993cf18ef6db7e961f5bee5c5a09d"; + }; + } + { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + path = fetchurl { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + } + { + name = "indent_string___indent_string_4.0.0.tgz"; + path = fetchurl { + name = "indent_string___indent_string_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz"; + sha1 = "624f8f4497d619b2d9768531d58f4122854d7251"; + }; + } + { + 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 = "infer_owner___infer_owner_1.0.4.tgz"; + path = fetchurl { + name = "infer_owner___infer_owner_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz"; + sha1 = "c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"; + }; + } + { + 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.4.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz"; + sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c"; + }; + } + { + 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 = "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 = "inquirer___inquirer_7.1.0.tgz"; + path = fetchurl { + name = "inquirer___inquirer_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz"; + sha1 = "1298a01859883e17c7264b82870ae1034f92dd29"; + }; + } + { + name = "internal_ip___internal_ip_4.3.0.tgz"; + path = fetchurl { + name = "internal_ip___internal_ip_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz"; + sha1 = "845452baad9d2ca3b69c635a137acb9a0dad0907"; + }; + } + { + 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 = "ip_regex___ip_regex_2.1.0.tgz"; + path = fetchurl { + name = "ip_regex___ip_regex_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz"; + sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"; + }; + } + { + 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.9.1.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz"; + sha1 = "bff38543eeb8984825079ff3a2a8e6cbd46781b3"; + }; + } + { + 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_absolute_url___is_absolute_url_3.0.3.tgz"; + path = fetchurl { + name = "is_absolute_url___is_absolute_url_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz"; + sha1 = "96c6a22b6a23929b11ea0afb1836c36ad4a5d698"; + }; + } + { + 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_arguments___is_arguments_1.0.4.tgz"; + path = fetchurl { + name = "is_arguments___is_arguments_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz"; + sha1 = "3faf966c7cba0ff437fb31f6250082fcf0448cf3"; + }; + } + { + 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_arrayish___is_arrayish_0.3.2.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz"; + sha1 = "4574a2ae56f7ab206896fb431eaeed066fdf8f03"; + }; + } + { + 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_binary_path___is_binary_path_2.1.0.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz"; + sha1 = "ea1f7f3b80f064236e83470f86c09c254fb45b09"; + }; + } + { + 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_callable___is_callable_1.2.0.tgz"; + path = fetchurl { + name = "is_callable___is_callable_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz"; + sha1 = "83336560b54a38e35e3a2df7afd0454d691468bb"; + }; + } + { + name = "is_ci___is_ci_1.2.1.tgz"; + path = fetchurl { + name = "is_ci___is_ci_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz"; + sha1 = "e3779c8ee17fccf428488f6e281187f2e632841c"; + }; + } + { + name = "is_color_stop___is_color_stop_1.1.0.tgz"; + path = fetchurl { + name = "is_color_stop___is_color_stop_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz"; + sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345"; + }; + } + { + 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.2.tgz"; + path = fetchurl { + name = "is_date_object___is_date_object_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz"; + sha1 = "bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"; + }; + } + { + 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_directory___is_directory_0.3.1.tgz"; + path = fetchurl { + name = "is_directory___is_directory_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz"; + sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1"; + }; + } + { + name = "is_docker___is_docker_2.0.0.tgz"; + path = fetchurl { + name = "is_docker___is_docker_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz"; + sha1 = "2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"; + }; + } + { + 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_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_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_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"; + sha1 = "f116f8064fe90b3f7844a38997c0b75051269f1d"; + }; + } + { + 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.1.tgz"; + path = fetchurl { + name = "is_glob___is_glob_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz"; + sha1 = "7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"; + }; + } + { + 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_7.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz"; + sha1 = "7535345b896734d5f80c4d06c50955527a14f12b"; + }; + } + { + name = "is_obj___is_obj_1.0.1.tgz"; + path = fetchurl { + name = "is_obj___is_obj_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz"; + sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"; + }; + } + { + name = "is_obj___is_obj_2.0.0.tgz"; + path = fetchurl { + name = "is_obj___is_obj_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz"; + sha1 = "473fb05d973705e3fd9620545018ca8e22ef4982"; + }; + } + { + name = "is_path_cwd___is_path_cwd_2.2.0.tgz"; + path = fetchurl { + name = "is_path_cwd___is_path_cwd_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz"; + sha1 = "67d43b82664a7b5191fd9119127eb300048a9fdb"; + }; + } + { + name = "is_path_in_cwd___is_path_in_cwd_2.1.0.tgz"; + path = fetchurl { + name = "is_path_in_cwd___is_path_in_cwd_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz"; + sha1 = "bfe2dca26c69f397265a4009963602935a053acb"; + }; + } + { + name = "is_path_inside___is_path_inside_2.1.0.tgz"; + path = fetchurl { + name = "is_path_inside___is_path_inside_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz"; + sha1 = "7c9810587d659a40d27bcdb4d5616eab059494b2"; + }; + } + { + 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_regex___is_regex_1.1.0.tgz"; + path = fetchurl { + name = "is_regex___is_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz"; + sha1 = "ece38e389e490df0dc21caea2bd596f987f767ff"; + }; + } + { + name = "is_regexp___is_regexp_1.0.0.tgz"; + path = fetchurl { + name = "is_regexp___is_regexp_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz"; + sha1 = "fd2d883545c46bac5a633e7b9a09e87fa2cb5069"; + }; + } + { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + path = fetchurl { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz"; + sha1 = "fb18f87ce1feb925169c9a407c19318a3206ed88"; + }; + } + { + 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_stream___is_stream_2.0.0.tgz"; + path = fetchurl { + name = "is_stream___is_stream_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz"; + sha1 = "bde9c32680d6fae04129d6ac9d921ce7815f78e3"; + }; + } + { + name = "is_svg___is_svg_3.0.0.tgz"; + path = fetchurl { + name = "is_svg___is_svg_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz"; + sha1 = "9321dbd29c212e5ca99c4fa9794c714bcafa2f75"; + }; + } + { + name = "is_symbol___is_symbol_1.0.3.tgz"; + path = fetchurl { + name = "is_symbol___is_symbol_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz"; + sha1 = "38e1014b9e6329be0de9d24a414fd7441ec61937"; + }; + } + { + 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_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 = "is_wsl___is_wsl_2.2.0.tgz"; + path = fetchurl { + name = "is_wsl___is_wsl_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz"; + sha1 = "74a4c76e77ca9fd3f932f290c17ea326cd157271"; + }; + } + { + 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 = "javascript_stringify___javascript_stringify_2.0.1.tgz"; + path = fetchurl { + name = "javascript_stringify___javascript_stringify_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz"; + sha1 = "6ef358035310e35d667c675ed63d3eb7c1aa19e5"; + }; + } + { + name = "jest_worker___jest_worker_25.5.0.tgz"; + path = fetchurl { + name = "jest_worker___jest_worker_25.5.0.tgz"; + url = "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz"; + sha1 = "2611d071b79cea0f43ee57a3d118593ac1547db1"; + }; + } + { + name = "js_message___js_message_1.0.5.tgz"; + path = fetchurl { + name = "js_message___js_message_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz"; + sha1 = "2300d24b1af08e89dd095bc1a4c9c9cfcb892d15"; + }; + } + { + name = "js_queue___js_queue_2.0.0.tgz"; + path = fetchurl { + name = "js_queue___js_queue_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz"; + sha1 = "362213cf860f468f0125fc6c96abc1742531f948"; + }; + } + { + 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_yaml___js_yaml_3.14.0.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.14.0.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz"; + sha1 = "a7a34170f26a21bb162424d8adacb4113a69e482"; + }; + } + { + 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_2.5.2.tgz"; + path = fetchurl { + name = "jsesc___jsesc_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz"; + sha1 = "80564d2e483dacf6e8ef209650a67df3f0c283a4"; + }; + } + { + 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_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + path = fetchurl { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9"; + }; + } + { + 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_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"; + sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651"; + }; + } + { + 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.3.tgz"; + path = fetchurl { + name = "json3___json3_3.3.3.tgz"; + url = "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz"; + sha1 = "7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"; + }; + } + { + 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 = "json5___json5_1.0.1.tgz"; + path = fetchurl { + name = "json5___json5_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz"; + sha1 = "779fb0018604fa854eacbf6252180d83543e3dbe"; + }; + } + { + name = "json5___json5_2.1.3.tgz"; + path = fetchurl { + name = "json5___json5_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz"; + sha1 = "c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"; + }; + } + { + name = "jsonfile___jsonfile_4.0.0.tgz"; + path = fetchurl { + name = "jsonfile___jsonfile_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz"; + sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb"; + }; + } + { + 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.1.tgz"; + path = fetchurl { + name = "killable___killable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz"; + sha1 = "4c8ce441187a061c7474fb87ca08e2a638194892"; + }; + } + { + 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.3.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.3.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz"; + sha1 = "07c05034a6c349fa06e24fa35aa76db4580ce4dd"; + }; + } + { + name = "launch_editor_middleware___launch_editor_middleware_2.2.1.tgz"; + path = fetchurl { + name = "launch_editor_middleware___launch_editor_middleware_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz"; + sha1 = "e14b07e6c7154b0a4b86a0fd345784e45804c157"; + }; + } + { + name = "launch_editor___launch_editor_2.2.1.tgz"; + path = fetchurl { + name = "launch_editor___launch_editor_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz"; + sha1 = "871b5a3ee39d6680fcc26d37930b6eeda89db0ca"; + }; + } + { + name = "leven___leven_3.1.0.tgz"; + path = fetchurl { + name = "leven___leven_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz"; + sha1 = "77891de834064cccba82ae7842bb6b14a13ed7f2"; + }; + } + { + name = "levenary___levenary_1.1.1.tgz"; + path = fetchurl { + name = "levenary___levenary_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz"; + sha1 = "842a9ee98d2075aa7faeedbe32679e9205f46f77"; + }; + } + { + name = "levn___levn_0.4.1.tgz"; + path = fetchurl { + name = "levn___levn_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz"; + sha1 = "ae4562c007473b932a6200d403268dd2fffc6ade"; + }; + } + { + name = "lines_and_columns___lines_and_columns_1.1.6.tgz"; + path = fetchurl { + name = "lines_and_columns___lines_and_columns_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz"; + sha1 = "1c00c743b433cd0a4e80758f7b64a57440d9ff00"; + }; + } + { + name = "loader_fs_cache___loader_fs_cache_1.0.3.tgz"; + path = fetchurl { + name = "loader_fs_cache___loader_fs_cache_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz"; + sha1 = "f08657646d607078be2f0a032f8bd69dd6f277d9"; + }; + } + { + name = "loader_runner___loader_runner_2.4.0.tgz"; + path = fetchurl { + name = "loader_runner___loader_runner_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz"; + sha1 = "ed47066bfe534d7e84c4c7b9998c2a75607d9357"; + }; + } + { + name = "loader_utils___loader_utils_0.2.17.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_0.2.17.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz"; + sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348"; + }; + } + { + name = "loader_utils___loader_utils_1.4.0.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz"; + sha1 = "c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"; + }; + } + { + name = "loader_utils___loader_utils_2.0.0.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz"; + sha1 = "e4cace5b816d425a166b5f097e10cd12b36064b0"; + }; + } + { + 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 = "locate_path___locate_path_3.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz"; + sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e"; + }; + } + { + name = "locate_path___locate_path_5.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz"; + sha1 = "1afba396afd676a6d42504d0a67a3a7eb9f62aa0"; + }; + } + { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"; + sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d"; + }; + } + { + name = "lodash.defaultsdeep___lodash.defaultsdeep_4.6.1.tgz"; + path = fetchurl { + name = "lodash.defaultsdeep___lodash.defaultsdeep_4.6.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz"; + sha1 = "512e9bd721d272d94e3d3a63653fa17516741ca6"; + }; + } + { + name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz"; + path = fetchurl { + name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz"; + sha1 = "8489b1cb0d29ff88195cceca448ff6d6cc295c36"; + }; + } + { + name = "lodash.mapvalues___lodash.mapvalues_4.6.0.tgz"; + path = fetchurl { + name = "lodash.mapvalues___lodash.mapvalues_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz"; + sha1 = "1bafa5005de9dd6f4f26668c30ca37230cc9689c"; + }; + } + { + 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.merge___lodash.merge_4.6.2.tgz"; + path = fetchurl { + name = "lodash.merge___lodash.merge_4.6.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz"; + sha1 = "558aa53b43b661e1925a0afdfa36a9a1085fe57a"; + }; + } + { + name = "lodash.template___lodash.template_4.5.0.tgz"; + path = fetchurl { + name = "lodash.template___lodash.template_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz"; + sha1 = "f976195cf3f347d0d5f52483569fe8031ccce8ab"; + }; + } + { + name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; + path = fetchurl { + name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz"; + sha1 = "e481310f049d3cf6d47e912ad09313b154f0fb33"; + }; + } + { + name = "lodash.transform___lodash.transform_4.6.0.tgz"; + path = fetchurl { + name = "lodash.transform___lodash.transform_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz"; + sha1 = "12306422f63324aed8483d3f38332b5f670547a0"; + }; + } + { + 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.15.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.15.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz"; + sha1 = "b447f6670a0455bbfeedd11392eff330ea097548"; + }; + } + { + name = "log_symbols___log_symbols_2.2.0.tgz"; + path = fetchurl { + name = "log_symbols___log_symbols_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz"; + sha1 = "5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"; + }; + } + { + name = "loglevel___loglevel_1.6.8.tgz"; + path = fetchurl { + name = "loglevel___loglevel_1.6.8.tgz"; + url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz"; + sha1 = "8a25fb75d092230ecd4457270d80b54e28011171"; + }; + } + { + 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 = "lower_case___lower_case_1.1.4.tgz"; + path = fetchurl { + name = "lower_case___lower_case_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz"; + sha1 = "9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"; + }; + } + { + name = "lru_cache___lru_cache_4.1.5.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; + sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; + }; + } + { + name = "lru_cache___lru_cache_5.1.1.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz"; + sha1 = "1da27e6710271947695daf6848e847f01d84b920"; + }; + } + { + name = "make_dir___make_dir_2.1.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz"; + sha1 = "5f0310e18b8be898cc07009295a30ae41e91e6f5"; + }; + } + { + name = "make_dir___make_dir_3.1.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz"; + sha1 = "415e967046b3a7f1d185277d84aa58203726a13f"; + }; + } + { + 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_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 = "md5.js___md5.js_1.3.5.tgz"; + path = fetchurl { + name = "md5.js___md5.js_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz"; + sha1 = "b5d07b8e3216e3e27cd728d72f70d1e6a342005f"; + }; + } + { + name = "mdn_data___mdn_data_2.0.4.tgz"; + path = fetchurl { + name = "mdn_data___mdn_data_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz"; + sha1 = "699b3c38ac6f1d728091a64650b65d388502fd5b"; + }; + } + { + name = "mdn_data___mdn_data_2.0.6.tgz"; + path = fetchurl { + name = "mdn_data___mdn_data_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz"; + sha1 = "852dc60fcaa5daa2e8cf6c9189c440ed3e042978"; + }; + } + { + 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 = "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 = "memory_fs___memory_fs_0.5.0.tgz"; + path = fetchurl { + name = "memory_fs___memory_fs_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz"; + sha1 = "324c01288b88652966d161db77838720845a8e3c"; + }; + } + { + 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 = "merge_source_map___merge_source_map_1.1.0.tgz"; + path = fetchurl { + name = "merge_source_map___merge_source_map_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz"; + sha1 = "2fdde7e6020939f70906a68f2d7ae685e4c8c646"; + }; + } + { + name = "merge_stream___merge_stream_2.0.0.tgz"; + path = fetchurl { + name = "merge_stream___merge_stream_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz"; + sha1 = "52823629a14dd00c9770fb6ad47dc6310f2c1f60"; + }; + } + { + name = "merge2___merge2_1.4.1.tgz"; + path = fetchurl { + name = "merge2___merge2_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz"; + sha1 = "4368892f885e907455a6fd7dc55c0c9d404990ae"; + }; + } + { + 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_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.44.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.44.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz"; + sha1 = "fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"; + }; + } + { + name = "mime_types___mime_types_2.1.27.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.27.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz"; + sha1 = "47949f98e279ea53119f5722e0f34e529bec009f"; + }; + } + { + 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 = "mime___mime_2.4.6.tgz"; + path = fetchurl { + name = "mime___mime_2.4.6.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz"; + sha1 = "e5b407c90db442f2beb5b162373d07b69affa4d1"; + }; + } + { + 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 = "mimic_fn___mimic_fn_2.1.0.tgz"; + path = fetchurl { + name = "mimic_fn___mimic_fn_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz"; + sha1 = "7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"; + }; + } + { + name = "mini_css_extract_plugin___mini_css_extract_plugin_0.9.0.tgz"; + path = fetchurl { + name = "mini_css_extract_plugin___mini_css_extract_plugin_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz"; + sha1 = "47f2cf07aa165ab35733b1fc97d4c46c0564339e"; + }; + } + { + 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_1.2.5.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz"; + sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602"; + }; + } + { + name = "minipass_collect___minipass_collect_1.0.2.tgz"; + path = fetchurl { + name = "minipass_collect___minipass_collect_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz"; + sha1 = "22b813bf745dc6edba2576b940022ad6edc8c617"; + }; + } + { + name = "minipass_flush___minipass_flush_1.0.5.tgz"; + path = fetchurl { + name = "minipass_flush___minipass_flush_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz"; + sha1 = "82e7135d7e89a50ffe64610a787953c4c4cbb373"; + }; + } + { + name = "minipass_pipeline___minipass_pipeline_1.2.3.tgz"; + path = fetchurl { + name = "minipass_pipeline___minipass_pipeline_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz"; + sha1 = "55f7839307d74859d6e8ada9c3ebe72cec216a34"; + }; + } + { + name = "minipass___minipass_3.1.3.tgz"; + path = fetchurl { + name = "minipass___minipass_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz"; + sha1 = "7d42ff1f39635482e15f9cdb53184deebd5815fd"; + }; + } + { + name = "mississippi___mississippi_3.0.0.tgz"; + path = fetchurl { + name = "mississippi___mississippi_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz"; + sha1 = "ea0a3291f97e0b5e8776b363d5f0a12d94c67022"; + }; + } + { + name = "mixin_deep___mixin_deep_1.3.2.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz"; + sha1 = "1120b43dc359a785dce65b55b82e257ccf479566"; + }; + } + { + name = "mkdirp___mkdirp_0.5.5.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.5.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz"; + sha1 = "d91cefd62d1436ca0f41620e251288d420099def"; + }; + } + { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + path = fetchurl { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz"; + sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92"; + }; + } + { + 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 = "ms___ms_2.1.1.tgz"; + path = fetchurl { + name = "ms___ms_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz"; + sha1 = "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"; + }; + } + { + name = "ms___ms_2.1.2.tgz"; + path = fetchurl { + name = "ms___ms_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz"; + sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009"; + }; + } + { + 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 = "mute_stream___mute_stream_0.0.8.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz"; + sha1 = "1630c42b2251ff81e2a283de96a5497ea92e5e0d"; + }; + } + { + name = "mz___mz_2.7.0.tgz"; + path = fetchurl { + name = "mz___mz_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz"; + sha1 = "95008057a56cafadc2bc63dde7f9ff6955948e32"; + }; + } + { + name = "nan___nan_2.14.1.tgz"; + path = fetchurl { + name = "nan___nan_2.14.1.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz"; + sha1 = "d7be34dfa3105b91494c3147089315eff8874b01"; + }; + } + { + 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 = "natural_compare___natural_compare_1.4.0.tgz"; + path = fetchurl { + name = "natural_compare___natural_compare_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz"; + sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"; + }; + } + { + name = "negotiator___negotiator_0.6.2.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.6.2.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz"; + sha1 = "feacf7ccf525a77ae9634436a64883ffeca346fb"; + }; + } + { + name = "neo_async___neo_async_2.6.1.tgz"; + path = fetchurl { + name = "neo_async___neo_async_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz"; + sha1 = "ac27ada66167fa8849a6addd837f6b189ad2081c"; + }; + } + { + name = "nice_try___nice_try_1.0.5.tgz"; + path = fetchurl { + name = "nice_try___nice_try_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz"; + sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366"; + }; + } + { + name = "no_case___no_case_2.3.2.tgz"; + path = fetchurl { + name = "no_case___no_case_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz"; + sha1 = "60b813396be39b3f1288a4c1ed5d1e7d28b464ac"; + }; + } + { + name = "node_forge___node_forge_0.9.0.tgz"; + path = fetchurl { + name = "node_forge___node_forge_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz"; + sha1 = "d624050edbb44874adca12bb9a52ec63cb782579"; + }; + } + { + name = "node_ipc___node_ipc_9.1.1.tgz"; + path = fetchurl { + name = "node_ipc___node_ipc_9.1.1.tgz"; + url = "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz"; + sha1 = "4e245ed6938e65100e595ebc5dc34b16e8dd5d69"; + }; + } + { + name = "node_libs_browser___node_libs_browser_2.2.1.tgz"; + path = fetchurl { + name = "node_libs_browser___node_libs_browser_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz"; + sha1 = "b64f513d18338625f90346d27b0d235e631f6425"; + }; + } + { + name = "node_releases___node_releases_1.1.58.tgz"; + path = fetchurl { + name = "node_releases___node_releases_1.1.58.tgz"; + url = "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz"; + sha1 = "8ee20eef30fa60e52755fcc0942def5a734fe935"; + }; + } + { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz"; + sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8"; + }; + } + { + name = "normalize_path___normalize_path_1.0.0.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz"; + sha1 = "32d0e472f91ff345701c15a8311018d3b0a90379"; + }; + } + { + 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_path___normalize_path_3.0.0.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz"; + sha1 = "0dcd69ff23a1c9b11fd0978316644a0388216a65"; + }; + } + { + 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 = "normalize_url___normalize_url_3.3.0.tgz"; + path = fetchurl { + name = "normalize_url___normalize_url_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz"; + sha1 = "b2e1c4dc4f7c6d57743df733a4f5978d18650559"; + }; + } + { + 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 = "npm_run_path___npm_run_path_4.0.1.tgz"; + path = fetchurl { + name = "npm_run_path___npm_run_path_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz"; + sha1 = "b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"; + }; + } + { + name = "nth_check___nth_check_1.0.2.tgz"; + path = fetchurl { + name = "nth_check___nth_check_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz"; + sha1 = "b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"; + }; + } + { + 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 = "oauth_sign___oauth_sign_0.9.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; + }; + } + { + 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_hash___object_hash_1.3.1.tgz"; + path = fetchurl { + name = "object_hash___object_hash_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz"; + sha1 = "fde452098a951cb145f039bb7d455449ddc126df"; + }; + } + { + name = "object_inspect___object_inspect_1.7.0.tgz"; + path = fetchurl { + name = "object_inspect___object_inspect_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz"; + sha1 = "f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"; + }; + } + { + name = "object_is___object_is_1.1.2.tgz"; + path = fetchurl { + name = "object_is___object_is_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz"; + sha1 = "c5d2e87ff9e119f78b7a088441519e2eec1573b6"; + }; + } + { + name = "object_keys___object_keys_1.1.1.tgz"; + path = fetchurl { + name = "object_keys___object_keys_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz"; + sha1 = "1c47f272df277f3b1daf061677d9c82e2322c60e"; + }; + } + { + 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.assign___object.assign_4.1.0.tgz"; + path = fetchurl { + name = "object.assign___object.assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz"; + sha1 = "968bf1100d7956bb3ca086f006f846b3bc4008da"; + }; + } + { + name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.1.0.tgz"; + path = fetchurl { + name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"; + sha1 = "369bf1f9592d8ab89d712dced5cb81c7c5352649"; + }; + } + { + 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 = "object.values___object.values_1.1.1.tgz"; + path = fetchurl { + name = "object.values___object.values_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz"; + sha1 = "68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"; + }; + } + { + 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.2.tgz"; + path = fetchurl { + name = "on_headers___on_headers_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz"; + sha1 = "772b0ae6aaa525c399e489adfad90c403eb3c28f"; + }; + } + { + 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 = "onetime___onetime_2.0.1.tgz"; + path = fetchurl { + name = "onetime___onetime_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz"; + sha1 = "067428230fd67443b2794b22bba528b6867962d4"; + }; + } + { + name = "onetime___onetime_5.1.0.tgz"; + path = fetchurl { + name = "onetime___onetime_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz"; + sha1 = "fff0f3c91617fe62bb50189636e99ac8a6df7be5"; + }; + } + { + name = "open___open_6.4.0.tgz"; + path = fetchurl { + name = "open___open_6.4.0.tgz"; + url = "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz"; + sha1 = "5c13e96d0dc894686164f18965ecfe889ecfc8a9"; + }; + } + { + name = "opener___opener_1.5.1.tgz"; + path = fetchurl { + name = "opener___opener_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz"; + sha1 = "6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"; + }; + } + { + name = "opn___opn_5.5.0.tgz"; + path = fetchurl { + name = "opn___opn_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz"; + sha1 = "fc7164fab56d235904c51c3b27da6758ca3b9bfc"; + }; + } + { + name = "optionator___optionator_0.9.1.tgz"; + path = fetchurl { + name = "optionator___optionator_0.9.1.tgz"; + url = "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz"; + sha1 = "4f236a6373dae0566a6d43e1326674f50c291499"; + }; + } + { + name = "ora___ora_3.4.0.tgz"; + path = fetchurl { + name = "ora___ora_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz"; + sha1 = "bf0752491059a3ef3ed4c85097531de9fdbcd318"; + }; + } + { + name = "original___original_1.0.2.tgz"; + path = fetchurl { + name = "original___original_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz"; + sha1 = "e442a61cffe1c5fd20a65f3261c26663b303f25f"; + }; + } + { + 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_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 = "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_finally___p_finally_2.0.1.tgz"; + path = fetchurl { + name = "p_finally___p_finally_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz"; + sha1 = "bd6fcaa9c559a096b680806f4d657b3f0f240561"; + }; + } + { + 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_limit___p_limit_2.3.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz"; + sha1 = "3dd33c647a214fdfffd835933eb086da0dc21db1"; + }; + } + { + 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_locate___p_locate_3.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz"; + sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4"; + }; + } + { + name = "p_locate___p_locate_4.1.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz"; + sha1 = "a3428bb7088b3a60292f66919278b7c297ad4f07"; + }; + } + { + name = "p_map___p_map_2.1.0.tgz"; + path = fetchurl { + name = "p_map___p_map_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz"; + sha1 = "310928feef9c9ecc65b68b17693018a665cea175"; + }; + } + { + name = "p_map___p_map_3.0.0.tgz"; + path = fetchurl { + name = "p_map___p_map_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz"; + sha1 = "d704d9af8a2ba684e2600d9a215983d4141a979d"; + }; + } + { + name = "p_retry___p_retry_3.0.1.tgz"; + path = fetchurl { + name = "p_retry___p_retry_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz"; + sha1 = "316b4c8893e2c8dc1cfa891f406c4b422bebf328"; + }; + } + { + 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 = "p_try___p_try_2.2.0.tgz"; + path = fetchurl { + name = "p_try___p_try_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz"; + sha1 = "cb2868540e313d61de58fafbe35ce9004d5540e6"; + }; + } + { + name = "pako___pako_1.0.11.tgz"; + path = fetchurl { + name = "pako___pako_1.0.11.tgz"; + url = "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz"; + sha1 = "6c9599d340d54dfd3946380252a35705a6b992bf"; + }; + } + { + name = "parallel_transform___parallel_transform_1.2.0.tgz"; + path = fetchurl { + name = "parallel_transform___parallel_transform_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz"; + sha1 = "9049ca37d6cb2182c3b1d2c720be94d14a5814fc"; + }; + } + { + name = "param_case___param_case_2.1.1.tgz"; + path = fetchurl { + name = "param_case___param_case_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz"; + sha1 = "df94fd8cf6531ecf75e6bef9a0858fbc72be2247"; + }; + } + { + name = "parent_module___parent_module_1.0.1.tgz"; + path = fetchurl { + name = "parent_module___parent_module_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz"; + sha1 = "691d2709e78c79fae3a156622452d00762caaaa2"; + }; + } + { + name = "parse_asn1___parse_asn1_5.1.5.tgz"; + path = fetchurl { + name = "parse_asn1___parse_asn1_5.1.5.tgz"; + url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz"; + sha1 = "003271343da58dc94cace494faef3d2147ecea0e"; + }; + } + { + name = "parse_json___parse_json_4.0.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz"; + sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0"; + }; + } + { + name = "parse_json___parse_json_5.0.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz"; + sha1 = "73e5114c986d143efa3712d4ea24db9a4266f60f"; + }; + } + { + name = "parse5_htmlparser2_tree_adapter___parse5_htmlparser2_tree_adapter_5.1.1.tgz"; + path = fetchurl { + name = "parse5_htmlparser2_tree_adapter___parse5_htmlparser2_tree_adapter_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz"; + sha1 = "e8c743d4e92194d5293ecde2b08be31e67461cbc"; + }; + } + { + name = "parse5___parse5_5.1.1.tgz"; + path = fetchurl { + name = "parse5___parse5_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz"; + sha1 = "f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"; + }; + } + { + name = "parseurl___parseurl_1.3.3.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz"; + sha1 = "9da19e7bee8d12dff0513ed5b76957793bc2e8d4"; + }; + } + { + 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.1.tgz"; + path = fetchurl { + name = "path_browserify___path_browserify_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz"; + sha1 = "e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"; + }; + } + { + 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_exists___path_exists_4.0.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz"; + sha1 = "513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"; + }; + } + { + 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_key___path_key_3.1.1.tgz"; + path = fetchurl { + name = "path_key___path_key_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz"; + sha1 = "581f6ade658cbba65a0d3380de7753295054f375"; + }; + } + { + name = "path_parse___path_parse_1.0.6.tgz"; + path = fetchurl { + name = "path_parse___path_parse_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; + sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; + }; + } + { + 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_3.0.0.tgz"; + path = fetchurl { + name = "path_type___path_type_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz"; + sha1 = "cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"; + }; + } + { + name = "pbkdf2___pbkdf2_3.1.1.tgz"; + path = fetchurl { + name = "pbkdf2___pbkdf2_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz"; + sha1 = "cb8724b0fada984596856d1a6ebafd3584654b94"; + }; + } + { + 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 = "picomatch___picomatch_2.2.2.tgz"; + path = fetchurl { + name = "picomatch___picomatch_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz"; + sha1 = "21f333e9b6b8eaff02468f5146ea406d345f4dad"; + }; + } + { + 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 = "pify___pify_4.0.1.tgz"; + path = fetchurl { + name = "pify___pify_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz"; + sha1 = "4b2cd25c50d598735c50292224fd8c6df41e3231"; + }; + } + { + 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_1.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz"; + sha1 = "7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"; + }; + } + { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz"; + sha1 = "2749020f239ed990881b1f71210d51eb6523bea3"; + }; + } + { + name = "pkg_dir___pkg_dir_4.2.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz"; + sha1 = "f099133df7ede422e81d1d8448270eeb3e4261f3"; + }; + } + { + name = "pkg_up___pkg_up_2.0.0.tgz"; + path = fetchurl { + name = "pkg_up___pkg_up_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz"; + sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f"; + }; + } + { + name = "pnp_webpack_plugin___pnp_webpack_plugin_1.6.4.tgz"; + path = fetchurl { + name = "pnp_webpack_plugin___pnp_webpack_plugin_1.6.4.tgz"; + url = "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz"; + sha1 = "c9711ac4dc48a685dabafc86f8b6dd9f8df84149"; + }; + } + { + name = "portfinder___portfinder_1.0.26.tgz"; + path = fetchurl { + name = "portfinder___portfinder_1.0.26.tgz"; + url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz"; + sha1 = "475658d56ca30bed72ac7f1378ed350bd1b64e70"; + }; + } + { + 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_7.0.2.tgz"; + path = fetchurl { + name = "postcss_calc___postcss_calc_7.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz"; + sha1 = "504efcd008ca0273120568b0792b16cdcde8aac1"; + }; + } + { + name = "postcss_colormin___postcss_colormin_4.0.3.tgz"; + path = fetchurl { + name = "postcss_colormin___postcss_colormin_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz"; + sha1 = "ae060bce93ed794ac71264f08132d550956bd381"; + }; + } + { + name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz"; + path = fetchurl { + name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz"; + sha1 = "ca3813ed4da0f812f9d43703584e449ebe189a7f"; + }; + } + { + name = "postcss_discard_comments___postcss_discard_comments_4.0.2.tgz"; + path = fetchurl { + name = "postcss_discard_comments___postcss_discard_comments_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz"; + sha1 = "1fbabd2c246bff6aaad7997b2b0918f4d7af4033"; + }; + } + { + name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz"; + path = fetchurl { + name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz"; + sha1 = "3fe133cd3c82282e550fc9b239176a9207b784eb"; + }; + } + { + name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz"; + sha1 = "c8c951e9f73ed9428019458444a02ad90bb9f765"; + }; + } + { + name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz"; + sha1 = "652aef8a96726f029f5e3e00146ee7a4e755ff57"; + }; + } + { + name = "postcss_load_config___postcss_load_config_2.1.0.tgz"; + path = fetchurl { + name = "postcss_load_config___postcss_load_config_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz"; + sha1 = "c84d692b7bb7b41ddced94ee62e8ab31b417b003"; + }; + } + { + name = "postcss_loader___postcss_loader_3.0.0.tgz"; + path = fetchurl { + name = "postcss_loader___postcss_loader_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz"; + sha1 = "6b97943e47c72d845fa9e03f273773d4e8dd6c2d"; + }; + } + { + name = "postcss_merge_longhand___postcss_merge_longhand_4.0.11.tgz"; + path = fetchurl { + name = "postcss_merge_longhand___postcss_merge_longhand_4.0.11.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz"; + sha1 = "62f49a13e4a0ee04e7b98f42bb16062ca2549e24"; + }; + } + { + name = "postcss_merge_rules___postcss_merge_rules_4.0.3.tgz"; + path = fetchurl { + name = "postcss_merge_rules___postcss_merge_rules_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz"; + sha1 = "362bea4ff5a1f98e4075a713c6cb25aefef9a650"; + }; + } + { + name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz"; + sha1 = "cd4c344cce474343fac5d82206ab2cbcb8afd5a6"; + }; + } + { + name = "postcss_minify_gradients___postcss_minify_gradients_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_gradients___postcss_minify_gradients_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz"; + sha1 = "93b29c2ff5099c535eecda56c4aa6e665a663471"; + }; + } + { + name = "postcss_minify_params___postcss_minify_params_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_params___postcss_minify_params_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz"; + sha1 = "6b9cef030c11e35261f95f618c90036d680db874"; + }; + } + { + name = "postcss_minify_selectors___postcss_minify_selectors_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_selectors___postcss_minify_selectors_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz"; + sha1 = "e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"; + }; + } + { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz"; + path = fetchurl { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz"; + sha1 = "818719a1ae1da325f9832446b01136eeb493cd7e"; + }; + } + { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_3.0.2.tgz"; + path = fetchurl { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz"; + sha1 = "e8a6561be914aaf3c052876377524ca90dbb7915"; + }; + } + { + name = "postcss_modules_scope___postcss_modules_scope_2.2.0.tgz"; + path = fetchurl { + name = "postcss_modules_scope___postcss_modules_scope_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz"; + sha1 = "385cae013cc7743f5a7d7602d1073a89eaae62ee"; + }; + } + { + name = "postcss_modules_values___postcss_modules_values_3.0.0.tgz"; + path = fetchurl { + name = "postcss_modules_values___postcss_modules_values_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz"; + sha1 = "5b5000d6ebae29b4255301b4a3a54574423e7f10"; + }; + } + { + name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz"; + sha1 = "8b35add3aee83a136b0471e0d59be58a50285dd4"; + }; + } + { + name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz"; + sha1 = "0dbe04a4ce9063d4667ed2be476bb830c825935a"; + }; + } + { + name = "postcss_normalize_positions___postcss_normalize_positions_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_positions___postcss_normalize_positions_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz"; + sha1 = "05f757f84f260437378368a91f8932d4b102917f"; + }; + } + { + name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz"; + sha1 = "c4ebbc289f3991a028d44751cbdd11918b17910c"; + }; + } + { + name = "postcss_normalize_string___postcss_normalize_string_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_string___postcss_normalize_string_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz"; + sha1 = "cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"; + }; + } + { + name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz"; + sha1 = "8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"; + }; + } + { + name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz"; + sha1 = "841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"; + }; + } + { + name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz"; + sha1 = "10e437f86bc7c7e58f7b9652ed878daaa95faae1"; + }; + } + { + name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz"; + sha1 = "bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"; + }; + } + { + name = "postcss_ordered_values___postcss_ordered_values_4.1.2.tgz"; + path = fetchurl { + name = "postcss_ordered_values___postcss_ordered_values_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz"; + sha1 = "0cf75c820ec7d5c4d280189559e0b571ebac0eee"; + }; + } + { + name = "postcss_reduce_initial___postcss_reduce_initial_4.0.3.tgz"; + path = fetchurl { + name = "postcss_reduce_initial___postcss_reduce_initial_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz"; + sha1 = "7fd42ebea5e9c814609639e2c2e84ae270ba48df"; + }; + } + { + name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.2.tgz"; + path = fetchurl { + name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz"; + sha1 = "17efa405eacc6e07be3414a5ca2d1074681d4e29"; + }; + } + { + name = "postcss_selector_parser___postcss_selector_parser_3.1.2.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz"; + sha1 = "b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"; + }; + } + { + name = "postcss_selector_parser___postcss_selector_parser_6.0.2.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz"; + sha1 = "934cf799d016c83411859e09dcecade01286ec5c"; + }; + } + { + name = "postcss_svgo___postcss_svgo_4.0.2.tgz"; + path = fetchurl { + name = "postcss_svgo___postcss_svgo_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz"; + sha1 = "17b997bc711b333bab143aaed3b8d3d6e3d38258"; + }; + } + { + name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz"; + path = fetchurl { + name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz"; + sha1 = "9446911f3289bfd64c6d680f073c03b1f9ee4bac"; + }; + } + { + name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz"; + path = fetchurl { + name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"; + sha1 = "9ff822547e2893213cf1c30efa51ac5fd1ba8281"; + }; + } + { + name = "postcss_value_parser___postcss_value_parser_4.1.0.tgz"; + path = fetchurl { + name = "postcss_value_parser___postcss_value_parser_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz"; + sha1 = "443f6a20ced6481a2bda4fa8532a6e55d789a2cb"; + }; + } + { + name = "postcss___postcss_7.0.32.tgz"; + path = fetchurl { + name = "postcss___postcss_7.0.32.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz"; + sha1 = "4310d6ee347053da3433db2be492883d62cec59d"; + }; + } + { + name = "prelude_ls___prelude_ls_1.2.1.tgz"; + path = fetchurl { + name = "prelude_ls___prelude_ls_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz"; + sha1 = "debc6489d7a6e6b0e7611888cec880337d316396"; + }; + } + { + 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 = "prettier_linter_helpers___prettier_linter_helpers_1.0.0.tgz"; + path = fetchurl { + name = "prettier_linter_helpers___prettier_linter_helpers_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz"; + sha1 = "d23d41fe1375646de2d0104d3454a3008802cf7b"; + }; + } + { + name = "prettier___prettier_1.19.1.tgz"; + path = fetchurl { + name = "prettier___prettier_1.19.1.tgz"; + url = "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz"; + sha1 = "f7d7f5ff8a9cd872a7be4ca142095956a60797cb"; + }; + } + { + name = "prettier___prettier_2.0.5.tgz"; + path = fetchurl { + name = "prettier___prettier_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz"; + sha1 = "d6d56282455243f2f92cc1716692c08aa31522d4"; + }; + } + { + name = "pretty_bytes___pretty_bytes_5.3.0.tgz"; + path = fetchurl { + name = "pretty_bytes___pretty_bytes_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz"; + sha1 = "f2849e27db79fb4d6cfe24764fc4134f165989f2"; + }; + } + { + 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.1.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; + sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"; + }; + } + { + 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 = "progress___progress_2.0.3.tgz"; + path = fetchurl { + name = "progress___progress_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz"; + sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"; + }; + } + { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + path = fetchurl { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz"; + sha1 = "98472870bf228132fcbdd868129bad12c3c029e3"; + }; + } + { + name = "proxy_addr___proxy_addr_2.0.6.tgz"; + path = fetchurl { + name = "proxy_addr___proxy_addr_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz"; + sha1 = "fdc2336505447d3f2f2c638ed272caf614bbb2bf"; + }; + } + { + 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 = "psl___psl_1.8.0.tgz"; + path = fetchurl { + name = "psl___psl_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz"; + sha1 = "9326f8bcfb013adcc005fdff056acce020e51c24"; + }; + } + { + name = "public_encrypt___public_encrypt_4.0.3.tgz"; + path = fetchurl { + name = "public_encrypt___public_encrypt_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz"; + sha1 = "4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"; + }; + } + { + name = "pump___pump_2.0.1.tgz"; + path = fetchurl { + name = "pump___pump_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz"; + sha1 = "12399add6e4cf7526d973cbc8b5ce2e2908b3909"; + }; + } + { + name = "pump___pump_3.0.0.tgz"; + path = fetchurl { + name = "pump___pump_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz"; + sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64"; + }; + } + { + name = "pumpify___pumpify_1.5.1.tgz"; + path = fetchurl { + name = "pumpify___pumpify_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz"; + sha1 = "36513be246ab27570b1a374a5ce278bfd74370ce"; + }; + } + { + 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.7.0.tgz"; + path = fetchurl { + name = "qs___qs_6.7.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz"; + sha1 = "41dc1a015e3d581f1621776be31afb2876a9b1bc"; + }; + } + { + 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.1.1.tgz"; + path = fetchurl { + name = "querystringify___querystringify_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz"; + sha1 = "60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"; + }; + } + { + name = "randombytes___randombytes_2.1.0.tgz"; + path = fetchurl { + name = "randombytes___randombytes_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz"; + sha1 = "df6f84372f0270dc65cdf6291349ab7a473d4f2a"; + }; + } + { + 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.1.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz"; + sha1 = "3cf37023d199e1c24d1a55b84800c2f3e6468031"; + }; + } + { + name = "raw_body___raw_body_2.4.0.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz"; + sha1 = "a1ce6fb9c9bc356ca52e89256ab59059e13d0332"; + }; + } + { + name = "raw_loader___raw_loader_4.0.1.tgz"; + path = fetchurl { + name = "raw_loader___raw_loader_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz"; + sha1 = "14e1f726a359b68437e183d5a5b7d33a3eba6933"; + }; + } + { + name = "read_pkg___read_pkg_5.2.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz"; + sha1 = "7bf295438ca5a33e56cd30e053b34ee7250c93cc"; + }; + } + { + name = "readable_stream___readable_stream_2.3.7.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.7.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz"; + sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57"; + }; + } + { + name = "readable_stream___readable_stream_3.6.0.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_3.6.0.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz"; + sha1 = "337bbda3adc0706bd3e024426a286d4b4b2c9198"; + }; + } + { + name = "readdirp___readdirp_2.2.1.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; + sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; + }; + } + { + name = "readdirp___readdirp_3.4.0.tgz"; + path = fetchurl { + name = "readdirp___readdirp_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz"; + sha1 = "9fdccdf9e9155805449221ac645e8303ab5b9ada"; + }; + } + { + name = "regenerate_unicode_properties___regenerate_unicode_properties_8.2.0.tgz"; + path = fetchurl { + name = "regenerate_unicode_properties___regenerate_unicode_properties_8.2.0.tgz"; + url = "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz"; + sha1 = "e5de7111d655e7ba60c057dbe9ff37c87e65cdec"; + }; + } + { + name = "regenerate___regenerate_1.4.1.tgz"; + path = fetchurl { + name = "regenerate___regenerate_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz"; + sha1 = "cad92ad8e6b591773485fbe05a485caf4f457e6f"; + }; + } + { + 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_runtime___regenerator_runtime_0.13.5.tgz"; + path = fetchurl { + name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz"; + url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz"; + sha1 = "d878a1d094b4306d10b9096484b33ebd55e26697"; + }; + } + { + name = "regenerator_transform___regenerator_transform_0.14.4.tgz"; + path = fetchurl { + name = "regenerator_transform___regenerator_transform_0.14.4.tgz"; + url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz"; + sha1 = "5266857896518d1616a78a0479337a30ea974cc7"; + }; + } + { + 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 = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz"; + path = fetchurl { + name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz"; + sha1 = "7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"; + }; + } + { + name = "regexpp___regexpp_3.1.0.tgz"; + path = fetchurl { + name = "regexpp___regexpp_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz"; + sha1 = "206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"; + }; + } + { + name = "regexpu_core___regexpu_core_4.7.0.tgz"; + path = fetchurl { + name = "regexpu_core___regexpu_core_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz"; + sha1 = "fcbf458c50431b0bb7b45d6967b8192d91f3d938"; + }; + } + { + name = "register_service_worker___register_service_worker_1.7.1.tgz"; + path = fetchurl { + name = "register_service_worker___register_service_worker_1.7.1.tgz"; + url = "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.1.tgz"; + sha1 = "6308347ac6c0af0f6c0b22ea5d59d25e836bc932"; + }; + } + { + name = "regjsgen___regjsgen_0.5.2.tgz"; + path = fetchurl { + name = "regjsgen___regjsgen_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz"; + sha1 = "92ff295fb1deecbf6ecdab2543d207e91aa33733"; + }; + } + { + name = "regjsparser___regjsparser_0.6.4.tgz"; + path = fetchurl { + name = "regjsparser___regjsparser_0.6.4.tgz"; + url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz"; + sha1 = "a769f8684308401a66e9b529d2436ff4d0666272"; + }; + } + { + name = "relateurl___relateurl_0.2.7.tgz"; + path = fetchurl { + name = "relateurl___relateurl_0.2.7.tgz"; + url = "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz"; + sha1 = "54dbf377e51440aca90a4cd274600d3ff2d888a9"; + }; + } + { + 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.3.tgz"; + path = fetchurl { + name = "renderkid___renderkid_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz"; + sha1 = "380179c2ff5ae1365c522bf2fcfcff01c5b74149"; + }; + } + { + name = "repeat_element___repeat_element_1.1.3.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; + sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; + }; + } + { + 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 = "request_promise_core___request_promise_core_1.1.3.tgz"; + path = fetchurl { + name = "request_promise_core___request_promise_core_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz"; + sha1 = "e9a3c081b51380dfea677336061fea879a829ee9"; + }; + } + { + name = "request_promise_native___request_promise_native_1.0.8.tgz"; + path = fetchurl { + name = "request_promise_native___request_promise_native_1.0.8.tgz"; + url = "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz"; + sha1 = "a455b960b826e44e2bf8999af64dff2bfe58cb36"; + }; + } + { + name = "request___request_2.88.2.tgz"; + path = fetchurl { + name = "request___request_2.88.2.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz"; + sha1 = "d73c918731cb5a87da047e207234146f664d12b3"; + }; + } + { + 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_2.0.0.tgz"; + path = fetchurl { + name = "require_main_filename___require_main_filename_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz"; + sha1 = "d0b329ecc7cc0f61649f62215be69af54aa8989b"; + }; + } + { + 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_from___resolve_from_4.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz"; + sha1 = "4abcd852ad32dd7baabfe9b40e00a36db5f392e6"; + }; + } + { + 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 = "resolve___resolve_1.17.0.tgz"; + path = fetchurl { + name = "resolve___resolve_1.17.0.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz"; + sha1 = "b25941b54968231cc2d1bb76a79cb7f2c0bf8444"; + }; + } + { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz"; + sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf"; + }; + } + { + name = "restore_cursor___restore_cursor_3.1.0.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz"; + sha1 = "39f67c54b3a7a58cea5236d95cf0034239631f7e"; + }; + } + { + 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 = "retry___retry_0.12.0.tgz"; + path = fetchurl { + name = "retry___retry_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz"; + sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b"; + }; + } + { + name = "rgb_regex___rgb_regex_1.0.1.tgz"; + path = fetchurl { + name = "rgb_regex___rgb_regex_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz"; + sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1"; + }; + } + { + name = "rgba_regex___rgba_regex_1.0.0.tgz"; + path = fetchurl { + name = "rgba_regex___rgba_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz"; + sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3"; + }; + } + { + name = "rimraf___rimraf_2.6.3.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.6.3.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz"; + sha1 = "b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"; + }; + } + { + name = "rimraf___rimraf_2.7.1.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz"; + sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec"; + }; + } + { + 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 = "run_async___run_async_2.4.1.tgz"; + path = fetchurl { + name = "run_async___run_async_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz"; + sha1 = "8440eccf99ea3e70bd409d49aab88e10c189a455"; + }; + } + { + name = "run_queue___run_queue_1.0.3.tgz"; + path = fetchurl { + name = "run_queue___run_queue_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz"; + sha1 = "e848396f057d223f24386924618e25694161ec47"; + }; + } + { + name = "rxjs___rxjs_6.5.5.tgz"; + path = fetchurl { + name = "rxjs___rxjs_6.5.5.tgz"; + url = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz"; + sha1 = "c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"; + }; + } + { + 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_buffer___safe_buffer_5.2.1.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.2.1.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz"; + sha1 = "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"; + }; + } + { + 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_loader___sass_loader_8.0.2.tgz"; + path = fetchurl { + name = "sass_loader___sass_loader_8.0.2.tgz"; + url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz"; + sha1 = "debecd8c3ce243c76454f2e8290482150380090d"; + }; + } + { + name = "sass___sass_1.26.8.tgz"; + path = fetchurl { + name = "sass___sass_1.26.8.tgz"; + url = "https://registry.yarnpkg.com/sass/-/sass-1.26.8.tgz"; + sha1 = "312652530721f9568d4c4000b0db07ec6eb23325"; + }; + } + { + 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_1.0.0.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz"; + sha1 = "0b79a93204d7b600d4b2850d1f66c2a34951c770"; + }; + } + { + name = "schema_utils___schema_utils_2.7.0.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz"; + sha1 = "17151f76d8eae67fbbf77960c33c676ad9f4efc7"; + }; + } + { + 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.7.tgz"; + path = fetchurl { + name = "selfsigned___selfsigned_1.10.7.tgz"; + url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz"; + sha1 = "da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"; + }; + } + { + name = "semver___semver_5.7.1.tgz"; + path = fetchurl { + name = "semver___semver_5.7.1.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz"; + sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7"; + }; + } + { + name = "semver___semver_7.0.0.tgz"; + path = fetchurl { + name = "semver___semver_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz"; + sha1 = "5f3ca35761e47e05b206c6daff2cf814f0316b8e"; + }; + } + { + name = "semver___semver_6.3.0.tgz"; + path = fetchurl { + name = "semver___semver_6.3.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz"; + sha1 = "ee0a64c8af5e8ceea67687b133761e1becbd1d3d"; + }; + } + { + name = "semver___semver_7.3.2.tgz"; + path = fetchurl { + name = "semver___semver_7.3.2.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz"; + sha1 = "604962b052b81ed0786aae84389ffba70ffd3938"; + }; + } + { + name = "send___send_0.17.1.tgz"; + path = fetchurl { + name = "send___send_0.17.1.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz"; + sha1 = "c1d8b059f7900f7466dd4938bdc44e11ddb376c8"; + }; + } + { + name = "serialize_javascript___serialize_javascript_2.1.2.tgz"; + path = fetchurl { + name = "serialize_javascript___serialize_javascript_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz"; + sha1 = "ecec53b0e0317bdc95ef76ab7074b7384785fa61"; + }; + } + { + name = "serialize_javascript___serialize_javascript_3.1.0.tgz"; + path = fetchurl { + name = "serialize_javascript___serialize_javascript_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz"; + sha1 = "8bf3a9170712664ef2561b44b691eafe399214ea"; + }; + } + { + 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.14.1.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz"; + sha1 = "666e636dc4f010f7ef29970a88a674320898b2f9"; + }; + } + { + 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_value___set_value_2.0.1.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz"; + sha1 = "a18d40530e6f07de4228c7defe4227af8cad005b"; + }; + } + { + 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.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 = "setprototypeof___setprototypeof_1.1.1.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz"; + sha1 = "7e95acb24aa92f5885e0abef5ba131330d4ae683"; + }; + } + { + 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_3.0.1.tgz"; + path = fetchurl { + name = "shallow_clone___shallow_clone_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz"; + sha1 = "8f2981ad92531f55035b01fb230769a40e02efa3"; + }; + } + { + 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_command___shebang_command_2.0.0.tgz"; + path = fetchurl { + name = "shebang_command___shebang_command_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz"; + sha1 = "ccd0af4f8835fbdc265b82461aaf0c36663f34ea"; + }; + } + { + 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 = "shebang_regex___shebang_regex_3.0.0.tgz"; + path = fetchurl { + name = "shebang_regex___shebang_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz"; + sha1 = "ae16f1644d873ecad843b0307b143362d4c42172"; + }; + } + { + name = "shell_quote___shell_quote_1.7.2.tgz"; + path = fetchurl { + name = "shell_quote___shell_quote_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz"; + sha1 = "67a7d02c76c9da24f99d20808fcaded0e0e04be2"; + }; + } + { + name = "signal_exit___signal_exit_3.0.3.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz"; + sha1 = "a1410c2edd8f077b08b4e253c8eacfcaf057461c"; + }; + } + { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + path = fetchurl { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz"; + sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a"; + }; + } + { + 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 = "slash___slash_2.0.0.tgz"; + path = fetchurl { + name = "slash___slash_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz"; + sha1 = "de552851a1759df3a8f206535442f5ec4ddeab44"; + }; + } + { + name = "slice_ansi___slice_ansi_2.1.0.tgz"; + path = fetchurl { + name = "slice_ansi___slice_ansi_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz"; + sha1 = "cacd7693461a637a5788d92a7dd4fba068e81636"; + }; + } + { + 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 = "sockjs_client___sockjs_client_1.4.0.tgz"; + path = fetchurl { + name = "sockjs_client___sockjs_client_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz"; + sha1 = "c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"; + }; + } + { + name = "sockjs___sockjs_0.3.20.tgz"; + path = fetchurl { + name = "sockjs___sockjs_0.3.20.tgz"; + url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz"; + sha1 = "b26a283ec562ef8b2687b44033a4eeceac75d855"; + }; + } + { + 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_2.0.1.tgz"; + path = fetchurl { + name = "source_list_map___source_list_map_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz"; + sha1 = "3993bd873bfc48479cca9ea3a547835c7c154b34"; + }; + } + { + name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; + sha1 = "190866bece7553e1f8f267a2ee82c606b5509a1a"; + }; + } + { + name = "source_map_support___source_map_support_0.5.19.tgz"; + path = fetchurl { + name = "source_map_support___source_map_support_0.5.19.tgz"; + url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz"; + sha1 = "a98b62f86dcaf4f67399648c085291ab9e8fed61"; + }; + } + { + 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.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.1.1.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz"; + sha1 = "dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"; + }; + } + { + name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz"; + sha1 = "3f28ce1a77a00372683eade4a433183527a2163d"; + }; + } + { + name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz"; + path = fetchurl { + name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"; + sha1 = "cf70f50482eefdc98e3ce0a6833e4a53ceeba679"; + }; + } + { + name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz"; + sha1 = "3694b5804567a458d3c8045842a6358632f62654"; + }; + } + { + name = "spdy_transport___spdy_transport_3.0.0.tgz"; + path = fetchurl { + name = "spdy_transport___spdy_transport_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz"; + sha1 = "00d4863a6400ad75df93361a1608605e5dcdcf31"; + }; + } + { + name = "spdy___spdy_4.0.2.tgz"; + path = fetchurl { + name = "spdy___spdy_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz"; + sha1 = "b74f466203a3eda452c02492b91fb9e84a27677b"; + }; + } + { + 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.16.1.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.16.1.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz"; + sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877"; + }; + } + { + name = "ssri___ssri_6.0.1.tgz"; + path = fetchurl { + name = "ssri___ssri_6.0.1.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz"; + sha1 = "2a3c41b28dd45b62b63676ecb74001265ae9edd8"; + }; + } + { + name = "ssri___ssri_7.1.0.tgz"; + path = fetchurl { + name = "ssri___ssri_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz"; + sha1 = "92c241bf6de82365b5c7fb4bd76e975522e1294d"; + }; + } + { + name = "stable___stable_0.1.8.tgz"; + path = fetchurl { + name = "stable___stable_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz"; + sha1 = "836eb3c8382fe2936feaf544631017ce7d47a3cf"; + }; + } + { + name = "stackframe___stackframe_1.2.0.tgz"; + path = fetchurl { + name = "stackframe___stackframe_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz"; + sha1 = "52429492d63c62eb989804c11552e3d22e779303"; + }; + } + { + 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 = "stealthy_require___stealthy_require_1.1.1.tgz"; + path = fetchurl { + name = "stealthy_require___stealthy_require_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz"; + sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b"; + }; + } + { + name = "stream_browserify___stream_browserify_2.0.2.tgz"; + path = fetchurl { + name = "stream_browserify___stream_browserify_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz"; + sha1 = "87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"; + }; + } + { + name = "stream_each___stream_each_1.2.3.tgz"; + path = fetchurl { + name = "stream_each___stream_each_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz"; + sha1 = "ebe27a0c389b04fbcc233642952e10731afa9bae"; + }; + } + { + 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 = "stream_shift___stream_shift_1.0.1.tgz"; + path = fetchurl { + name = "stream_shift___stream_shift_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz"; + sha1 = "d7088281559ab2778424279b0877da3c392d5a3d"; + }; + } + { + 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_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_width___string_width_3.1.0.tgz"; + path = fetchurl { + name = "string_width___string_width_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz"; + sha1 = "22767be21b62af1081574306f69ac51b62203961"; + }; + } + { + name = "string_width___string_width_4.2.0.tgz"; + path = fetchurl { + name = "string_width___string_width_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz"; + sha1 = "952182c46cc7b2c313d1596e623992bd163b72b5"; + }; + } + { + name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz"; + path = fetchurl { + name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz"; + sha1 = "85812a6b847ac002270f5808146064c995fb6913"; + }; + } + { + name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz"; + path = fetchurl { + name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz"; + sha1 = "4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"; + }; + } + { + name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz"; + path = fetchurl { + name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz"; + sha1 = "c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"; + }; + } + { + name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz"; + path = fetchurl { + name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz"; + sha1 = "14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"; + }; + } + { + name = "string_decoder___string_decoder_1.3.0.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz"; + sha1 = "42f114594a46cf1a8e30b0a84f56c78c3edac21e"; + }; + } + { + 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 = "stringify_object___stringify_object_3.3.0.tgz"; + path = fetchurl { + name = "stringify_object___stringify_object_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz"; + sha1 = "703065aefca19300d3ce88af4f5b3956d7556629"; + }; + } + { + 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_ansi___strip_ansi_5.2.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz"; + sha1 = "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"; + }; + } + { + name = "strip_ansi___strip_ansi_6.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz"; + sha1 = "0b1571dd7669ccd4f3e06e14ef1eed26225ae532"; + }; + } + { + name = "strip_comments___strip_comments_1.0.2.tgz"; + path = fetchurl { + name = "strip_comments___strip_comments_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz"; + sha1 = "82b9c45e7f05873bee53f37168af930aa368679d"; + }; + } + { + 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_final_newline___strip_final_newline_2.0.0.tgz"; + path = fetchurl { + name = "strip_final_newline___strip_final_newline_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz"; + sha1 = "89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"; + }; + } + { + name = "strip_indent___strip_indent_2.0.0.tgz"; + path = fetchurl { + name = "strip_indent___strip_indent_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz"; + sha1 = "5ef8db295d01e6ed6cbf7aab96998d7822527b68"; + }; + } + { + name = "strip_json_comments___strip_json_comments_3.1.0.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz"; + sha1 = "7638d31422129ecf4457440009fba03f9f9ac180"; + }; + } + { + name = "stylehacks___stylehacks_4.0.3.tgz"; + path = fetchurl { + name = "stylehacks___stylehacks_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz"; + sha1 = "6718fcaf4d1e07d8a1318690881e8d96726a71d5"; + }; + } + { + 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_5.5.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz"; + sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f"; + }; + } + { + name = "supports_color___supports_color_6.1.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz"; + sha1 = "0764abc69c63d5ac842dd4867e8d025e880df8f3"; + }; + } + { + name = "supports_color___supports_color_7.1.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz"; + sha1 = "68e32591df73e25ad1c4b49108a2ec507962bfd1"; + }; + } + { + name = "svg_tags___svg_tags_1.0.0.tgz"; + path = fetchurl { + name = "svg_tags___svg_tags_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz"; + sha1 = "58f71cee3bd519b59d4b2a843b6c7de64ac04764"; + }; + } + { + name = "svgo___svgo_1.3.2.tgz"; + path = fetchurl { + name = "svgo___svgo_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz"; + sha1 = "b6dc511c063346c9e415b81e43401145b96d4167"; + }; + } + { + name = "table___table_5.4.6.tgz"; + path = fetchurl { + name = "table___table_5.4.6.tgz"; + url = "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz"; + sha1 = "1292d19500ce3f86053b05f0e8e7e4a3bb21079e"; + }; + } + { + name = "tapable___tapable_1.1.3.tgz"; + path = fetchurl { + name = "tapable___tapable_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz"; + sha1 = "a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"; + }; + } + { + name = "terser_webpack_plugin___terser_webpack_plugin_1.4.4.tgz"; + path = fetchurl { + name = "terser_webpack_plugin___terser_webpack_plugin_1.4.4.tgz"; + url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz"; + sha1 = "2c63544347324baafa9a56baaddf1634c8abfc2f"; + }; + } + { + name = "terser_webpack_plugin___terser_webpack_plugin_2.3.7.tgz"; + path = fetchurl { + name = "terser_webpack_plugin___terser_webpack_plugin_2.3.7.tgz"; + url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz"; + sha1 = "4910ff5d1a872168cc7fa6cd3749e2b0d60a8a0b"; + }; + } + { + name = "terser___terser_4.7.0.tgz"; + path = fetchurl { + name = "terser___terser_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz"; + sha1 = "15852cf1a08e3256a80428e865a2fa893ffba006"; + }; + } + { + name = "text_table___text_table_0.2.0.tgz"; + path = fetchurl { + name = "text_table___text_table_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + } + { + name = "thenify_all___thenify_all_1.6.0.tgz"; + path = fetchurl { + name = "thenify_all___thenify_all_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz"; + sha1 = "1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"; + }; + } + { + name = "thenify___thenify_3.3.0.tgz"; + path = fetchurl { + name = "thenify___thenify_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz"; + sha1 = "e69e38a1babe969b0108207978b9f62b88604839"; + }; + } + { + name = "thread_loader___thread_loader_2.1.3.tgz"; + path = fetchurl { + name = "thread_loader___thread_loader_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz"; + sha1 = "cbd2c139fc2b2de6e9d28f62286ab770c1acbdda"; + }; + } + { + name = "through2___through2_2.0.5.tgz"; + path = fetchurl { + name = "through2___through2_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; + sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; + }; + } + { + name = "through___through_2.3.8.tgz"; + path = fetchurl { + name = "through___through_2.3.8.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + } + { + name = "thunky___thunky_1.1.0.tgz"; + path = fetchurl { + name = "thunky___thunky_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz"; + sha1 = "5abaf714a9405db0504732bbccd2cedd9ef9537d"; + }; + } + { + name = "timers_browserify___timers_browserify_2.0.11.tgz"; + path = fetchurl { + name = "timers_browserify___timers_browserify_2.0.11.tgz"; + url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz"; + sha1 = "800b1f3eee272e5bc53ee465a04d0e804c31211f"; + }; + } + { + name = "timsort___timsort_0.3.0.tgz"; + path = fetchurl { + name = "timsort___timsort_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz"; + sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4"; + }; + } + { + name = "tmp___tmp_0.0.33.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.33.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; + sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; + }; + } + { + 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_2.0.0.tgz"; + path = fetchurl { + name = "to_fast_properties___to_fast_properties_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; + sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e"; + }; + } + { + 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_range___to_regex_range_5.0.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz"; + sha1 = "1648c44aae7c8d988a326018ed72f5b4dd0392e4"; + }; + } + { + 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 = "toidentifier___toidentifier_1.0.0.tgz"; + path = fetchurl { + name = "toidentifier___toidentifier_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz"; + sha1 = "7e1be3470f1e77948bc43d94a3c8f4d7752ba553"; + }; + } + { + name = "toposort___toposort_1.0.7.tgz"; + path = fetchurl { + name = "toposort___toposort_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz"; + sha1 = "2e68442d9f64ec720b8cc89e6443ac6caa950029"; + }; + } + { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz"; + sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"; + }; + } + { + name = "tryer___tryer_1.0.1.tgz"; + path = fetchurl { + name = "tryer___tryer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz"; + sha1 = "f2c85406800b9b0f74c9f7465b81eaad241252f8"; + }; + } + { + name = "ts_pnp___ts_pnp_1.2.0.tgz"; + path = fetchurl { + name = "ts_pnp___ts_pnp_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz"; + sha1 = "a500ad084b0798f1c3071af391e65912c86bca92"; + }; + } + { + name = "tslib___tslib_1.13.0.tgz"; + path = fetchurl { + name = "tslib___tslib_1.13.0.tgz"; + url = "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz"; + sha1 = "c881e13cc7015894ed914862d276436fa9a47043"; + }; + } + { + 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_check___type_check_0.4.0.tgz"; + path = fetchurl { + name = "type_check___type_check_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz"; + sha1 = "07b8203bfa7056c0657050e3ccd2c37730bab8f1"; + }; + } + { + name = "type_fest___type_fest_0.11.0.tgz"; + path = fetchurl { + name = "type_fest___type_fest_0.11.0.tgz"; + url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz"; + sha1 = "97abf0872310fed88a5c466b25681576145e33f1"; + }; + } + { + name = "type_fest___type_fest_0.6.0.tgz"; + path = fetchurl { + name = "type_fest___type_fest_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz"; + sha1 = "8d2a2370d3df886eb5c90ada1c5bf6188acf838b"; + }; + } + { + name = "type_fest___type_fest_0.8.1.tgz"; + path = fetchurl { + name = "type_fest___type_fest_0.8.1.tgz"; + url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz"; + sha1 = "09e249ebde851d3b1e48d27c105444667f17b83d"; + }; + } + { + name = "type_is___type_is_1.6.18.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.18.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz"; + sha1 = "4e552cd05df09467dcbc4ef739de89f2cf37c131"; + }; + } + { + name = "typedarray___typedarray_0.0.6.tgz"; + path = fetchurl { + name = "typedarray___typedarray_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + } + { + name = "uglify_js___uglify_js_3.4.10.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_3.4.10.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz"; + sha1 = "9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"; + }; + } + { + name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"; + sha1 = "2619800c4c825800efdd8343af7dd9933cbe2818"; + }; + } + { + name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz"; + sha1 = "8ed2a32569961bce9227d09cd3ffbb8fed5f020c"; + }; + } + { + name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.2.0.tgz"; + path = fetchurl { + name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz"; + sha1 = "0d91f600eeeb3096aa962b1d6fc88876e64ea531"; + }; + } + { + name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.1.0.tgz"; + path = fetchurl { + name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz"; + sha1 = "dd57a99f6207bedff4628abefb94c50db941c8f4"; + }; + } + { + name = "union_value___union_value_1.0.1.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz"; + sha1 = "0b6fe7b835aecda61c6ea4d4f02c14221e109847"; + }; + } + { + 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 = "unique_filename___unique_filename_1.1.1.tgz"; + path = fetchurl { + name = "unique_filename___unique_filename_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz"; + sha1 = "1d69769369ada0583103a1e6ae87681b56573230"; + }; + } + { + name = "unique_slug___unique_slug_2.0.2.tgz"; + path = fetchurl { + name = "unique_slug___unique_slug_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz"; + sha1 = "baabce91083fc64e945b0f3ad613e264f7cd4e6c"; + }; + } + { + name = "universalify___universalify_0.1.2.tgz"; + path = fetchurl { + name = "universalify___universalify_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz"; + sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66"; + }; + } + { + 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 = "unquote___unquote_1.1.1.tgz"; + path = fetchurl { + name = "unquote___unquote_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz"; + sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544"; + }; + } + { + 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.2.0.tgz"; + path = fetchurl { + name = "upath___upath_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz"; + sha1 = "8f66dbcd55a883acdae4408af8b035a5044c1894"; + }; + } + { + name = "upper_case___upper_case_1.1.3.tgz"; + path = fetchurl { + name = "upper_case___upper_case_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz"; + sha1 = "f6b4501c2ec4cdd26ba78be7222961de77621598"; + }; + } + { + 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_loader___url_loader_2.3.0.tgz"; + path = fetchurl { + name = "url_loader___url_loader_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz"; + sha1 = "e0e2ef658f003efb8ca41b0f3ffbf76bab88658b"; + }; + } + { + name = "url_parse___url_parse_1.4.7.tgz"; + path = fetchurl { + name = "url_parse___url_parse_1.4.7.tgz"; + url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz"; + sha1 = "a8a83535e8c00a316e403a5db4ac1b9b853ae278"; + }; + } + { + 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.promisify___util.promisify_1.0.0.tgz"; + path = fetchurl { + name = "util.promisify___util.promisify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz"; + sha1 = "440f7165a459c9a16dc145eb8e72f35687097030"; + }; + } + { + name = "util.promisify___util.promisify_1.0.1.tgz"; + path = fetchurl { + name = "util.promisify___util.promisify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz"; + sha1 = "6baf7774b80eeb0f7520d8b81d07982a59abbaee"; + }; + } + { + 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.11.1.tgz"; + path = fetchurl { + name = "util___util_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz"; + sha1 = "3236733720ec64bb27f6e26f421aaa2e1b588d61"; + }; + } + { + 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.4.0.tgz"; + path = fetchurl { + name = "uuid___uuid_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz"; + sha1 = "b23e4358afa8a202fe7a100af1f5f883f02007ee"; + }; + } + { + name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz"; + path = fetchurl { + name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz"; + sha1 = "54bc3cdd43317bca91e35dcaf305b1a7237de745"; + }; + } + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; + sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; + }; + } + { + 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.4.tgz"; + path = fetchurl { + name = "vendors___vendors_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz"; + sha1 = "e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"; + }; + } + { + 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_1.1.2.tgz"; + path = fetchurl { + name = "vm_browserify___vm_browserify_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz"; + sha1 = "78641c488b8e6ca91a75f511e7a3b32a86e5dda0"; + }; + } + { + name = "vue_eslint_parser___vue_eslint_parser_7.1.0.tgz"; + path = fetchurl { + name = "vue_eslint_parser___vue_eslint_parser_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz"; + sha1 = "9cdbcc823e656b087507a1911732b867ac101e83"; + }; + } + { + name = "vue_hot_reload_api___vue_hot_reload_api_2.3.4.tgz"; + path = fetchurl { + name = "vue_hot_reload_api___vue_hot_reload_api_2.3.4.tgz"; + url = "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz"; + sha1 = "532955cc1eb208a3d990b3a9f9a70574657e08f2"; + }; + } + { + name = "vue_loader___vue_loader_15.9.2.tgz"; + path = fetchurl { + name = "vue_loader___vue_loader_15.9.2.tgz"; + url = "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.2.tgz"; + sha1 = "ae01f5f4c9c6a04bff4483912e72ef91a402c1ae"; + }; + } + { + name = "vue_style_loader___vue_style_loader_4.1.2.tgz"; + path = fetchurl { + name = "vue_style_loader___vue_style_loader_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz"; + sha1 = "dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"; + }; + } + { + name = "vue_template_compiler___vue_template_compiler_2.6.11.tgz"; + path = fetchurl { + name = "vue_template_compiler___vue_template_compiler_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz"; + sha1 = "c04704ef8f498b153130018993e56309d4698080"; + }; + } + { + name = "vue_template_es2015_compiler___vue_template_es2015_compiler_1.9.1.tgz"; + path = fetchurl { + name = "vue_template_es2015_compiler___vue_template_es2015_compiler_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz"; + sha1 = "1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"; + }; + } + { + name = "vue___vue_2.6.11.tgz"; + path = fetchurl { + name = "vue___vue_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz"; + sha1 = "76594d877d4b12234406e84e35275c6d514125c5"; + }; + } + { + name = "watchpack_chokidar2___watchpack_chokidar2_2.0.0.tgz"; + path = fetchurl { + name = "watchpack_chokidar2___watchpack_chokidar2_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz"; + sha1 = "9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"; + }; + } + { + name = "watchpack___watchpack_1.7.2.tgz"; + path = fetchurl { + name = "watchpack___watchpack_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz"; + sha1 = "c02e4d4d49913c3e7e122c3325365af9d331e9aa"; + }; + } + { + 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 = "wcwidth___wcwidth_1.0.1.tgz"; + path = fetchurl { + name = "wcwidth___wcwidth_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz"; + sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"; + }; + } + { + name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.8.0.tgz"; + path = fetchurl { + name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz"; + sha1 = "ce6b3f908daf069fd1f7266f692cbb3bded9ba16"; + }; + } + { + name = "webpack_chain___webpack_chain_6.4.0.tgz"; + path = fetchurl { + name = "webpack_chain___webpack_chain_6.4.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.4.0.tgz"; + sha1 = "22f0b27b6a9bc9ee3cba4f9e6513cf66394034e2"; + }; + } + { + name = "webpack_dev_middleware___webpack_dev_middleware_3.7.2.tgz"; + path = fetchurl { + name = "webpack_dev_middleware___webpack_dev_middleware_3.7.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz"; + sha1 = "0019c3db716e3fa5cecbf64f2ab88a74bab331f3"; + }; + } + { + name = "webpack_dev_server___webpack_dev_server_3.11.0.tgz"; + path = fetchurl { + name = "webpack_dev_server___webpack_dev_server_3.11.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz"; + sha1 = "8f154a3bce1bcfd1cc618ef4e703278855e7ff8c"; + }; + } + { + name = "webpack_log___webpack_log_2.0.0.tgz"; + path = fetchurl { + name = "webpack_log___webpack_log_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz"; + sha1 = "5b7928e0637593f119d32f6227c1e0ac31e1b47f"; + }; + } + { + name = "webpack_merge___webpack_merge_4.2.2.tgz"; + path = fetchurl { + name = "webpack_merge___webpack_merge_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz"; + sha1 = "a27c52ea783d1398afd2087f547d7b9d2f43634d"; + }; + } + { + name = "webpack_sources___webpack_sources_1.4.3.tgz"; + path = fetchurl { + name = "webpack_sources___webpack_sources_1.4.3.tgz"; + url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz"; + sha1 = "eedd8ec0b928fbf1cbfe994e22d2d890f330a933"; + }; + } + { + name = "webpack___webpack_4.43.0.tgz"; + path = fetchurl { + name = "webpack___webpack_4.43.0.tgz"; + url = "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz"; + sha1 = "c48547b11d563224c561dad1172c8aa0b8a678e6"; + }; + } + { + name = "websocket_driver___websocket_driver_0.6.5.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.6.5.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz"; + sha1 = "5cb2556ceb85f4373c6d8238aa691c8454e13a36"; + }; + } + { + name = "websocket_driver___websocket_driver_0.7.4.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.7.4.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz"; + sha1 = "89ad5295bbf64b480abcba31e4953aca706f5760"; + }; + } + { + name = "websocket_extensions___websocket_extensions_0.1.4.tgz"; + path = fetchurl { + name = "websocket_extensions___websocket_extensions_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz"; + sha1 = "7f8473bc839dfd87608adb95d7eb075211578a42"; + }; + } + { + 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 = "which___which_2.0.2.tgz"; + path = fetchurl { + name = "which___which_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz"; + sha1 = "7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"; + }; + } + { + name = "word_wrap___word_wrap_1.2.3.tgz"; + path = fetchurl { + name = "word_wrap___word_wrap_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz"; + sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c"; + }; + } + { + name = "workbox_background_sync___workbox_background_sync_4.3.1.tgz"; + path = fetchurl { + name = "workbox_background_sync___workbox_background_sync_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz"; + sha1 = "26821b9bf16e9e37fd1d640289edddc08afd1950"; + }; + } + { + name = "workbox_broadcast_update___workbox_broadcast_update_4.3.1.tgz"; + path = fetchurl { + name = "workbox_broadcast_update___workbox_broadcast_update_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz"; + sha1 = "e2c0280b149e3a504983b757606ad041f332c35b"; + }; + } + { + name = "workbox_build___workbox_build_4.3.1.tgz"; + path = fetchurl { + name = "workbox_build___workbox_build_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz"; + sha1 = "414f70fb4d6de47f6538608b80ec52412d233e64"; + }; + } + { + name = "workbox_cacheable_response___workbox_cacheable_response_4.3.1.tgz"; + path = fetchurl { + name = "workbox_cacheable_response___workbox_cacheable_response_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz"; + sha1 = "f53e079179c095a3f19e5313b284975c91428c91"; + }; + } + { + name = "workbox_core___workbox_core_4.3.1.tgz"; + path = fetchurl { + name = "workbox_core___workbox_core_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz"; + sha1 = "005d2c6a06a171437afd6ca2904a5727ecd73be6"; + }; + } + { + name = "workbox_expiration___workbox_expiration_4.3.1.tgz"; + path = fetchurl { + name = "workbox_expiration___workbox_expiration_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz"; + sha1 = "d790433562029e56837f341d7f553c4a78ebe921"; + }; + } + { + name = "workbox_google_analytics___workbox_google_analytics_4.3.1.tgz"; + path = fetchurl { + name = "workbox_google_analytics___workbox_google_analytics_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz"; + sha1 = "9eda0183b103890b5c256e6f4ea15a1f1548519a"; + }; + } + { + name = "workbox_navigation_preload___workbox_navigation_preload_4.3.1.tgz"; + path = fetchurl { + name = "workbox_navigation_preload___workbox_navigation_preload_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz"; + sha1 = "29c8e4db5843803b34cd96dc155f9ebd9afa453d"; + }; + } + { + name = "workbox_precaching___workbox_precaching_4.3.1.tgz"; + path = fetchurl { + name = "workbox_precaching___workbox_precaching_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz"; + sha1 = "9fc45ed122d94bbe1f0ea9584ff5940960771cba"; + }; + } + { + name = "workbox_range_requests___workbox_range_requests_4.3.1.tgz"; + path = fetchurl { + name = "workbox_range_requests___workbox_range_requests_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz"; + sha1 = "f8a470188922145cbf0c09a9a2d5e35645244e74"; + }; + } + { + name = "workbox_routing___workbox_routing_4.3.1.tgz"; + path = fetchurl { + name = "workbox_routing___workbox_routing_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz"; + sha1 = "a675841af623e0bb0c67ce4ed8e724ac0bed0cda"; + }; + } + { + name = "workbox_strategies___workbox_strategies_4.3.1.tgz"; + path = fetchurl { + name = "workbox_strategies___workbox_strategies_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz"; + sha1 = "d2be03c4ef214c115e1ab29c9c759c9fe3e9e646"; + }; + } + { + name = "workbox_streams___workbox_streams_4.3.1.tgz"; + path = fetchurl { + name = "workbox_streams___workbox_streams_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz"; + sha1 = "0b57da70e982572de09c8742dd0cb40a6b7c2cc3"; + }; + } + { + name = "workbox_sw___workbox_sw_4.3.1.tgz"; + path = fetchurl { + name = "workbox_sw___workbox_sw_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz"; + sha1 = "df69e395c479ef4d14499372bcd84c0f5e246164"; + }; + } + { + name = "workbox_webpack_plugin___workbox_webpack_plugin_4.3.1.tgz"; + path = fetchurl { + name = "workbox_webpack_plugin___workbox_webpack_plugin_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz"; + sha1 = "47ff5ea1cc074b6c40fb5a86108863a24120d4bd"; + }; + } + { + name = "workbox_window___workbox_window_4.3.1.tgz"; + path = fetchurl { + name = "workbox_window___workbox_window_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz"; + sha1 = "ee6051bf10f06afa5483c9b8dfa0531994ede0f3"; + }; + } + { + name = "worker_farm___worker_farm_1.7.0.tgz"; + path = fetchurl { + name = "worker_farm___worker_farm_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz"; + sha1 = "26a94c5391bbca926152002f69b84a4bf772e5a8"; + }; + } + { + name = "wrap_ansi___wrap_ansi_5.1.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz"; + sha1 = "1fd1f67235d5b6d0fee781056001bfb694c03b09"; + }; + } + { + name = "wrap_ansi___wrap_ansi_6.2.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_6.2.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz"; + sha1 = "e9393ba07102e6c91a3b221478f0257cd2856e53"; + }; + } + { + 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 = "write___write_1.0.3.tgz"; + path = fetchurl { + name = "write___write_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz"; + sha1 = "0800e14523b923a387e415123c865616aae0f5c3"; + }; + } + { + name = "ws___ws_6.2.1.tgz"; + path = fetchurl { + name = "ws___ws_6.2.1.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz"; + sha1 = "442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"; + }; + } + { + name = "xtend___xtend_4.0.2.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz"; + sha1 = "bb72779f5fa465186b1f438f674fa347fdb5db54"; + }; + } + { + name = "y18n___y18n_4.0.0.tgz"; + path = fetchurl { + name = "y18n___y18n_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz"; + sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b"; + }; + } + { + 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.1.1.tgz"; + path = fetchurl { + name = "yallist___yallist_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz"; + sha1 = "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"; + }; + } + { + name = "yallist___yallist_4.0.0.tgz"; + path = fetchurl { + name = "yallist___yallist_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz"; + sha1 = "9bb92790d9c0effec63be73519e11a35019a3a72"; + }; + } + { + name = "yargs_parser___yargs_parser_13.1.2.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_13.1.2.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz"; + sha1 = "130f09702ebaeef2650d54ce6e3e5706f7a4fb38"; + }; + } + { + name = "yargs_parser___yargs_parser_18.1.3.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_18.1.3.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz"; + sha1 = "be68c4975c6b2abf469236b0c870362fab09a7b0"; + }; + } + { + name = "yargs___yargs_13.3.2.tgz"; + path = fetchurl { + name = "yargs___yargs_13.3.2.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz"; + sha1 = "ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"; + }; + } + { + name = "yargs___yargs_15.3.1.tgz"; + path = fetchurl { + name = "yargs___yargs_15.3.1.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz"; + sha1 = "9505b472763963e54afe60148ad27a330818e98b"; + }; + } + { + name = "yorkie___yorkie_2.0.0.tgz"; + path = fetchurl { + name = "yorkie___yorkie_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz"; + sha1 = "92411912d435214e12c51c2ae1093e54b6bb83d9"; + }; + } + ]; +} diff --git a/systems/eldiron/websites/tools/ldap.nix b/systems/eldiron/websites/tools/ldap.nix new file mode 100644 index 0000000..9509169 --- /dev/null +++ b/systems/eldiron/websites/tools/ldap.nix @@ -0,0 +1,77 @@ +{ lib, php, env, writeText, phpldapadmin, config }: +rec { + keys."webapps/tools-ldap" = { + user = apache.user; + group = apache.group; + 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','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"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:PhpLDAPAdmin:'"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "ldap website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + 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/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/phpbb.nix b/systems/eldiron/websites/tools/phpbb.nix new file mode 100644 index 0000000..c1cbd6f --- /dev/null +++ b/systems/eldiron/websites/tools/phpbb.nix @@ -0,0 +1,69 @@ +{ 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 + ''; + }; + chatonsHostingProperties = { + file.datetime = "2022-08-21T22:50:00"; + hosting = { + name = "phpBB"; + description = "Forum software"; + website = "https://tools.immae.eu/forum"; + logo = "https://www.phpbb.com/favicon.ico"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + webRoot = phpbb; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /forum "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + Options FollowSymlinks + Require all granted + </Directory> + # add instal to the list after install + <LocationMatch "^/(cache|files|install|store)> + Require all denied + </LocationMatch> + ''; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:PhpBB:'"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/rompr.nix b/systems/eldiron/websites/tools/rompr.nix new file mode 100644 index 0000000..a7308ce --- /dev/null +++ b/systems/eldiron/websites/tools/rompr.nix @@ -0,0 +1,86 @@ +{ lib, env, rompr, config }: +rec { + varDir = "/var/lib/rompr"; + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/prefs ${varDir}/albumart + ''; + webRoot = rompr; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "headers" "mime" "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /rompr ${root} + + <Directory ${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 + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + + <Directory ${root}/albumart/small> + Header Set Cache-Control "max-age=0, no-store" + Header Set Cache-Control "no-cache, must-revalidate" + </Directory> + + <Directory ${root}/albumart/asdownloaded> + Header Set Cache-Control "max-age=0, no-store" + Header Set Cache-Control "no-cache, must-revalidate" + </Directory> + + <LocationMatch "^/rompr"> + Use LDAPConnect + Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu + </LocationMatch> + ''; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Rompr:'"; + "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"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "rompr mpd website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https_auth" "tools.immae.eu" "/rompr/" "<title>RompЯ"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "MPD (ROMPR)"; + _webstatus_url = "https://tools.immae.eu/rompr/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/shaarli.nix b/systems/eldiron/websites/tools/shaarli.nix new file mode 100644 index 0000000..35f1edb --- /dev/null +++ b/systems/eldiron/websites/tools/shaarli.nix @@ -0,0 +1,102 @@ +{ 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 + ''; + webRoot = shaarli.override { inherit 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"} + <Location /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" + </Location> + <Directory "${root}"> + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "Shaarli"; + description = "The personal, minimalist, super-fast, database free, bookmarking service - community repo"; + website = "https://tools.immae.eu/Shaarli/"; + logo = "https://tools.immae.eu/Shaarli/tpl/default/img/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Shaarli"; + website = "https://shaarli.readthedocs.io/"; + license.url = "https://github.com/shaarli/Shaarli/blob/master/COPYING"; + license.name = "GNU General Public License Version 3"; + version = webRoot.version; + source.url = "https://github.com/shaarli/Shaarli"; + modules = "ldap-connection-patch"; + }; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Shaarli:'"; + "php_admin_value[upload_max_filesize]" = "200M"; + "php_admin_value[post_max_size]" = "200M"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "shaarli website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/Shaarli/immae" "<title>Immae"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Shaarli"; + _webstatus_url = "https://tools.immae.eu/Shaarli/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/ttrss.nix b/systems/eldiron/websites/tools/ttrss.nix new file mode 100644 index 0000000..6393256 --- /dev/null +++ b/systems/eldiron/websites/tools/ttrss.nix @@ -0,0 +1,167 @@ +{ 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 + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "RSS"; + description = "Tiny Tiny RSS is a free and open source web-based news feed (RSS/Atom) reader and aggregator"; + website = "https://tools.immae.eu/ttrss/"; + logo = "https://tools.immae.eu/ttrss/images/favicon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Tiny Tiny RSS"; + website = "https://tt-rss.org/"; + license.url = "https://www.gnu.org/copyleft/gpl.html"; + license.name = "GNU General Public License Version 3"; + version = webRoot.version; + source.url = "https://git.tt-rss.org/fox/tt-rss.git/"; + modules = map (p: p.pluginName) webRoot.plugins; + }; + }; + keys."webapps/tools-ttrss" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + keyDependencies = [ php ]; + text = '' + <?php + + define('PHP_EXECUTABLE', '${php}/bin/php'); + + define('LOCK_DIRECTORY', 'lock'); + define('CACHE_DIR', 'cache'); + define('ICONS_DIR', 'feed-icons'); + define('ICONS_URL', 'feed-icons'); + define('SELF_URL_PATH', 'https://tools.immae.eu/ttrss/'); + + define('MYSQL_CHARSET', 'UTF8'); + + define('DB_TYPE', 'pgsql'); + define('DB_HOST', '${env.postgresql.socket}'); + define('DB_USER', '${env.postgresql.user}'); + define('DB_NAME', '${env.postgresql.database}'); + define('DB_PASS', '${env.postgresql.password}'); + define('DB_PORT', '${env.postgresql.port}'); + + define('AUTH_AUTO_CREATE', true); + define('AUTH_AUTO_LOGIN', true); + + define('SINGLE_USER_MODE', false); + + define('SIMPLE_UPDATE_MODE', false); + define('CHECK_FOR_UPDATES', true); + + define('FORCE_ARTICLE_PURGE', 0); + define('SESSION_COOKIE_LIFETIME', 60*60*24*120); + define('ENABLE_GZIP_OUTPUT', false); + + define('PLUGINS', 'auth_ldap, note, instances'); + + define('LOG_DESTINATION', '''); + define('CONFIG_VERSION', 26); + + define('DAEMON_UPDATE_LOGIN_LIMIT', 0); + + define('SPHINX_SERVER', 'localhost:9312'); + define('SPHINX_INDEX', 'ttrss, delta'); + + define('ENABLE_REGISTRATION', false); + define('REG_NOTIFY_ADDRESS', 'ttrss@tools.immae.eu'); + define('REG_MAX_USERS', 10); + + define('SMTP_FROM_NAME', 'Tiny Tiny RSS'); + define('SMTP_FROM_ADDRESS', 'ttrss@tools.immae.eu'); + define('DIGEST_SUBJECT', '[tt-rss] New headlines for last 24 hours'); + + define('LDAP_AUTH_SERVER_URI', 'ldap://${env.ldap.host}:389/'); + define('LDAP_AUTH_USETLS', TRUE); + define('LDAP_AUTH_ALLOW_UNTRUSTED_CERT', TRUE); + define('LDAP_AUTH_BASEDN', '${env.ldap.base}'); + define('LDAP_AUTH_ANONYMOUSBEFOREBIND', FALSE); + define('LDAP_AUTH_SEARCHFILTER', '${env.ldap.filter}'); + + define('LDAP_AUTH_BINDDN', '${env.ldap.dn}'); + define('LDAP_AUTH_BINDPW', '${env.ldap.password}'); + define('LDAP_AUTH_LOGIN_ATTRIB', 'immaeTtrssLogin'); + + define('LDAP_AUTH_LOG_ATTEMPTS', FALSE); + define('LDAP_AUTH_DEBUG', FALSE); + ''; + }; + webRoot = (ttrss.override { ttrss_config = config.secrets.fullPaths."webapps/tools-ttrss"; }).withPlugins (p: [ + p.auth_ldap p.ff_instagram p.tumblr_gdpr_ua + (p.af_feedmod.override { patched = true; }) + (p.feediron.override { patched = true; }) + ]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /ttrss "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + Options FollowSymlinks + Require all granted + </Directory> + ''; + }; + 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_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:TTRSS:'"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "ttrss website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/ttrss/" "<title>Tiny Tiny RSS"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "TT-RSS"; + _webstatus_url = "https://tools.immae.eu/ttrss/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/wallabag.nix b/systems/eldiron/websites/tools/wallabag.nix new file mode 100644 index 0000000..0a5750d --- /dev/null +++ b/systems/eldiron/websites/tools/wallabag.nix @@ -0,0 +1,180 @@ +{ 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'] + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "Wallabag"; + description = "wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely."; + website = "https://tools.immae.eu/wallabag/"; + logo = "https://tools.immae.eu/wallabag/wallassets/themes/_global/img/appicon/apple-touch-icon-120.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Wallabag"; + website = "https://wallabag.org/en"; + license.url = "https://github.com/wallabag/wallabag/blob/master/COPYING.md"; + license.name = "MIT License"; + version = webappDir.version; + source.url = "https://github.com/wallabag/wallabag"; + modules = "ldap-patch"; + }; + }; + 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}" + <Directory "${root}"> + AllowOverride None + Require all granted + # For OAuth (apps) + CGIPassAuth On + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + <IfModule mod_rewrite.c> + Options -MultiViews + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ app.php [QSA,L] + </IfModule> + </Directory> + <Directory "${root}/bundles"> + <IfModule mod_rewrite.c> + RewriteEngine Off + </IfModule> + </Directory> + <Directory "${varDir}/assets"> + AllowOverride None + Require all granted + </Directory> + ''; + }; + 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[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Wallabag:'"; + "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/tmp"; + "php_value[max_execution_time]" = "300"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "wallabag website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/wallabag/" "<title>Bienvenue sur wallabag"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Wallabag"; + _webstatus_url = "https://tools.immae.eu/wallabag/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/webhooks.nix b/systems/eldiron/websites/tools/webhooks.nix new file mode 100644 index 0000000..337c8f8 --- /dev/null +++ b/systems/eldiron/websites/tools/webhooks.nix @@ -0,0 +1,25 @@ +{ lib, env, binEnv }: +{ + keys = lib.attrsets.mapAttrs' (k: v: + lib.nameValuePair "webapps/webhooks/${k}.php" { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = builtins.replaceStrings ["{{webhooks-bin-env}}"] [ "${binEnv}" ] v; + keyDependencies = [ binEnv ]; + }) env // lib.attrsets.mapAttrs' (k: v: + lib.nameValuePair "webapps/webhooks/${k}/index.php" { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = builtins.replaceStrings ["{{webhooks-bin-env}}"] [ "${binEnv}" ] v; + keyDependencies = [ binEnv ]; + }) env // { + "webapps/webhooks" = { + isDir = true; + user = "wwwrun"; + group = "wwwrun"; + permissions = "0500"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/ympd.nix b/systems/eldiron/websites/tools/ympd.nix new file mode 100644 index 0000000..0d8d41d --- /dev/null +++ b/systems/eldiron/websites/tools/ympd.nix @@ -0,0 +1,54 @@ +{ env, config }: +let + ympd = rec { + config = { + webPort = "localhost:${toString env.listenPort}"; + host = env.mpd.host; + port = env.mpd.port; + }; + apache = { + modules = [ + "proxy_wstunnel" + ]; + vhostConf = '' + <LocationMatch "^/mpd(?!/music.(mp3|ogg))"> + Use LDAPConnect + Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu + </LocationMatch> + + RedirectMatch permanent "^/mpd$" "/mpd/" + <Location "/mpd/"> + ProxyPass http://${config.webPort}/ + ProxyPassReverse http://${config.webPort}/ + ProxyPreserveHost on + </Location> + <Location "/mpd/ws"> + ProxyPass ws://${config.webPort}/ws + </Location> + <Location "/mpd/music.mp3"> + ProxyPass unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3 + ProxyPassReverse unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3 + </Location> + <Location "/mpd/music.ogg"> + ProxyPass unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg + ProxyPassReverse unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg + </Location> + ''; + }; + }; +in + ympd // { + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "mpd website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https_auth" "tools.immae.eu" "/mpd/" "<title>ympd"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "MPD (YMPD)"; + _webstatus_url = "https://tools.immae.eu/mpd/"; + } + ]; + } diff --git a/systems/eldiron/websites/tools/yourls.nix b/systems/eldiron/websites/tools/yourls.nix new file mode 100644 index 0000000..9e54b0d --- /dev/null +++ b/systems/eldiron/websites/tools/yourls.nix @@ -0,0 +1,118 @@ +{ env, yourls, yourls-plugins, config }: +rec { + keys."webapps/tools-yourls" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + <?php + define( 'YOURLS_DB_USER', '${env.mysql.user}' ); + define( 'YOURLS_DB_PASS', '${env.mysql.password}' ); + define( 'YOURLS_DB_NAME', '${env.mysql.database}' ); + define( 'YOURLS_DB_HOST', '${env.mysql.host}' ); + define( 'YOURLS_DB_PREFIX', 'yourls_' ); + define( 'YOURLS_SITE', 'https://tools.immae.eu/url' ); + define( 'YOURLS_HOURS_OFFSET', 0 ); + define( 'YOURLS_LANG', ''' ); + define( 'YOURLS_UNIQUE_URLS', true ); + define( 'YOURLS_PRIVATE', true ); + define( 'YOURLS_COOKIEKEY', '${env.cookieKey}' ); + $yourls_user_passwords = array(); + define( 'YOURLS_DEBUG', false ); + define( 'YOURLS_URL_CONVERT', 36 ); + $yourls_reserved_URL = array(); + define( 'LDAPAUTH_HOST', 'ldaps://${env.ldap.host}' ); + define( 'LDAPAUTH_PORT', '636' ); + define( 'LDAPAUTH_BASE', '${env.ldap.base}' ); + define( 'LDAPAUTH_SEARCH_USER', '${env.ldap.dn}' ); + define( 'LDAPAUTH_SEARCH_PASS', '${env.ldap.password}' ); + + define( 'LDAPAUTH_GROUP_ATTR', 'memberof' ); + define( 'LDAPAUTH_GROUP_REQ', 'cn=admin,cn=yourls,ou=services,dc=immae,dc=eu'); + + define( 'LDAPAUTH_USERCACHE_TYPE', 0); + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-27T18:00:00"; + service = { + name = "Yourls"; + description = "Your own URL shortener"; + website = "https://tools.immae.eu/url/admin/"; + logo = "https://tools.immae.eu/url/images/favicon.gif"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "FULL"; + install.type = "PACKAGE"; + }; + software = { + name = "YOURLS"; + website = "http://yourls.org/"; + license.url = "https://github.com/YOURLS/YOURLS/blob/master/LICENSE"; + license.name = "MIT License"; + version = webRoot.version; + source.url = "https://github.com/YOURLS/YOURLS"; + modules = map (a: a.pluginName) webRoot.plugins; + }; + }; + webRoot = (yourls.override { yourls_config = config.secrets.fullPaths."webapps/tools-yourls"; }).withPlugins (p: [p.ldap]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /url "${root}" + <Directory "${root}"> + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride None + Require all granted + <IfModule mod_rewrite.c> + RewriteEngine On + RewriteBase /url/ + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^.*$ /url/yourls-loader.php [L] + </IfModule> + DirectoryIndex index.php + </Directory> + ''; + }; + 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[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Yourls:'"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "yourl website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/url/admin/" "<title>YOURLS"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "YOURLS"; + _webstatus_url = "https://tools.immae.eu/url/admin/"; + } + + ]; +} diff --git a/systems/eldiron/websites/visio/default.nix b/systems/eldiron/websites/visio/default.nix new file mode 100644 index 0000000..76d1960 --- /dev/null +++ b/systems/eldiron/websites/visio/default.nix @@ -0,0 +1,63 @@ +{ lib, pkgs, config, ... }: +let + port = config.myEnv.ports.galene_port; + cfg = config.myServices.websites.tools.visio; +in { + options.myServices.websites.tools.visio = { + enable = lib.mkEnableOption "enable visio website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.visio = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.galene = { + file.datetime = "2022-08-21T22:45:00"; + service = { + name = "Galene"; + description = "The Galène videoconference server"; + website = "https://visio.immae.eu/"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Galene"; + website = "https://galene.org/"; + license.url = "https://github.com/jech/galene/blob/master/LICENCE"; + license.name = "MIT License"; + version = pkgs.galene.version; + source.url = "https://github.com/jech/galene"; + }; + }; + services.galene = { + enable = true; + httpPort = port; + insecure = true; + # hack to bypass module's limitations + dataDir = "/var/lib/galene/data -http localhost:${builtins.toString port}"; + }; + systemd.services.galene.serviceConfig.RestrictAddressFamilies = lib.mkForce [ "AF_INET" "AF_INET6" "AF_NETLINK" ]; + security.acme.certs.eldiron.extraDomainNames = [ "visio.immae.eu" ]; + services.websites.env.tools.vhostConfs.visio = { + certName = "eldiron"; + hosts = ["visio.immae.eu" ]; + root = null; + extraConfig = [ + '' + ProxyPass /ws ws://localhost:${builtins.toString port}/ws + ProxyPassReverse /ws ws://localhost:${builtins.toString port}/ws + + ProxyPass / http://localhost:${builtins.toString port}/ + ProxyPassReverse / http://localhost:${builtins.toString port}/ + + ProxyPreserveHost On + '' + ]; + }; + + }; +} + diff --git a/systems/eldiron/websites/vpn/default.nix b/systems/eldiron/websites/vpn/default.nix new file mode 100644 index 0000000..ea54691 --- /dev/null +++ b/systems/eldiron/websites/vpn/default.nix @@ -0,0 +1,13 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.vpn; +in { + config = lib.mkIf cfg.enable { + security.acme.certs.eldiron.extraDomainNames = [ "vpn.immae.eu" ]; + services.websites.env.tools.vhostConfs.vpn = { + certName = "eldiron"; + hosts = [ "vpn.immae.eu" ]; + root = ./www; + }; + }; +} diff --git a/systems/eldiron/websites/vpn/www/index.html b/systems/eldiron/websites/vpn/www/index.html new file mode 100644 index 0000000..fc2618a --- /dev/null +++ b/systems/eldiron/websites/vpn/www/index.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>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

    +
      +
    • Choisir une ip : 2001:aaaa:b:cccc:d::xxxx:yyyy/96 (le préfixe 2001:aaaa:b:cccc:d est imposé). Choix uniquement sur le yyyy (n'importe quel nombre entre 1 et ffff), le xxxx est dépendant du domaine
    • +
    • M'envoyer le choix de l'ip
    • + +
    • Si on veut éviter de passer systématiquement par le serveur immae.eu (Par + défaut linux préfère l'ipv6 dès qu'il en a possibilité), modifier le fichier + /etc/gai.conf. Quelques lignes à décommenter, tout est déjà dans le fichier : +
      +(...)
      +#
      +precedence  ::1/128       50
      +precedence  ::/0          40
      +precedence  2002::/16     30
      +precedence ::/96          20
      +#precedence ::ffff:0:0/96  10
      +#
      +#    For sites which prefer IPv4 connections change the last line to
      +#
      +precedence ::ffff:0:0/96  100
      +(...)
      +
      +
    • +
    +
    + + diff --git a/systems/eldiron/websites/vpn/www/style.css b/systems/eldiron/websites/vpn/www/style.css new file mode 100644 index 0000000..b177fec --- /dev/null +++ b/systems/eldiron/websites/vpn/www/style.css @@ -0,0 +1,61 @@ +* { + 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/systems/eldiron/webstats/default.nix b/systems/eldiron/webstats/default.nix new file mode 100644 index 0000000..0057f64 --- /dev/null +++ b/systems/eldiron/webstats/default.nix @@ -0,0 +1,80 @@ +{ 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) { + environment.systemPackages = [ + 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 /var/log/httpd/*/access-${domain}*.gz; do + zcat "$i" >> $TMPFILE + done + cat /var/log/httpd/*access-${domain}.log /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/systems/eldiron/webstats/goaccess.conf b/systems/eldiron/webstats/goaccess.conf new file mode 100644 index 0000000..c6c244a --- /dev/null +++ b/systems/eldiron/webstats/goaccess.conf @@ -0,0 +1,100 @@ +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/systems/monitoring-1/base.nix b/systems/monitoring-1/base.nix new file mode 100644 index 0000000..8bfacc1 --- /dev/null +++ b/systems/monitoring-1/base.nix @@ -0,0 +1,75 @@ +{ config, pkgs, lib, nixpkgs, php, secrets, ... }: +{ + # ssh-keyscan monitoring-1 | nix-shell -p ssh-to-age --run ssh-to-age + secrets.ageKeys = [ "age1dn4lzhgxusqrpjjnzm7w8ml39ptf326htuzmpqdqs2gg3wq7cqzqxuvx8k" ]; + boot.kernelPackages = pkgs.linuxPackages_latest; + + imports = [ + secrets.nixosModules.users-config-monitoring-1 + (nixpkgs + "/nixos/modules/profiles/qemu-guest.nix") + ./monitoring-master.nix + ./monitoring.nix + ./status.nix + ./status_engine.nix + ]; + + nixpkgs.overlays = builtins.attrValues php.overlays; + nixpkgs.config.permittedInsecurePackages = [ + "python-2.7.18.6" # for nagios-cli + ]; + + myServices.monitoring.enable = true; + myServices.monitoring.master = true; + myServices.status.enable = true; + networking = { + firewall.enable = true; + interfaces."ens3".ipv4.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = 32; }) (ips.ip4 or [])) + (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.configDir."stream.conf" = config.secrets.fullPaths."netdata-stream.conf"; + 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 ]; + + 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 = "23.05"; # Did you read the comment? +} diff --git a/systems/monitoring-1/flake.lock b/systems/monitoring-1/flake.lock new file mode 100644 index 0000000..d4a2c8d --- /dev/null +++ b/systems/monitoring-1/flake.lock @@ -0,0 +1,790 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "chatons": { + "inputs": { + "environment": "environment" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "mail-relay": { + "inputs": { + "environment": "environment_3", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-xISja892g6YTu9YjGwaD36BBWi/1+IcuREw6iUDqfVw=", + "path": "../../flakes/private/mail-relay", + "type": "path" + }, + "original": { + "path": "../../flakes/private/mail-relay", + "type": "path" + } + }, + "monitoring": { + "inputs": { + "environment": "environment_4", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib", + "secrets": "secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_8", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "php": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_6", + "nixpkgs-4": "nixpkgs-4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "root": { + "inputs": { + "chatons": "chatons", + "environment": "environment_2", + "files-watcher": "files-watcher", + "loginctl-linger": "loginctl-linger", + "mail-relay": "mail-relay", + "monitoring": "monitoring", + "my-lib": "my-lib", + "myuids": "myuids", + "nixpkgs": "nixpkgs_5", + "php": "php", + "secrets": "secrets_3", + "system": "system" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "system": { + "inputs": { + "backports": "backports", + "environment": "environment_5", + "mypackages": "mypackages", + "myuids": "myuids_2", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/monitoring-1/flake.nix b/systems/monitoring-1/flake.nix new file mode 100644 index 0000000..e97cb05 --- /dev/null +++ b/systems/monitoring-1/flake.nix @@ -0,0 +1,45 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + my-lib.url = "path:../../flakes/lib"; + + monitoring.url = "path:../../flakes/private/monitoring"; + mail-relay.url = "path:../../flakes/private/mail-relay"; + chatons.url = "path:../../flakes/private/chatons"; + environment.url = "path:../../flakes/private/environment"; + system.url = "path:../../flakes/private/system"; + php.url = "path:../../flakes/private/php"; + + myuids.url = "path:../../flakes/myuids"; + secrets.url = "path:../../flakes/secrets"; + files-watcher.url = "path:../../flakes/files-watcher"; + loginctl-linger.url = "path:../../flakes/loginctl-linger"; + }; + outputs = inputs@{ self, my-lib, nixpkgs, ...}: + my-lib.lib.mkColmenaFlake { + name = "monitoring-1"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "95.216.164.150"; + targetUser = "root"; + nixosModules = { + base = ./base.nix; + system = inputs.system.nixosModule; + mail-relay = inputs.mail-relay.nixosModule; + chatons = inputs.chatons.nixosModule; + monitoring = inputs.monitoring.nixosModule; + environment = inputs.environment.nixosModule; + + myuids = inputs.myuids.nixosModule; + secrets = inputs.secrets.nixosModule; + files-watcher = inputs.files-watcher.nixosModule; + loginctl-linger = inputs.loginctl-linger.nixosModule; + }; + moduleArgs = { + nixpkgs = inputs.nixpkgs; + monitoring = inputs.monitoring; + php = inputs.php; + }; + }; +} diff --git a/systems/monitoring-1/monitoring-master.nix b/systems/monitoring-1/monitoring-master.nix new file mode 100644 index 0000000..09319b8 --- /dev/null +++ b/systems/monitoring-1/monitoring-master.nix @@ -0,0 +1,87 @@ +{ config, pkgs, lib, nodes, name, monitoring, ... }: +let + mlib = monitoring.lib; + nodesWithMonitoring = lib.filterAttrs (n: v: (v.config.myServices or {}) ? "monitoring") nodes; +in +{ + imports = [ + ./monitoring/master.nix + ./monitoring/phare.nix + ./monitoring/ulminfo-fr.nix + ]; + myServices.monitoring.activatedPlugins = lib.flatten (lib.mapAttrsToList (_: n: n.config.myServices.monitoring.fromMasterActivatedPlugins) nodesWithMonitoring); + myServices.monitoring.objects = lib.mkMerge ( + lib.mapAttrsToList (_: n: + mlib.toMasterPassiveObject "external-passive-service" 1.5 n.config.myServices.monitoring.objects + ) (lib.filterAttrs (n: v: n != name) nodesWithMonitoring) + ++ + lib.mapAttrsToList (_: n: n.config.myServices.monitoring.fromMasterObjects) nodesWithMonitoring + ); + myServices.chatonsProperties.hostings.monitoring = { + file.datetime = "2022-08-27T16:00:00"; + hosting = { + name = "Monitoring"; + description = "Website and server health monitoring"; + website = "https://status.immae.eu"; + logo = "https://www.naemon.io/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "naemon"; + website = "https://www.naemon.io/"; + license.url = "https://github.com/naemon/naemon-core/blob/master/COPYING"; + license.name = "GNU General Public License v2.0"; + version = config.services.naemon.package.version; + source.url = "https://github.com/naemon/naemon-core"; + modules = "livestatus,status-engine"; + }; + }; + + services.nginx = { + virtualHosts."status.immae.eu".locations = { + "=/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@@ + ''; + }; + }; + }; + + secrets.keys = 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; + + services.naemon.extraConfig = '' + 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 + ''; +} diff --git a/systems/monitoring-1/monitoring.nix b/systems/monitoring-1/monitoring.nix new file mode 100644 index 0000000..421c71f --- /dev/null +++ b/systems/monitoring-1/monitoring.nix @@ -0,0 +1,61 @@ +{ config, pkgs, lib, name, monitoring, ... }: +let + hostFQDN = config.hostEnv.fqdn; + emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check; +in +{ + config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "emails" "ovh" "notify-primary" ]; + config.myServices.monitoring.objects = lib.mkMerge [ + (monitoring.lib.objectsCommon { + inherit hostFQDN; + hostName = name; + master = true; + processWarn = "70"; processAlert = "80"; + loadWarn = "4.0"; loadAlert = "5.0"; + load15Warn = "1.0"; load15Alert = "2.0"; + interface = builtins.head (builtins.attrNames config.networking.interfaces); + }) + + { + service = [ + (emailCheck "monitoring-1" hostFQDN) + + { + service_description = "OVH account has enough sms"; + host_name = hostFQDN; + use = "external-service"; + check_command = "check_ovh_sms"; + + check_interval = 120; + notification_interval = "1440"; + } + + # Dummy service for testing + # { + # service_description = "Dummy failing test"; + # host_name = "dummy-host"; + # use = "local-service"; + # check_interval = 0.3; + # max_check_attempts = "1"; + # flap_detection_enabled = "0"; + # notification_interval = "0.1"; + # check_command = "check_critical"; + # } + ]; + + host = { + # Dummy host for testing + # "dummy-host" = { + # alias = "dummy.host"; + # check_interval = 0.3; + # max_check_attempts = "1"; + # flap_detection_enabled = "0"; + # notification_interval = "0.1"; + # address = "dummy.host"; + # use = "linux-server"; + # check_command = "check_ok"; + # }; + }; + } + ]; +} diff --git a/systems/monitoring-1/monitoring/master.nix b/systems/monitoring-1/monitoring/master.nix new file mode 100644 index 0000000..c8f52ea --- /dev/null +++ b/systems/monitoring-1/monitoring/master.nix @@ -0,0 +1,43 @@ +{ config, ... }: +{ + myServices.monitoring.objects = { + contact = { + immae = { + alias = "Immae"; + email = config.myEnv.monitoring.immae_contact; + use = "generic-contact"; + contactgroups = "admins"; + host_notification_commands = "notify-host-by-email,notify-host-by-apprise!$USER210$"; + service_notification_commands = "notify-service-by-email,notify-service-by-apprise!$USER210$"; + }; + }; + command = { + check_passive = "$USER1$/check_dummy 3 \"Service result are stale\""; + }; + templates = { + service = { + external-passive-service = { + active_checks_enabled = "0"; + check_freshness = "1"; + 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 = "1"; + passive_checks_enabled = "1"; + process_perf_data = "1"; + retain_nonstatus_information = "1"; + retain_status_information = "1"; + retry_interval = "2"; + check_command = "check_passive"; + _webstatus_namespace = "immae"; + }; + }; + }; + }; +} diff --git a/systems/monitoring-1/monitoring/phare.nix b/systems/monitoring-1/monitoring/phare.nix new file mode 100644 index 0000000..0ce9ffe --- /dev/null +++ b/systems/monitoring-1/monitoring/phare.nix @@ -0,0 +1,20 @@ +{ monitoring, config, ... }: +let + emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check; +in +{ + config.myServices.monitoring.activatedPlugins = [ "emails" ]; + config.myServices.monitoring.objects.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"; + }; + }; + config.myServices.monitoring.objects.service = [ + (emailCheck "phare" "phare.normalesup.org") + ]; +} diff --git a/systems/monitoring-1/monitoring/ulminfo-fr.nix b/systems/monitoring-1/monitoring/ulminfo-fr.nix new file mode 100644 index 0000000..b0c6657 --- /dev/null +++ b/systems/monitoring-1/monitoring/ulminfo-fr.nix @@ -0,0 +1,20 @@ +{ monitoring, config, ... }: +let + emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check; +in +{ + config.myServices.monitoring.activatedPlugins = [ "emails" ]; + config.myServices.monitoring.objects.host = { + "ulminfo.fr" = { + alias = "ulminfo.fr"; + address = "ulminfo.fr"; + use = "linux-server"; + hostgroups = "webstatus-hosts"; + _webstatus_name = "ulminfo"; + _webstatus_vhost = "status.immae.eu"; + }; + }; + config.myServices.monitoring.objects.service = [ + (emailCheck "ulminfo" "ulminfo.fr") + ]; +} diff --git a/systems/monitoring-1/status.nix b/systems/monitoring-1/status.nix new file mode 100644 index 0000000..8b6615f --- /dev/null +++ b/systems/monitoring-1/status.nix @@ -0,0 +1,84 @@ +{ 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.immae.eu" = { + acmeRoot = config.security.acme.defaults.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}" = { + extraDomainNames = [ "status.immae.eu" ]; + group = config.services.nginx.group; + }; + + 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/systems/monitoring-1/status/app.py b/systems/monitoring-1/status/app.py new file mode 100755 index 0000000..ff92891 --- /dev/null +++ b/systems/monitoring-1/status/app.py @@ -0,0 +1,414 @@ +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/systems/monitoring-1/status_engine.nix b/systems/monitoring-1/status_engine.nix new file mode 100644 index 0000000..fc6afc0 --- /dev/null +++ b/systems/monitoring-1/status_engine.nix @@ -0,0 +1,123 @@ +{ 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: ${builtins.toString 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.servers."" = rec { + enable = true; + bind = "127.0.0.1"; + }; + + services.cron = { + mailto = "cron@immae.eu"; + systemCronJobs = [ + "0 0 * * * naemon cd ${package} && ./bin/Console.php cleanup" + ]; + }; + + environment.systemPackages = [ + pkgs.gearmand + (pkgs.writeScriptBin "status-engine-worker" '' + #! ${pkgs.stdenv.shell} + cd ${package} + exec sudo -E -u naemon ./bin/Console.php "$@" + '') + ]; + 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/systems/quatresaisons/flake.lock b/systems/quatresaisons/flake.lock new file mode 100644 index 0000000..6f2ccca --- /dev/null +++ b/systems/quatresaisons/flake.lock @@ -0,0 +1,767 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "files-watcher_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "landing-page": { + "flake": false, + "locked": { + "lastModified": 1691524124, + "narHash": "sha256-JyHb02qUrct2t+dgaiOcT5KS8RHkXygjWQXl+55gSMY=", + "ref": "main", + "rev": "018344d9116b506c662ecdcee2d0d505c857f1cf", + "revCount": 573, + "type": "git", + "url": "https://github.com/bastienwirtz/homer.git" + }, + "original": { + "ref": "main", + "type": "git", + "url": "https://github.com/bastienwirtz/homer.git" + } + }, + "monitoring": { + "inputs": { + "environment": "environment_2", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_2", + "myuids": "myuids" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_8", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "myuids_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "php": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_6", + "nixpkgs-4": "nixpkgs-4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "root": { + "inputs": { + "environment": "environment", + "files-watcher": "files-watcher", + "landing-page": "landing-page", + "monitoring": "monitoring", + "multi-apache-container": "multi-apache-container", + "my-lib": "my-lib", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_5", + "php": "php", + "secrets": "secrets_2", + "system": "system" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "system": { + "inputs": { + "backports": "backports", + "environment": "environment_3", + "mypackages": "mypackages", + "myuids": "myuids_3", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/quatresaisons/flake.nix b/systems/quatresaisons/flake.nix new file mode 100644 index 0000000..8b269f6 --- /dev/null +++ b/systems/quatresaisons/flake.nix @@ -0,0 +1,49 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + my-lib.url = "path:../../flakes/lib"; + + monitoring.url = "path:../../flakes/private/monitoring"; + environment.url = "path:../../flakes/private/environment"; + php.url = "path:../../flakes/private/php"; + system.url = "path:../../flakes/private/system"; + + myuids.url = "path:../../flakes/myuids"; + secrets.url = "path:../../flakes/secrets"; + files-watcher.url = "path:../../flakes/files-watcher"; + multi-apache-container.url = "path:../../flakes/multi-apache-container"; + + landing-page = { + url = "https://github.com/bastienwirtz/homer.git"; + ref = "main"; + type = "git"; + flake = false; + }; + }; + outputs = inputs@{ self, my-lib, nixpkgs, ...}: + my-lib.lib.mkColmenaFlake { + name = "quatresaisons"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "144.76.76.162"; + targetUser = "root"; + nixosModules = { + base = { secrets, ... }: { imports = [ secrets.nixosModules.users-config-quatresaisons ]; }; + system = inputs.system.nixosModule; + monitoring = inputs.monitoring.nixosModule; + environment = inputs.environment.nixosModule; + + myuids = inputs.myuids.nixosModule; + secrets = inputs.secrets.nixosModule; + files-watcher = inputs.files-watcher.nixosModule; + multi-apache-container = inputs.multi-apache-container.nixosModule; + }; + moduleArgs = { + monitoring = inputs.monitoring; + php = inputs.php; + landing-page = inputs.landing-page; + pkgs-no-overlay = inputs.nixpkgs.legacyPackages.x86_64-linux; + }; + }; +} diff --git a/systems/zoldene/Immae.pub b/systems/zoldene/Immae.pub new file mode 100644 index 0000000..dd42b04 --- /dev/null +++ b/systems/zoldene/Immae.pub @@ -0,0 +1,322 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFvwA+gBEADlchQGPyI2M9RNRUsk8wsL9XLc8qAFWTYlVp5p7177ucxTQf6S +rny9yRCF69UqtE0ugwt+432sAAsDPi7BRA/JE95bIRBiewOiY1jYiivccP5dR6Jr +58HJ3QOHYPekqZIQhxzCWjdD2nRhhCbbxeWFJsJyaG8idGBiLkgNKxEEmqE5LIat +tzMpQFwOpL2FoYZ7+e4ZTMc+x+yqpOnGcQD1qwouqx68okSCjrVBWo5S2tK5AzzU +X8esBLNpgkhpUEZVltiNc4bmj7GZPdy4+mvS33/HQTed8YpatCFVWzcK+/uK0SYE +P8Hj1mguT9idBhAf+kv7qbTycrFkTBliP3oDNUoARWDmfQdV4nlxqW03QxUY18mL +KPByduK3hEXAZnD+/8QfVzbNVVP+70/jdSB+ckF88Li2g4bv/9uqjaObKVJB9ocG +EWslm1h7tvdCLBRgIl8b2+Zl0fComRAMuwUr+LYlWLnfygAi8Uy9hl7UcRWAAj99 +PG4ba0+y8eD8k1J2IE8HpeIzMzRwYTLtvLyJBvrKiQHJb1PGM5cS8iry81wjUPZm +dO5p5rbC8z99w7UNMaiz6iqAFAaDyLLsBZ5gWD+1ps9XxCA0zf28Z/Tc/Gj4QKAf +kpMd7lQ+gprsFyRtzcRD4WhsOL2ogKYFHYi4LE0GYduspGdQPlK/YfrKQwARAQAB +tB9Jc21hZWwgQm91eWEgPGlzbWFlbEBib3V5YS5vcmc+iQJRBBMBCAA7AhsDBQsJ +CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvw +BU4CGQEACgkQyfztbKa3lFR/kA//cHVrb/RRTLQZy514vMkOBKgAk+dj+j0lrgvJ +yR0JK1KjodduSoccPq7qRFAU+KVa3FsXMn8yY/lWaCXYJoF0DT5iEHsEuzJRc7Cn +N4aq2h42DD7z8dJCXZvtvJs+vZ7G/rlLl322TjLb2OyIybBEoPOmJl0dVG0wKBFC +r7EJmOKl3ytUWUpEbuxs1U/pP4GKrPT2CK3QcLF8JHKIPkEO347RorseeHcHhMxs +Bz5JXojts1NyLJh7lErT42atgEdTGzSmkkGm8OifZVIH2rgmnRsPHnCqrXYsa7dE +yPsC01Ns3DPYk4C5FtbpfiNvATbnkOicEwb2U55OpYUZLsFCKo7Bl+duJVY0nPRN +WiLCALPcdJL+a6hbh1hSuqHt5eNGxyrDtRPowXRTS1D4nTCgAh6+wpH47xXWEwXZ +mEnkXqHLIjsW4CSIz2gc+Bza40+wkWz6NQDEb3ncytDZu9vKK1CYwl7RGW4RFkAO +j3FWZvZp8ETPLNRVy64BhZzHY3uOxbYreE+T6JfiIZux8X+Bh4cPJHizfhSMLLS5 +kwABzalaTD33XnjKn5wQ/DfGJ+fGbF54fMlGFjne5VTNwY1ju2ieXTgVrUyzfKPF +96zcvnxo/MWwqcQ8+dXFCZjldP76puo1eVATEBeOCQs8Vj7eL9eN/eo+BfzhS3S8 +CfFFYWeIXQQQEQIAHRYhBNw4R0hwnSYZ/yhnIW0Mr/3bHP6QBQJb8AgDAAoJEG0M +r/3bHP6Q/TsAnA6vTjmrX4nY3QnevNrKefWaQvf3AJ0TALTqXhTcVYVLxfzRt/Qd +u5W2/rQvSXNtYWVsIEJvdXlhIChXb3JrKSA8aXNtYWVsLmJvdXlhQGZyZXRsaW5r +LmNvbT6JAk4EEwEIADgWIQT4KAb9ob9bmhswFOfJ/O1spreUVAUCW/AFCwIbAwUL +CQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ/O1spreUVKlBD/sE/eDbJtL8UKc6 +CN7zmA038RSjxlcJrMRoBoThCFKOFtBsYLPebnIkzCDiUwQJaIMYe2RNBHKKz0p+ +2Kvzf7q+xq8W1e72aK1DRhsBTL8/LA1kQkvh3GwMS8z3SOcbXLWqKQuQ7ztYReQG +wsT2/S8reVM96eV67K9vMHKMDF3NyYZewahX0I44YIbQJfLVG5elCkBrfHjGSeIt +tSAv56BhN8J8ky+9nGx5jwWmxc/4Oquyfe9Lf0NMTCjw1xess7UoHlzSMp57yF3T +AaqDcqD2Jdgr2meN9Yo4/Yb9dEvHFy34ppXYanX1nrHGev7YaaQWLoKLVZc3f6gR ++D7sEJUJm3IxO041CR7DBwQ1CQkx3sa66mcHxe+wchOoXBZdsqyl5Ds+zqh6eMyO +UiixDcXDxZuimEY0/+7XjlFjtzhGVNKsjV/Azh+Hx3GZnGHMVpTw73qQFHkWeDrX +FPUbinjtEVTxw0fS9PkDZB5ysgAWlXs2cqoNDMcbdyJn2xszbV5+vjlmcofsQZTr +PiX+hB6P5RQP5ogtnotvbkPDSfPfqdUk5HjGFrGX08FoP4rCromHvSL6Un2lP4I2 +mJbbQzBU/bQUGzfz6U6VEbUHtOL+7woGuXuzTYsRZ/O7/fKohyi/+qsmOozQpLFN +k5xocbF1PgpFphrKYpHaSkf6DS2/F4hdBBARAgAdFiEE3DhHSHCdJhn/KGchbQyv +/dsc/pAFAlvwCAQACgkQbQyv/dsc/pDXWACeKMbL/Dtifpd466TqQP8isfWedtIA +n2xbEmlpxG8yk0w4HQ4djwgY4RbutCpJc21hZWwgQm91eWEgPGlzbWFlbC5ib3V5 +YUBub3JtYWxlc3VwLm9yZz6JAk4EEwEIADgWIQT4KAb9ob9bmhswFOfJ/O1spreU +VAUCW/AEawIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ/O1spreUVMGJ +EAC5hKt5NCanRxEl13nQUu4+n05tdRl9C3sTczR8EUZ30zhpBV4chKgeJSD0r1VA +zBSQHMNzroGawaQn38qxFtbcSmkGRDd+0y798x1HFHp+UFiYOdQDQJVsyDuwjq4k +RF7zV+FBj0ffjn5JBy6R3wLmWCFxz1mPmkImdyyS8GEeifwTftC+SSotqfg1lh0K +C+DSQGYtPk0jLvxVPRllnjltDOSPUt9xRE785I6E9oyYrCa5Om51e0eEMzwpkl4e +QschAYILb6SNrVyEMRD5E3lJHD2r6dPvIPFNcLxIQuK/Kdco2jNq7dCL6ukdGI40 +j/oZi7XRrlFCQW321BuipJZ/7t9JWOXOrrEndQv+hOb6PeWkwF1rigjbQq+IipdJ +DUXGBfiIzlpJM5tLhs7BGfLxYNn09rOpkotXrdBzRO62lYyRdQepKpD33v96bQV2 +0w64U44+CxuicjGDw/6no54LY4J7bM1lLGwqvHSeqgYoc+Zs9WH95TNNSmaAHGSf +An4LpzW5nOXbq2rsWVbZpvsVHz3VmC9qmpsYl5tT/ninkLta3tN6TrYUFHXcDWz9 +K+HW+/oARzEmN8eg3iMmWtOnV59YEr/x2vvOHndguUL0tUpRjwuTunH9KOGZE0Kb +uI3ovgLLO2kCSGk4SdXlntu/eLq9FPYqlOpjM9CtLf9JdIhdBBARAgAdFiEE3DhH +SHCdJhn/KGchbQyv/dsc/pAFAlvwCAQACgkQbQyv/dsc/pCHCQCfdPdGx0FmknAs +rPvjuUmuCj9Q8xUAn32dsgQYTlgfTdwLSxWGj4mTD2h6tClJc21hZWwgQm91eWEg +PGJvdXlhQHBoYXJlLm5vcm1hbGVzdXAub3JnPokCTgQTAQgAOBYhBPgoBv2hv1ua +GzAU58n87Wymt5RUBQJb8ASdAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ +EMn87Wymt5RU58QQALMGlOJzcQj/arHezum5H/PiYIpZ1yY+QMCzpSgPdwupwawW +VN88aQRfU6k9xwmsU+Ghjreja09AuqYi/D2+61TM/Tmqi/9HdU6NRYw0hvaZnwFc +vudFBII2XrxmU5k9PnSR6Sq4uLUGkXmvhJddV0q+cjtif+vDi5pl9mqbWBQY8d9S +5Q6ZFZPeEeASUK7Xt/tSq9iXpb1tQsmEJ94Czl5G+gNFJcqj7nlHQ1/c9XeNsvJT +GZVLGM/cAZNzB6AC8Kz+iWUypFuXifC2PYGpJDJ8klqTmDQikGQtM1HMHda6rnwU +L7JIfbuwGbMk65CtG2YE8QqB+/GIfkzWySenmIrldn9Vp5EKB0DD529TyOwQWgzz ++HuVP/4QfkNRxNquWxlAPXmcNfV1SV+/Xn1KwSspb7QlAjiXXOL13J2dwYFpV+21 +vsSW5XqJXfWUU8d4YVOdq1kUTwLjWnWyxwtt8j68KSuTOT4JTA8oNXg87r0B4Fzr +6AoxCM8ePywm5IW55gNAwViTKWBAcNrcwRTP647oNOM5+8D7NZIBpnKffNc/S2S5 +iI1tmaM0yXavmCm0Hb7lkFIsxM2Y2lxwHexPck2ftPXIrjhPYLcFVBdLVx2V2yXe +cFW2vMGZiasVobFqqp1g8htmAlTkN0cTDY7l96wDuirC6OeCbVomEgxQEd0MiF0E +EBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/92xz+kHsv +AJ4+zdfjTdO1FUWb42bWdPQfiFe9nACeMIRp1Iu3tNVJkfS9CGGqhrChpfu0LUlz +bWFlbCBCb3V5YSA8aXNtYWVsLmJvdXlhLjA2QG5vcm1hbGVzdXAub3JnPokCTgQT +AQgAOBYhBPgoBv2hv1uaGzAU58n87Wymt5RUBQJb8ASsAhsDBQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAAAoJEMn87Wymt5RUxa8P/i7zdQ9i5BfWITbdyCgXNoQYIcE3 +J6lIa15eLUcfDcL707zOrUSbhSkthLjeqZoNRCalqjeDOdgCQC1PNoISdkMGd9PO +VOwS3G7Pjt4FSjPVHyw9+Su57pwTcLXBhEyBAkv+tx/QrB/UBCFzPUnsl71QH51y +T8+bNdOiBxssdgn/9IrObn7tu8xDf+d/yGsA493x+mxalai+fhd/t0yzQcdcTrvD +EKRxAaU8wXe8oSwcW5cRmXIi+N4aEnLRO/so9YDGf4z2FQVSL0ktoZYMqZ1ZvIb0 +MNCNl2NgNXThhrAPk9Rhs+S5nRzazJ+tS+D2S728EPpRHpUE43+vewtCdu5c5NWd +Lz88o/jxLwcNwQa2iJoFMyqr15lHt+vM7OyD9X650IJwQw24n4tF6TijzH5GhWcN +SnB7RpLSkftQldpK/zK+tmFH4vVpv+bI3JKAfzRga+5Fu42kB5uHVzXF3qMwYgEO +sRNL5d4xV4SATce1mb8vFpsQmGOWnZAcCaQYhLKfMl7zR5ukytTjf3hRMRH0GAjh +06QAoBMJZhWosYehPi1odjTngIf6hFOqA5prz8Cu/AFe/8aftp9UorJOekAj2io0 +CENRv21qrN8R4bNo04aTMD6WrY+mBL8MteR0ooD3ENQEAZ6UUyZwTzUJk2UUl+5M +ch/HgJ+rQozmRGYeiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AI +BAAKCRBtDK/92xz+kPsmAJ4wGQ0Hly2eTVzsU8Ht4609Q5kf2wCdHGuu863a0GHv +uUdEokzQEsumYPG0OElzbWFlbCBCb3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVy +ZSkgPGlfYm91eWFAeWFob28uZnI+iQJOBBMBCAA4FiEE+CgG/aG/W5obMBTnyfzt +bKa3lFQFAlvwBMkCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQyfztbKa3 +lFQTlxAAjbuDy3prdEBNMYfi/870MO5eeDOCMtiDJDae4fQjj2NANjeuDGNP659B +/k9uS7o5nrWB7E6rdG4a1J+Qzj5I775xTP/zVbrNSchcLwSoHMMXBm2IdbIanCX0 +JX+dRg2YX6yX+6ZmL8UaWRVICQ84ZxGtYHZ8o8hMCFOuxFklNjYFEPciO9M9m+rv +fUEihQgcBF7+x9KVntlxad61Aa9AzUJLULgY3snaZK687tHUq3yYwXpF9s1CuJ81 +SfZxH32dKqy+2cpJqwQ38BZrTUwjBxxIMR5TRC7h/O9aRIBKQZKlpLcmxWPv18i7 +DwWlrJVb2Sd2WUh+TwPNa7VQc3NjlGtu74SfZqmirE0FyuB86fnsQaF8zhJnRsqE +lagnLoW24PCvc8A9TK95tj+0JO8DIeM49Gg+Br/NBtRB8q5q/ICJOREber6Ke+/I +p90q5VkZafIgeuO+EkyQ6Dq+58NRqC2qEs209xnKOd6exxT+2tEzx6Hy0PKwaay3 +h8WzUamJOTqRv1WG4GmlCeRUQGx8BtdIAEMdww26cN8rmxh5Foh5CH+V75bcybkv +yH+FBDoKFYSpEPg0axHM/e13/nujgLNnSTHuMf7ILvpwoNkkIcQwSpH17B5hZdgl +y0xD7aIS5XU9OoP9mKs1unzUKerWQWY6CxgYOqpssyDTUG+fohuIXQQQEQIAHRYh +BNw4R0hwnSYZ/yhnIW0Mr/3bHP6QBQJb8AgEAAoJEG0Mr/3bHP6QFPAAn3DbFqHo +hjznqQvg15QjlGFaPJaaAJ4ps0+VWG9BN7UBQPG+fcCRwqLaVLQ0SXNtYWVsIEJv +dXlhIChEb24ndCBjb250YWN0IG1lIHRoZXJlKSA8Ym91eWFAa3RoLnNlPokCTgQT +AQgAOBYhBPgoBv2hv1uaGzAU58n87Wymt5RUBQJb8ATfAhsDBQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAAAoJEMn87Wymt5RU2vAP/12b6S0yJdZ1rgNLj+ZohY36PhCm +30/amkGPQp7HCBylYIRv+y5m4IdiqynzJoap547cFMWNsCyfyU2VKbcy1Uy44FCI +PCUcBME95jD1JWviINDKqLhglciKlJnWUhupiolqFcr2ro+rJVc/fBMWJoBjM5fJ +9eq1ge2LxuYKbu9cpSEtopk7ZBeo69khhrFACdZEqfJtW4qp0hEC0pAKLjN8LhpQ +EEVcq4zejksB+1e1qkuJ6be3/Q2Sj+1ijaJBElJIVJ8qyYs9XSlTlUA1USfy3Yqu +jOkFrIaycxYgKooFgwYfYXCniuqXWZ2geCm2IE90lanQC2w7ZDN/JGwwVuAFVi4H +Mrx6x/yEreqy2AUMesB1eGxqQQG9cgssMLoMAN2IDDJ6FS+e0imWTTMZ6r3ou9W8 ++pFzSIT8LMnBNwp+RxrW3QzBs8sXDw5mS6WroiZMRlfJdA1sUPsrW0GV4/AFuEaK +PhCUvIvoh6zxYR0lA/gYqtszCHGzHeNLoczOhytUZM+KQpOtO3TSING/+o59HHuM +niD6k3mWcyk6MkSgIXquJRGUVGVFeLGlXXf7aWEkIOrXeqjBZpBchZUIxZfkg100 +xxmEgNVGG4vxB/UIGeVqV2S4JscJmCyDGs130nRp7Qp5YGfkaTLKyOdutssrqatP +m5Zcjl2VGr4Xt4uXiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AI +BAAKCRBtDK/92xz+kEViAJ9zBTPNNTYIxPxt8BEvb3pUDeZkiQCffsDGKi7kdlTj +oZ26K7yxdjexaYS0OUlzbWFlbCBCb3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVy +ZSkgPGJvdXlhQG1lY2gua3RoLnNlPokCTgQTAQgAOBYhBPgoBv2hv1uaGzAU58n8 +7Wymt5RUBQJb8ATwAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEMn87Wym +t5RUIzgP/0/7+y7UOgj4Yja6Lwa+Lm7ESRZnbVmR1ERSAa9RKKr8BbPT4KhgwN2R +x8c3CedFupS02sG1G57u+4qQbEeZylaMu6rusf/XyQ+esh06cRXfR7Vb2d14yFQg +xun9PgPR7jL0RiU2fsgvF6O+u9KwnGRmABZXILDBxzGZBXKBIkmqBM8+rBkXFVWc +gezZqD106KcuGewciuWM7bfyLj+2yV9GhvX8iRyptgkx9/CNEdOqQzKYEbXVTSkh +tUW4QUmNnIiTnD/pZ4kr3UsQV6y0GC1kf9G5EeQHbD+kVROFM0/sX6qGn99IeC+j +96MflMnKuXJeXjlxNFZIYPoolBAC7CvpRfdky5q0KB2xWh+x2jQbn3fPpa6lVZdQ +De14guXdcEsj1QVUMRL3wFCDwHIsi3gqOpCHdy5GmunFRNqUWmoGU+uHt3Kk031w +DJdQY4YP+8tFWLPG3vKoPSf5EcG2Mf0hZiWiiIAX8sVw13W+oDlAQ0HKah/uxV77 +gM2ScBiiiOr92JIf3ftq2AjMuzrGhpKME/wG2DdcOqmq7U+tcVbambSc7SVa5nTM +JXm8ZPOSH0Fax1PULPd3pyLLhfF0rnPiDLcVa6UzG1MaSJiGBurIf3D3OCHRjQQ6 +kVpF9VtXhWeziV8wkyt66HNcuqUs6HDBNkpxPTNacKcZmW8J/FlaiF0EEBECAB0W +IQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/92xz+kKOiAJ4shO9b +nZ2Nx9XzBBg4C0nUl05LyQCbBpk7t2NIPMKaNtjsPb+RV5HbiQa0O0lzbWFlbCBC +b3V5YSAoRG9uJ3QgY29udGFjdCBtZSB0aGVyZSkgPGlzbWFlbC5ib3V5YUBlbnMu +ZnI+iQJOBBMBCAA4FiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvwBZYCGwMFCwkI +BwIGFQoJCAsCBBYCAwECHgECF4AACgkQyfztbKa3lFRK1w//cqsweiuXGPepyn0t +AL/S/scM6r9IwcjD3HrZqmUNSDAqU6PJ0FFialOPuSQIyEvrpY1GL+TiVtnYyAit +sbotxNxNQFwiBvqchg6xd1ftpjJihuo7RysNdSNAnlOxFlEz9X+EGkRqq8rCTpoS +GA9+4uFyFKzfv9CDg7YUVX5GVsE3bsPWymfCW1boW0TQyL7xNrDPfzKpVRHFu7hi +5OghiTbHbifmIolj5Mo0hGuXxz26gFzrufCjgxK9ycW7LnHEnnK0zX8Qfueir8RV +EisuAXtKILgS5mmOj0ywsrva4Qtf5JW5SKymhgsKCWskfz0lq6S6ceIKaYBr4Syk +0MLI82M0zDfGlLuRP6yQ3DTiTC4lWfXHdjyd0w4SwcuAQPCWz34gtUEGfMTyrd6O +le6pYreL1NPzd/NakYsR1H1fsXVJkgpESktoDIkzooLmBV6Pjr+PEt4DvPZYqgKl +AyD+aZeZ5HlTZCLbN9O38nDttWdAvsGjq82qvNI8A/d2Vvz4L1ND6NT71+wtC2QT +a95epSBD64l/JtK99SW/HjLjyvV9O+Nu2p8ESTOEaQhyIudnWYU+er+Vwy7YtLvY +y8L9/Xu9KvlBMjHBXAAV047KwkIQNrNyoTla5yQFSpv57hFYbx5CKTprpsl9Ic4v +uPjC/GMgkAJ3yTwIgxa47hgUAtKIXQQQEQIAHRYhBNw4R0hwnSYZ/yhnIW0Mr/3b +HP6QBQJb8AgEAAoJEG0Mr/3bHP6QyCcAnRuTQIMOpwxbyzjj+t0C9GdNJYmGAJ9v +5c5kvNCFiJAFCbUD4OxJBNA28rQ9SXNtYWVsIEJvdXlhIChEb24ndCBjb250YWN0 +IG1lIHRoZXJlKSA8Ym91eWFAbWF0aC5qdXNzaWV1LmZyPokCTgQTAQgAOBYhBPgo +Bv2hv1uaGzAU58n87Wymt5RUBQJb8AW0AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4B +AheAAAoJEMn87Wymt5RUaT8P/2OvKAfgqu0zQX0JhKu/wd9AATVmLa8C48JPQMUn +5Z9dQyDcFyKKfKbGCz9B5jTOrzHNX0VJfpDujOTiPIk6ci0KqAJ3Fz0gdpxIcEoW +B2zg0nwDtGHsGMX8togpcbVgKqblp0XSsMAFV2FN5PsAnxkqdXPDmZ5iZSgs9roi +9nxHPavbcr1cSAjsiRoFxFudzo7Q0Z/KLRlTuTSAX6B+vRAeyRB4NcXThKYZlAi6 +cr+xXTvPFddiQZgVBT+ICZRQY0gwgHpQcj70fNx1w6tTHfThlxInojKGlreOZov9 +A4TVeex/QagVTsjRAQuZ9yLMkx7JxakAxBPZ/OHuv7/K1Qdx90AJ8zQZ6uOXpUNl +c2MDEBoTI/nbsgMeHI/Mj4ndxCBUMperZ1oCITl+AhaqEZ+LxTKyne41YJedlqjc +5xnUVigz4ajmZPYmbO6eRDxisx4fMG7hI2HnNWak2xBDVOp1z2aqZY0xsG7o697d +I9BeR9JxbIusx0Szq6GabwI5beEI1xLlT333Fe3XDtT0NIQQvW9byuYuyfp7H6Xm +hFj2ut7jVI9xG932sJ8ioRJGCK1UcGYEL0ei4YZRv+mVysEJFjki2nlxspnG4C/V +Q20jXnLAXOpKLiStkNJ15WsnzeoL4eq0AUOYMMmYKAquXXgpVs+xUDv6XathWA2v +oZkAiF0EEBECAB0WIQTcOEdIcJ0mGf8oZyFtDK/92xz+kAUCW/AIBAAKCRBtDK/9 +2xz+kEBpAJ4x7hASmdnDcyFGTyuRHj6NwsDtNwCfRVfqoiRcGmvDRA8U25cPk5XT +ZYTRzlXOUwEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQEASABIAAD/2wBD +AAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcp +LDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy +MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACMAG4D +AREAAhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAABgcEBQACAwEI/8QAQhAAAQIE +BAIGBgYIBwEAAAAAAQIDAAQFEQYSITFBURMUImFxsQcjMoGRwUJDUmJjchUlNTaC +odHwFiYzc4OS4bL/xAAZAQADAQEBAAAAAAAAAAAAAAAAAQIDBAX/xAAgEQEBAAID +AQEBAQEBAAAAAAAAAQIRAyExQRJREyIy/9oADAMBAAIRAxEAPwB2JHaECEjiPGA4 +6GA3kMMgDy8AZAGQAp8XD/Nc5+VP/wAiJT9GeBv3e/5VQ4cEu8M3sAZAGQBFT7Qh +JSOUBt4DZYww8O0AeQB5cc4AgzNXk5dfRh1Dj1r9Ghab/wAzpE3KQFdiSotTGIph +4trQFpAFyDwtwjO8mqqYbHeByDQNCD61R0jTGyzcTrQmigyAMsYAyxgCtTNt5hqI +SUnrKOYgN06yjnCVtnWUc4BtyenmWGVuurSlttJUpR2AGpMGyKbEHpZm3ulapLSW +GTcIdWm6yOZ1sIj92q0Cf8UVp2Y6b9IOIVtZkkD366xOzkjujFc83mROKZcCjc9M +kE/1hbV+Yq1VhC3TkUEKvcWNxE6UY3o4xKpueVIuKGRaSoWO5GsXhdXSM59Nhucb +cbStJFlAEeEa7Q26yj7UPdJ71pv7Qhboedab+0Iexsu2p2ZuD0sJltZom5gkEuaQ +jldxMPkZuk0gW2E05cetgIvfSJihZY/RcvODKpXr0NntKA4HkCeHdEWrkLBc67fK +EoF+Khc/CEuMYZn5tYyMFwX0KQRbwtCtkXMbUk4eqBKgpC9eYN4n9xf+Vczh+fYv +maUoDUHlD/cF47EmlTz0hPtFalsrQsdoGxtx1hs7DpolaTO5JZl7sdHmZPNKbAjx +Fx7jFY34ys+rcl4/XGL0jbVQmODpgsG2JD/F1UVIVqmRKgcT8YbNcy8qOrqO/ZiL +6uRLTKAU8WGloF/A3WpgUqjTc8gjOy0Si+2bYQr1C9pAzM469NOuKdUpxxRN766x +LUXYWw6mYbEw+m9zpeMc8/kdPHh/THp9LaYQAlCR4CMvXRNLASSCbqSOUGha0ekW +ym2QW8INBRVbCkjUJJ1BbCHCLpcA1SeBiscrEZ4ygLD1XmaFXUNzCypcutSSgnTX +Q2jbf2OTLH5TvkHGpuVbfTey0hWpvvHRjdxzWdrJiXSraHRi1cZQlVjDhUFGqNgX +zDaCxAtpjgepRcHFMQvHxaNIzUoG30YF/Cl9JM0sYVW2nNZb6EqI5an5ROXgw9LX +DEiieniVpBCNLGMuTLUdPHNmzTpdEu2lKUgJHARzW9uqToQy1iBDhpRtaKJ4bFO0 +A+oTygLxKiXxS2WMSqWNFGyzaN8L/wAuXlnY9whWn2qX0SyS2k3bJ5co14/45uXX +pjYYnOvpcUdcpt/KNazxaVWotys8W1HWwMBX0s0yM8sWyDbTtCK2z0ZNBys0INPO +thwIsRmEQ0x8XLEzLimhBfazBNvaEJfwtMeU0PYXnCVIOSzicqrm4MK+Fj6XeBmg +3LuuH2s9o5+V2cRgsz7DashKlHiEi8YadMqwYr9NS4lourSs8FIMVoerxDzTiLg7 +xW4WkWZqkhK9mYm2m1HYKO8IIipyXmFXYeQsDkYiztW+iwxmwheJAyDYrQlV78yY +34/HNy+jOkUZCqQyEzLbRCbZSNY6OOfXHyW0Y4TXK0lp1ExNt3Uq4+EXU49K3Eja +ahVS/LTSMmQJhwspuhRc20nUz7dvGIDZmYbWq6ZtKtDteAK1AeW0XElwoG6glRA9 +8JfTkp7MhSOnGoI3MTlLpWNm44YdkhKiYlr3UHLE8zaObO7jswx1dLadROyqkplz +kSsi6xwiJZb231Z4i081l0zJnnAgIUOg49IL8deWusVlMNdFj/pvsZ0guO0txbg9 +Yi4FuNoz1dKvoPrM1WOtN9Tlm3hm7YNiUjgf75ReEx13U5/rf/MWtPdmzNOMvNhS +Uq7DgTa45wrZL0NWzsP4ukutYokg3bpFNpzC17gE8PCNuPxy8vq1ammGWg31lQt9 +wxvjLI5rd1IYdMySJdb7pG/RsqV8orsumrs0GHC286+2sbpUyoHygLcQQhpSkHKk +gnlFMqaOHZdkUI2Zb9k/RETV4+L2ntNijpSEJtk2AhxfwAzbTIdc9UjQn6IgjOg8 +ASlaW1fTQ352J1jhynseljd2X+ixltuYbGZIULcYjTqk6Y9KtMsKUEITpuBBelad +6SvNT1FI02EOeM/XPqMu+c/RpUR3awo0+OqZZtkWQkCFpNnSfhuiSk3PzFYdZSp6 +XXkaWe5JGngSfjHXwzp53PQfOPFM1Mg7dKoD4x0uQZejxZWzM34OfKFVYIGMr/pw +AH6seZhxOXoClnCpSQf71gSbmHf2D/CYmrx8XdO/Y6b75YIv4AZ0WcdP3j5xTOl7 +UOtMYkPS3U0U5m1HdQO49x090cvLjJt18Wdup/BfSpglsDhHNvT0ML0ytTWVlCm5 +hKXG1ZshTmze6FO7s8spEalVqeZQ+2uUzIOqFIQRvwsdovxHqdKz6lqz5wHL9pGX +KbRF3LtpLPE1+ZyIzngLxU7RnlqC7CssZfDDeY3W6OkV4nWO3jx1HmZ5fqlhU05a +g+k8XFecbRz0aejtIS3M2+2PKFkrBExgi9bB/DHmYIWfpdygs4k+ECThw5rQP4TC +q8fF1TtaQm/2YS/gAqH+o9+Y+cUyoWxNklaVIzJSi/WVoJ2Psgxjyzrpvw3vtrSZ +4XzZzkWNDyMcWUehhk7Lpk7Jzhf6wtTLlipIAKx/FBLNaaY49rlpMsWdVzpNtgtO +/wAItprP+xBNPmUTInFzDnQJUAlpdlFPffv5RGV+M8vfXs9N5gWxYlZypHO8XxY7 +sjDlz1jaaVDFsPsDk2PKO5wTwqKwgmpPH8Q+cWxo09HySG5m/wBseULJeCNjAE1Z +On0PmYIMi8ZFn0i0NmbeGz+oB+U+cTWmPi6p6gqlAjbLCXPC2xDPJpsnOTa05g1m +OUfSN9BDt0zk3dF+1XprF9BmGX5Zlhlp3MwpBJUVW1uT7o5+XPVjq4uP1UyFWXIu +dXfAQ6g+0rYjmIzuP67jWZfnqmXR6tIz8olsrvbTX+sYXCyujDOWLhFNkmLv5la8 +OkNoeulb0HazX2ULLSVZGxcbjwiphazyzkQKMtycfdnHgRlA6FJ5Hj746+HCTtwc +/JbdHNQ1ZqAyfwx5RpU4+FnUtZ5/T6xXnF7ZaGGBT6t8Wt2h5Qsl4oWK1XrOX8MH ++ZggsLmUN3UlXdDZG5hz9hC3IxFaY+Leln9Tp/LAv4RnpEqahUxIJPqkErcAO5US +Nfd5wqWE+oWFZNtmTYlEG6bE35m+scXLv9Xbv4pNPK9hhbt1JbVobpUOELDPR54b +DDTlTo7pBbK0g7jjGu8cmWssVpMY3qEzLpl0srFhYgA3I+EKYRV5MrHeh0KerlVQ +/UG1NSvtKSrQqHL3w8spjOk443K9iOj1aVqU3PBgpSQuyUfdT2QR3aCOnj6mnLyz +vZyUD93mf9sRVGPhbz6gZ18X+tV5xWmWxfgdeZDwtqFfKFkvFVYxWUV5JHFr5wQZ +eoLHo+m21AmbR/1/9hbT+aNqVTHKdTjLqWFGxFwIVVjNRS1fGdOwpTTJqUJufCbB +hs6A/ePDw3hKkIGqzj9QemZ15RW46orUfE/KBUTqDVxITjZevkvfSMuTj/U6bcef +5vZryjrM3LocQpK0LFwRqDHJZ/XXL9jSYpjDuvRI8csJSKaWhBu20gHnYQi1GPI6 +tJulBAWoGyu+KhXwmqa9N0esKbKih9lw5rbf2fIx3Y3fccOWPyvqHB861UsKyr7S +hZaMqkj6KhoR/fdFbZya6QH8DtPPrdM04CtRVaw4xX6R+FrQ6EmilwJeU4Fm/agt +2cx0gV3DT1WqImEzCUAIy2y34wbFxBLWO6iUlSsgA3JhaR+rVZW/SJVJ1gyss6WE +EWWtGi1DlfgPCE0k/oEecU4sklVz3wKQ7WcUyq2VYJT8x84DaS4DjRaX7aNP/YAJ +sK4lVRpoSk8SZN09le/Rq5+HMRjycf67nrbj5Pz1fDWllNzDCXEKStChdKkm4UOY +jm18rp3/AB4tnXQQtK2qag2S6G+65gKlJWQhzFs84kdkry+8C0dfF/5cvJ6JMO4w +qeHWnGpZ31CiFKbUnMkm1r24HbaNWFgrlPSS/NKQkvNt3PaJJ0hzSLL8HWHKoupv +qzPBxNgRlMOyQsbbe0bEdZnqbUQ1LrbyFN+2qx3hyDLLVJWamweyDoNkxC5jpXrW +V7QG4lRO1r84DR5hpbqUqSrK4ghST3/0gPTmhwOuIeQLH2VjlASUUh1JSRfXUQGn +UrGUzhR9ptbinZZau00o3FufcfD+cRlhMl48lxNuk12RrcqJiTdC08Qd0+Mc2WNl +1XVjlMpuK/EU+mlyz02QCVdlNzbW0TMbbpWVkm6S70+/1t0hpokqvmNySd47ccZJ +pw223bnKTU4mdbadc6Rp0ELSRsddRDSnq6RhwkXAuFAwGJsLYvn8NzqX2CHWFH1j +K9ljuPA98BWbG9dqTGJ52Vnqcq7a2LqSrQoObVJ74ueMMuqVSlG+u8Q6HNSiIA8J +SdYA8NucAQVlUrNlxKFKbXbOEi5B52hBKXMC3qknMRuRDCKqX6W/SDPffNxgDrTl +zNImumkHXGuYQsix7v6QrJfTls8XFYxBO10s9YASptOWw0BPFXjE44TGqz5LlNVT +mXGc+MWh6ZZKilRSCU8YA7FG45jSAMaJSgDkbQBd0SsPUxbuUZkKHsnnzh70jLHa +qHHxiVtV6JvDDjt8YA3ygI4wBrlGf3QBsEjLtAbLDlAG6QIQcrdpR5GGTpYWvAGx +FlECAPLa35QBooBPSW4C8ASZXVRvyhlX/9mJAk4EEwEIADgWIQT4KAb9ob9bmhsw +FOfJ/O1spreUVAUCW/AHrgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDJ +/O1spreUVJ4nD/9tGS8cg2eUSwd0ExCl0dWsJRdM0mUYh17mXyVNLcvbglIkSdma +v/Ty3ke533izRN/SkkU8vNthjKAohZmmXlaXrruEyHq2vfXcDg4+C7FJQ+O3PT2B +S5ft3Ht2GmRpD2lWpeUlJ9BXF2EF5pSnHPOrlTHRUfjBCDU4uuSeKgioSyoc2iWb +BBaSXyeQAUR+ppM1AYKUlCDxpLbe3nVCOUc+JgJzv+47EqwMyVODwzk7oFO4GMRm +KTKlctb1ym75oV1tiZi2fL/KA2uAab/RMO0rfxa9HVWnJGvUEDMPlTfs7222zuLB +55Fzllfx5rQlou+MLBQIV978HRZrDxZesQOOJ4/BwTPgQ42GREf+uf5/SG4Fn3Qh +NZsvoaePMLN/QQEjM7eqOUzRJRVcdJfRH+LinIFrAqcmbbcp1bvq8LV5lbmlFJLF +gimvW/shf/6Zu1YsfBhvLWInUCyoOPFa1tASF6qqi1hEOd8tQgNE/H/FSIehmTHT +74kYPNRm+DzlvrW2JPVl24Nf/SWbOG/IzGBY/pDActTwYqnpXKR7eUt/YcPpmrPi +kyIKX32U2vTBCE3yvCm0KRzrcSbTJGfVgmlxxqIuOtbeaBtf96m+o5z/xw9ro7Ek +VZbsx6fPuWuLY/MqeLXl1EuiU6X1sr+skDY8lJeeiRt+Uq5mCZuEgWdM1IhdBBAR +AgAdFiEE3DhHSHCdJhn/KGchbQyv/dsc/pAFAlvwCAQACgkQbQyv/dsc/pABQACf +YaUOqzlafrzeGdwHwDleootu0UcAn2adbaKJ79QBtDVPkR77zV801JlXuQINBFvw +A+gBEACt8AiUTMcyNXwN6kiOLPd+85IPlLwEVyofz8p2QBAxJsqKozlXXpnK7ahC +RSiHt02EK39WiyZpeY1/2dGmdvyI1vc7ld3814Dveh4nf1GRSpDZ427cxayaclh+ +wRQ8nDWFOQUsMB3He/Z+aO6l/ZNvdVdzRUHda1XvN41nwXUL9FQUn/TLYgHbxa7P +Yy18ZnNzH/xGSwDgRrqPEAZ8KOpbHEbNyYuYuv6IM8Xmbp8Q6bl2RyBNnrlphksJ +kLvO6RLHUvvw5uX5bt+u3umoZ+yHUkP13NtQHTyZ8VTCQimkB6OisisOTnV8OjLG +xtLEF/TjeGFAAoEnc8bQAPvrtONQL19rPkMB0gXYXPBbGw7eWYr3QpuOujUXcz9U +0JSSEov7cUepdTY8LEYFw8U5WimKY6f/uJUVx/ukNPtuAljJji0cjIGEOX2XGlBV +Ix/U3vywLBfUFW5hT+75z7UB3yG3Zexo0WSaQxxZ5PHxyPYBK1PvVkH0LvkbxJcr +rouJJQ66chjRglUbv4lf85/cG1ZLu3Ds0UbuD0gE9sAEwXtfdgDmp/HB7mxwJr1O +BRbTRv0Okx/lovWXkxt+hX+DXZ1u1qdZUW3zjmge8W7xag3epD21jIjFDODgUfDT +fgJi2FQq+szpagfPN5j5aIQKHCZf0DLbBD+ZWYQdld5JZs2V5QARAQABiQI2BBgB +CAAgFiEE+CgG/aG/W5obMBTnyfztbKa3lFQFAlvwA+gCGwwACgkQyfztbKa3lFTa +yxAAxQo/9dvOO74J+9XznCYb5iO1B1ksnVegSGVuId45JKXkCkuWvDOkcU8+ma38 +wo3MBoPLpSMCXc/mKQ0p0ntO1tD/Wf4nBBCvseWcsR6RR5Su5jYorm0qZ89IOEPN +K2W2Z41X6DHyteB1dAyIyexOYoLKD7iWcQzga4/EoUPEwcr8BWWgGLBfRhXsYySz +F3fQPS7KaemDLGbJfTDZCSqmsZPnlksSvGxEBwUwfCjfY+QHxzWPRFPkuQJJR6YW +tiZ3z7jBRdRk/R5v2CJZJuGHcPPYQy6j2TYGONojm+ifaq1hz+A0aoy4P9qRW5Nl +mm6yiqEoJe07DrMLxn3H3ucuOo7DiNWmkkjW8DfhFSd+3pFMSvKGujOJWN27UDEp +ERWFX50gE15Sq4aPbMPNRejFQ1n75B4jfFQXg6WuwF3kwgHK3Y5T5vTEkbPgce9c +SyyFWU7EA4DJGnt7/FoaPDTKOWI9WSkmjOSABTBNSaUiMSFA3Wg/T0aS5pETpkv2 +S/GVVX022orAGK8zEY1vr2a24itOAKpQwFRuMjqDCBVgKAsMtlPu8jv3Zm/AMcYM +sRRnDWJh2TO8bqXXUG/o783fcTE3d1Ff7s4BfmBqpGHigZeehNvu+FshRDYaDrDN +IS0fTqbsX/JjaCXwU/o2E6G4aE79Ut/IMsCYzItTDh2UmcS5Ag0EW/G8wgEQALBi +2/A7Ev/92mYi4Gm//IJEKjm2Vc3NcX5LdSyPwdSLlHSRwvzZz7M0VeflcTYqssto +VPVf4maDtLGbQJn43CLqjvIW/C6jzjfvoZf0gbHpNfKY1ENs5xgE0wd3ZdsqpQC6 +W9Pu+kN31QS9+RUKwiG2bNBIREChL/omqiLhNu3hDbZnB+uSByOk901XVrNmKa8G +NzXSfJSCt0gP7XU6VpMqjxppA8Y2Vo7jnylbrgVJriTt6jtjDylBBQqmHSOXMT+q +9kIWDSocKhSFHBMO6LYnAwbMef2kqio5zaKzZAuwis0zjOqKHwW54xL2T7djFav9 +VlgcAYN105iMLUiIl39HLeZnS5pUESOXRUv/qLwiQRvBlWBPIep3+ycM2eK8r5a1 +5EwCgN2nSl3KYjzTOisCmK1nQs+gQ1RMraeBGYEG0uIUvDxfoONTuYkM3dhWq2Xx +V/OO6yUkfyOlBGUREe1PXAOsP0LtAFJha7kbh7Eg6GGU7gRYh2dG2Ln6Vmx1ldbS +F3woFYPGNMsQmgEKxwyjKaq0Qhd/sKHrTpPz8PXfGP4dHegExKegS7Yof1VrKBB+ +L8Q8o1Oi8JPCjRp47iga5OYS1Vn3h5a07ajzSAxPsmF0lmF4tYk2MFxSs403ShiE +BTjN4t6rjmnoQV/b+CuhpmvzxaYr736/jkY7s0I5ABEBAAGJBGwEGAEIACAWIQT4 +KAb9ob9bmhswFOfJ/O1spreUVAUCW/G8wgIbAgJACRDJ/O1spreUVMF0IAQZAQgA +HRYhBB2wOl45wX3kd77c+/0dTvV/qVkCBQJb8bzCAAoJEP0dTvV/qVkC3tUP/2rR +VDaSPj9+UYJtHGDfQmYCEqxROm5wGCJbNrUQspLeL8+XrsaUDh1ldNAQtoDqGjRp +kwjJAS0OZfvCv7pI052NK/KVGaK5Tj2+0lxTAcGbAKoH8E2HWPlERpU9CRLvzvDE +4GGxw2nw7aobNGbf9d98c9RpZuAul92BOClnpGEU4VzjKUk9IsSjZQVJnggQujxL +qWWiwfGwVsj2PdgPao/P48cYNl5CACBgY19AAh7WzgJVz/6je/5NLdAAV+E31qSE +EaZsvTBqrMOtH6iTn1GpJ73FsJ0BYVt9X99bRT0Vi0iWulBuhYfZG4PdCY6fv6uC +d+6pAC+Y/M9npaLbBHscSlJheTyvfuB7bzYBY+Q87VHSOMuNni7U08FuiILFoF+e +/ESU/v0Hde44ghiXKSaFO8djxc874KM9UlGWvw9UbmI8Z2uM0kDcrPZ/8tcjXOhp +PEBib54ab4tKCUCtOmsF9ZiT0hOqYdP9bXW+6OGfCignJ7ABhPpANfx2Sn/28L9l +PbF1nA5CkHdyo/ku1Z/lNq44yvrB8r0Ljq6s3KS69dUZqqrADeogOdi0/TrghtKU +DERWGmQagYSzMIvsXoAI56MxXFLriSObmpFLTWq7cr/+Ju3AcaSkrpDSYi3U6vLL +8NuXPhul1S/+yPwvX6Mk1Zkip9/Wg4SQeiT2R7xj8zMP/RJ8uKbnKpOftY89Kv0Y +FZ4hE3FeBR3UJvkuPdQYNLQRluzh63Bzc4ClSxB9Ma7fmAEiuFtgEi4HLTMBDOHO +uVMuWYcgubu9VBlAGLJ++gnKxCAJXEntuB49il8MjMsy+uv/cFCjPG9z/1pmWYrE +XBNA+vcaOrNTS2IykAbqybcPYbBcN47bm+A4i5yqiahk0q++j4LOW/nf88xXO7xI +V/4vQgemh7RHgHJOkKfzOPw/Kx3UjV1jA9gEUrusHE4R3Upxh0ZeQW19hUnVlao1 +TxxKEUryrRzckuRfc5ziMWNyJaZsPMkeBEhyY/CizDFPrsSXIAijfu8KFnxCsnaM +ylFBWOu5FwsKMDXxu0QdwqpL2CM8p+q12z1VruNjpIc8bAc0/YMndjYnxzsqQEMV +GQIDKWqh/m6v7sqbn65ZQcVAzSAriGcQxCOIoT/TA/J+/4BSk5c8TKlqT8NBT77B +Z70vMr41mZus1A/ciI8AxgbYwlhuvTehdm74k/c7NSzTxeG3OumTlBR1I18C4AIi +y4iM3O4H4jvEssWBUzpm3VJG0NvcN/M4YVZHX5yxWQuIFcghzb7sLYddmRvR9B0M +Xowot//r/sgn43xv54sIvwe9MkCCU6j7ePYUlOUnn+vQ5i7rFN/UPub3V3toI2gg +DRuKdymWEii1jA9KlmheLTFr +=r9L+ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/systems/zoldene/base.nix b/systems/zoldene/base.nix new file mode 100644 index 0000000..8ca5d52 --- /dev/null +++ b/systems/zoldene/base.nix @@ -0,0 +1,122 @@ +{ name, config, lib, pkgs, secrets, ... }: +let + # udev rules to be able to boot from qemu in a rescue + udev-qemu-rules = + let disks = config.disko.devices.disk; + in builtins.concatStringsSep "\n" (lib.imap1 (i: d: '' + SUBSYSTEM=="block", KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="QEMU_HARDDISK", ENV{ID_SERIAL_SHORT}=="QM0000${builtins.toString i}", SYMLINK+="${lib.removePrefix "/dev/" disks."${d}".device}" + SUBSYSTEM=="block", KERNEL=="sd*", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="QEMU_HARDDISK", ENV{ID_SERIAL_SHORT}=="QM0000${builtins.toString i}", SYMLINK+="${lib.removePrefix "/dev/" disks."${d}".device}-part%E{PARTN}" + '') (builtins.attrNames disks)); +in +{ + services.openssh = { + settings.KbdInteractiveAuthentication = false; + hostKeys = [ + { + path = "/persist/zpool/etc/ssh/ssh_host_ed25519_key"; + type = "ed25519"; + } + { + path = "/persist/zpool/etc/ssh/ssh_host_rsa_key"; + type = "rsa"; + bits = 4096; + } + ]; + }; + + system.stateVersion = "23.05"; + + # Useful when booting from qemu in rescue + console = { + earlySetup = true; + keyMap = "fr"; + }; + + services.udev.extraRules = udev-qemu-rules; + fileSystems."/persist/zfast".neededForBoot = true; + boot = { + zfs.forceImportAll = true; # needed for the first boot after + # install, because nixos-anywhere + # doesn't export filesystems properly + # after install (only affects fs not + # needed for boot, see fsNeededForBoot + # in nixos/lib/utils.nix + kernelParams = [ "boot.shell_on_fail" ]; + loader.grub.devices = [ + config.disko.devices.disk.sda.device + config.disko.devices.disk.sdb.device + ]; + extraModulePackages = [ ]; + kernelModules = [ "kvm-intel" ]; + supportedFilesystems = [ "zfs" ]; + kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; + initrd = { + postDeviceCommands = lib.mkAfter '' + zfs rollback -r zfast/root@blank + ''; + services.udev.rules = udev-qemu-rules; + availableKernelModules = [ "e1000e" "ahci" "sd_mod" ]; + network = { + enable = true; + postCommands = "echo 'cryptsetup-askpass' >> /root/.profile"; + flushBeforeStage2 = true; + ssh = { + enable = true; + port = 2222; + authorizedKeys = config.users.extraUsers.root.openssh.authorizedKeys.keys; + hostKeys = [ + "/boot/initrdSecrets/ssh_host_rsa_key" + "/boot/initrdSecrets/ssh_host_ed25519_key" + ]; + }; + }; + }; + }; + networking = { + hostId = "6251d3d5"; + firewall.enable = false; + firewall.allowedUDPPorts = [ 43484 ]; + # needed for initrd proper network setup too + useDHCP = lib.mkDefault true; + + wireguard.interfaces.wg0 = { + generatePrivateKeyFile = true; + privateKeyFile = "/persist/zpool/etc/wireguard/wg0"; + #presharedKeyFile = config.secrets.fullPaths."wireguard/preshared_key"; + listenPort = 43484; + + ips = [ + "192.168.1.25/24" + ]; + peers = [ + ]; + }; + }; + + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.enableRedistributableFirmware = lib.mkDefault true; + system.activationScripts.createDatasets = { + deps = [ ]; + text = '' + PATH=${pkgs.zfs}/bin:$PATH + '' + builtins.concatStringsSep "\n" (lib.mapAttrsToList (name: c: '' + if ! zfs list "${c._parent.name}/${name}" 2>/dev/null >/dev/null; then + ${c._create { zpool = c._parent.name; }} + fi + '') (config.disko.devices.zpool.zfast.datasets // config.disko.devices.zpool.zpool.datasets)); + }; + + secrets.keys."wireguard/preshared_key/eldiron" = { + permissions = "0400"; + user = "root"; + group = "root"; + text = let + key = builtins.concatStringsSep "_" (builtins.sort builtins.lessThan [ name "eldiron" ]); + in + "{{ .wireguard.preshared_keys.${key} }}"; + }; + secrets.decryptKey = "/persist/zpool/etc/ssh/ssh_host_ed25519_key"; + # ssh-keyscan zoldene | nix-shell -p ssh-to-age --run ssh-to-age + secrets.ageKeys = [ "age1rqr7qdpjm8fy9nf3x07fa824v87n40g0ljrgdysuayuklnvhcynq4c8en8" ]; +} diff --git a/systems/zoldene/disko.nix b/systems/zoldene/disko.nix new file mode 100644 index 0000000..7df5697 --- /dev/null +++ b/systems/zoldene/disko.nix @@ -0,0 +1,87 @@ +{ cryptKeyFile, ... }: { + disko.devices = let + zpoolDatasets = { + "root" = { type = "zfs_fs"; options.mountpoint = "none"; }; + "root/persist" = { type = "zfs_fs"; mountpoint = "/persist/zpool"; options.mountpoint = "legacy"; }; + }; + zfastDatasets = { + "root" = { type = "zfs_fs"; mountpoint = "/"; options.mountpoint = "legacy"; postCreateHook = "zfs snapshot zfast/root@blank"; }; + "root/nix" = { type = "zfs_fs"; mountpoint = "/nix"; options.mountpoint = "legacy"; }; + "root/persist" = { type = "zfs_fs"; mountpoint = "/persist/zfast"; options.mountpoint = "legacy"; }; + "root/persist/var" = { type = "zfs_fs"; mountpoint = "/persist/zfast/var"; options.mountpoint = "legacy"; }; + "root/persist/var/lib" = { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib"; options.mountpoint = "legacy"; }; + }; + in { + disk = { + sda = { + type = "disk"; + device = "/dev/disk/by-id/ata-SAMSUNG_MZ7LM480HCHP-00003_S1YJNYAG700613"; + content = { + type = "table"; + format = "gpt"; + partitions = [ + { start = "2GiB"; end = "-8GiB"; name = "ssdLuksA"; content = { type = "luks"; name = "ssdA"; keyFile = cryptKeyFile; content = { type = "zfs"; pool = "zfast"; }; }; } + { start = "-8GiB"; end = "-2MiB"; name = "swapA"; flags = [ "swap" ]; content = { type = "swap"; }; } + { start = "2048s"; end = "4095s"; name = "ssdGrubA"; flags = [ "bios_grub" ]; } + { start = "4096s"; end = "2GiB"; name = "ssdBootA"; content = { type = "filesystem"; format = "ext4"; mountpoint = "/boot"; }; } + ]; + }; + }; + sdb = { + type = "disk"; + device = "/dev/disk/by-id/ata-SAMSUNG_MZ7LM480HCHP-00003_S1YJNYAG700682"; + content = { + type = "table"; + format = "gpt"; + partitions = [ + { start = "2GiB"; end = "-8GiB"; name = "ssdLuksB"; content = { type = "luks"; name = "ssdB"; keyFile = cryptKeyFile; content = { type = "zfs"; pool = "zfast"; }; }; } + { start = "-8GiB"; end = "-2MiB"; name = "swapB"; flags = [ "swap" ]; content = { type = "swap"; }; } + { start = "2048s"; end = "4095s"; name = "ssdGrubB"; flags = [ "bios_grub" ]; } + #{ start = "4096s"; end = "2GiB"; name = "ssdBootB"; content = { type = "filesystem"; format = "ext4"; }; } # non monté + ]; + }; + }; + sdc = { + type = "disk"; + device = "/dev/disk/by-id/ata-ST4000NM0245-1Z2107_ZC110SY1"; + content = { + type = "table"; + format = "gpt"; + partitions = [ + { start = "2048s"; end = "-34s"; name = "hddLuksA"; content = { type = "luks"; name = "bigA"; keyFile = cryptKeyFile; content = { type = "zfs"; pool = "zpool"; }; }; } + ]; + }; + }; + sdd = { + type = "disk"; + device = "/dev/disk/by-id/ata-ST4000NM0245-1Z2107_ZC110YXX"; + content = { + type = "table"; + format = "gpt"; + partitions = [ + { start = "2048s"; end = "-34s"; name = "hddLuksB"; content = { type = "luks"; name = "bigB"; keyFile = cryptKeyFile; content = { type = "zfs"; pool = "zpool"; }; }; } + ]; + }; + }; + }; + + zpool = { + zpool = { + type = "zpool"; + mode = "mirror"; + mountRoot = "/"; + rootFsOptions = { mountpoint = "none"; atime = "off"; xattr = "sa"; acltype = "posix"; }; + options = { ashift = "12"; }; + datasets = zpoolDatasets; + }; + zfast = { + type = "zpool"; + mode = "mirror"; + mountRoot = "/"; + rootFsOptions = { mountpoint = "none"; atime = "off"; xattr = "sa"; acltype = "posix"; }; + options = { ashift = "12"; }; + datasets = zfastDatasets; + }; + }; + }; +} diff --git a/systems/zoldene/flake.lock b/systems/zoldene/flake.lock new file mode 100644 index 0000000..0a9ba64 --- /dev/null +++ b/systems/zoldene/flake.lock @@ -0,0 +1,560 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1684264534, + "narHash": "sha256-K0zr+ry3FwIo3rN2U/VWAkCJSgBslBisvfRIPwMbuCQ=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "89253fb1518063556edd5e54509c30ac3089d5e6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "impermanence", + "type": "github" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_7", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-system": { + "inputs": { + "backports": "backports", + "environment": "environment", + "mypackages": "mypackages", + "myuids": "myuids", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "public-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "root": { + "inputs": { + "impermanence": "impermanence", + "my-lib": "my-lib", + "nixpkgs": "nixpkgs_5", + "private-environment": "private-environment", + "private-system": "private-system", + "public-secrets": "public-secrets" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/zoldene/flake.nix b/systems/zoldene/flake.nix new file mode 100644 index 0000000..42466e8 --- /dev/null +++ b/systems/zoldene/flake.nix @@ -0,0 +1,29 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + impermanence.url = "github:nix-community/impermanence/master"; + my-lib.url = "path:../../flakes/lib"; + public-secrets.url = "path:../../flakes/secrets"; + private-environment.url = "path:../../flakes/private/environment"; + private-system.url = "path:../../flakes/private/system"; + }; + outputs = inputs@{ self, nixpkgs, my-lib, ... }: + my-lib.lib.mkColmenaFlake { + name = "zoldene"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "88.198.39.152"; + targetUser = "root"; + nixosModules = with inputs; { + impermanence = impermanence.nixosModule; + base = ./base.nix; + disko = ./disko.nix; + logging = ./logging.nix; + + secrets = public-secrets.nixosModule; + + environment = private-environment.nixosModule; + system = private-system.nixosModule; + }; + }; +} diff --git a/systems/zoldene/logging.nix b/systems/zoldene/logging.nix new file mode 100644 index 0000000..09ee104 --- /dev/null +++ b/systems/zoldene/logging.nix @@ -0,0 +1,138 @@ +{ config, pkgs, name, ... }: +# Initialization +# CREATE INDEX ON LOGS (tag); +# CREATE INDEX ON LOGS (time); +# CREATE INDEX ON LOGS (((data->>'PRIORITY')::int)); +# CREATE INDEX ON LOGS ((data->>'_SYSTEMD_UNIT')); +# CREATE INDEX ON LOGS ((data->>'SYSLOG_IDENTIFIER')); +let + fluent-bit-config = { + pipeline = { + inputs = [ + { + name = "systemd"; + tag = "${name}.systemd"; + DB = "/var/lib/fluentbit/fluent-bit.db"; + } + ]; + outputs = [ + { + name = "loki"; + match = "${name}.systemd"; + line_format = "json"; + labels = "job=fluentbit, server=${name}, priority=$PRIORITY, syslog_identifier=$SYSLOG_IDENTIFIER, systemd_unit=$_SYSTEMD_UNIT"; + } + { + name = "pgsql"; + match = "*"; + host = "/run/postgresql"; + user = "fluentbit"; + table = "logs"; + database = "fluentbit"; + timestamp_key = "event_timestamp"; + } + ]; + }; + }; + yamlFormat = pkgs.formats.yaml {}; + psqlVersion = pkgs.postgresql_13.psqlSchema; +in +{ + disko.devices.zpool.zfast.datasets."root/persist/var/lib/loki" = + { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/loki"; options.mountpoint = "legacy"; }; + disko.devices.zpool.zfast.datasets."root/persist/var/lib/fluentbit" = + { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/fluentbit"; options.mountpoint = "legacy"; }; + disko.devices.zpool.zfast.datasets."root/persist/var/lib/postgresql" = + { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/postgresql"; options.mountpoint = "legacy"; }; + disko.devices.zpool.zfast.datasets."root/persist/var/lib/postgresql/${psqlVersion}" = + { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/postgresql/${psqlVersion}"; options.mountpoint = "legacy"; }; + environment.persistence."/persist/zfast".directories = [ + { + directory = "/var/lib/postgresql"; + user = config.users.users.postgres.name; + group = config.users.users.postgres.group; + mode = "0755"; + } + { + directory = "/var/lib/fluentbit"; + user = config.users.users.fluentbit.name; + group = config.users.users.fluentbit.group; + mode = "0755"; + } + { + directory = "/var/lib/loki"; + user = config.users.users.loki.name; + group = config.users.users.loki.group; + mode = "0755"; + } + ]; + + ids.uids.fluentbit = 500; + ids.gids.fluentbit = 500; + users.users.fluentbit = { + name = "fluentbit"; + home = "/var/lib/fluentbit"; + uid = config.ids.uids.fluentbit; + group = "fluentbit"; + isSystemUser = true; + extraGroups = [ "systemd-journal" ]; + }; + users.groups.fluentbit.gid = config.ids.gids.fluentbit; + + services.loki = { + enable = true; + configuration = { + auth_enabled = false; + common = { + ring.kvstore.store = "inmemory"; + ring.instance_addr = "127.0.0.1"; + replication_factor = 1; + path_prefix = "/var/lib/loki"; + }; + server.log_level = "warn"; + limits_config = { + reject_old_samples = false; + ingestion_rate_mb = 100; + ingestion_burst_size_mb = 200; + per_stream_rate_limit = "100MB"; + per_stream_rate_limit_burst = "200MB"; + }; + + schema_config.configs = [ + { + from = "2020-10-24"; + store = "boltdb-shipper"; + object_store = "filesystem"; + schema = "v11"; + index.prefix = "index_"; + index.period = "24h"; + } + ]; + }; + }; + services.postgresql = { + enable = true; + package = pkgs.postgresql_13; + ensureDatabases = [ "fluentbit" ]; + ensureUsers = [ + { + name = "fluentbit"; + ensurePermissions."DATABASE \"fluentbit\"" = "ALL PRIVILEGES"; + } + ]; + }; + + environment.systemPackages = [ + pkgs.fluent-bit + ]; + systemd.services.fluent-bit = { + description = "Fluent-bit daemon"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.fluent-bit}/bin/fluent-bit -c ${yamlFormat.generate "fluent.yaml" fluent-bit-config}"; + User = "fluentbit"; + Group = "fluentbit"; + SupplementaryGroups = [ "systemd-journal" ]; + }; + }; +} -- cgit v1.2.3