aboutsummaryrefslogtreecommitdiff
path: root/flakes/mypackages
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2023-10-04 01:35:06 +0200
committerIsmaël Bouya <ismael.bouya@normalesup.org>2023-10-04 02:11:48 +0200
commit1a64deeb894dc95e2645a75771732c6cc53a79ad (patch)
tree1b9df4838f894577a09b9b260151756272efeb53 /flakes/mypackages
parentfa25ffd4583cc362075cd5e1b4130f33306103f0 (diff)
downloadNix-1a64deeb894dc95e2645a75771732c6cc53a79ad.tar.gz
Nix-1a64deeb894dc95e2645a75771732c6cc53a79ad.tar.zst
Nix-1a64deeb894dc95e2645a75771732c6cc53a79ad.zip
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
Diffstat (limited to 'flakes/mypackages')
-rw-r--r--flakes/mypackages/flake.lock83
-rw-r--r--flakes/mypackages/flake.nix43
-rw-r--r--flakes/mypackages/lib/default.nix37
-rw-r--r--flakes/mypackages/lib/flake-parts-lib.nix10
-rw-r--r--flakes/mypackages/lib/node-env.nix542
-rw-r--r--flakes/mypackages/lib/private/default.nix20
-rw-r--r--flakes/mypackages/overlays/bitlbee-discord/default.nix12
-rw-r--r--flakes/mypackages/overlays/bitlbee/bitlbee_long_nicks.patch56
-rw-r--r--flakes/mypackages/overlays/bitlbee/default.nix5
-rw-r--r--flakes/mypackages/overlays/databases/mysql/default.nix28
-rw-r--r--flakes/mypackages/overlays/databases/postgresql/default.nix8
-rw-r--r--flakes/mypackages/overlays/default.nix25
-rw-r--r--flakes/mypackages/overlays/gitolite/default.nix8
-rwxr-xr-xflakes/mypackages/overlays/gitolite/invite172
-rw-r--r--flakes/mypackages/overlays/gitweb/default.nix7
-rw-r--r--flakes/mypackages/overlays/gitweb/theme/git-favicon.pngbin0 -> 1125 bytes
-rw-r--r--flakes/mypackages/overlays/gitweb/theme/git-logo.pngbin0 -> 2412 bytes
-rw-r--r--flakes/mypackages/overlays/gitweb/theme/gitweb.css783
-rw-r--r--flakes/mypackages/overlays/gitweb/theme/gitweb.js27
-rw-r--r--flakes/mypackages/overlays/goaccess/default.nix13
-rw-r--r--flakes/mypackages/overlays/kanboard/default.nix19
-rw-r--r--flakes/mypackages/overlays/morph/default.nix27
-rw-r--r--flakes/mypackages/overlays/morph/dry-run.patch59
-rw-r--r--flakes/mypackages/overlays/morph/verbose_nix.patch12
-rw-r--r--flakes/mypackages/overlays/php-packages/mysqli_patch.patch11
-rw-r--r--flakes/mypackages/overlays/postfix/default.nix3
-rw-r--r--flakes/mypackages/overlays/taskwarrior/TW-1778_patch.diff12
-rw-r--r--flakes/mypackages/overlays/taskwarrior/default.nix16
-rw-r--r--flakes/mypackages/overlays/ympd/default.nix14
-rw-r--r--flakes/mypackages/overlays/ympd/ympd-password-env.patch23
-rw-r--r--flakes/mypackages/pkgs/bash-libs/default.nix33
-rw-r--r--flakes/mypackages/pkgs/boinctui/default.nix21
-rw-r--r--flakes/mypackages/pkgs/cnagios/default.nix32
-rw-r--r--flakes/mypackages/pkgs/commento/default.nix20
-rw-r--r--flakes/mypackages/pkgs/composer-env/default.nix243
-rw-r--r--flakes/mypackages/pkgs/crypto/cardano-cli/default.nix16
-rw-r--r--flakes/mypackages/pkgs/crypto/cardano/default.nix35
-rw-r--r--flakes/mypackages/pkgs/crypto/iota-cli-app/default.nix29
-rw-r--r--flakes/mypackages/pkgs/crypto/iota-cli-app/node-packages.nix1814
-rw-r--r--flakes/mypackages/pkgs/crypto/sia/default.nix21
-rw-r--r--flakes/mypackages/pkgs/default.nix64
-rw-r--r--flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/default.nix30
-rw-r--r--flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch12
-rw-r--r--flakes/mypackages/pkgs/flrn/default.nix22
-rw-r--r--flakes/mypackages/pkgs/fluent-bit/default.nix47
-rw-r--r--flakes/mypackages/pkgs/fluentd/Gemfile3
-rw-r--r--flakes/mypackages/pkgs/fluentd/Gemfile.lock38
-rw-r--r--flakes/mypackages/pkgs/fluentd/default.nix20
-rw-r--r--flakes/mypackages/pkgs/fluentd/gemset.nix126
-rw-r--r--flakes/mypackages/pkgs/gearmand/default.nix16
-rw-r--r--flakes/mypackages/pkgs/genius/default.nix19
-rw-r--r--flakes/mypackages/pkgs/ical2html/default.nix11
-rw-r--r--flakes/mypackages/pkgs/monitoring-plugins/default.nix33
-rw-r--r--flakes/mypackages/pkgs/mtop/default.nix24
-rw-r--r--flakes/mypackages/pkgs/mutt-ics/default.nix15
-rw-r--r--flakes/mypackages/pkgs/muttprint/0.73-4.diff.gzbin0 -> 16525 bytes
-rw-r--r--flakes/mypackages/pkgs/muttprint/default.nix44
-rw-r--r--flakes/mypackages/pkgs/muttprint/regex.patch11
-rw-r--r--flakes/mypackages/pkgs/muttprint/two_edge.patch19
-rw-r--r--flakes/mypackages/pkgs/naemon-livestatus/default.nix32
-rw-r--r--flakes/mypackages/pkgs/naemon/default.nix44
-rw-r--r--flakes/mypackages/pkgs/nagios-cli/default.nix12
-rw-r--r--flakes/mypackages/pkgs/nagnu/default.nix21
-rw-r--r--flakes/mypackages/pkgs/nb/default.nix22
-rw-r--r--flakes/mypackages/pkgs/note/default.nix19
-rw-r--r--flakes/mypackages/pkgs/notmuch/notmuch-python/default.nix16
-rw-r--r--flakes/mypackages/pkgs/notmuch/notmuch-vim/default.nix11
-rw-r--r--flakes/mypackages/pkgs/perl-ical-parser-html/default.nix48
-rw-r--r--flakes/mypackages/pkgs/pgpid/default.nix33
-rw-r--r--flakes/mypackages/pkgs/predixy/default.nix19
-rw-r--r--flakes/mypackages/pkgs/proftpd/default.nix22
-rw-r--r--flakes/mypackages/pkgs/pure-ftpd/default.nix30
-rw-r--r--flakes/mypackages/pkgs/riotkit-do/default.nix60
-rw-r--r--flakes/mypackages/pkgs/rrsync_sudo/default.nix8
-rw-r--r--flakes/mypackages/pkgs/rrsync_sudo/sudo.patch20
-rw-r--r--flakes/mypackages/pkgs/shaarli/default.nix24
-rw-r--r--flakes/mypackages/pkgs/shaarli/shaarli_ldap.patch425
-rw-r--r--flakes/mypackages/pkgs/signaldctl/default.nix13
-rw-r--r--flakes/mypackages/pkgs/slang_1/default.nix25
-rw-r--r--flakes/mypackages/pkgs/status_engine/host_perfdata.patch47
-rw-r--r--flakes/mypackages/pkgs/status_engine/interface.nix24
-rw-r--r--flakes/mypackages/pkgs/status_engine/interface_composer.lock1323
-rw-r--r--flakes/mypackages/pkgs/status_engine/interface_php_packages.nix217
-rw-r--r--flakes/mypackages/pkgs/status_engine/module.nix19
-rw-r--r--flakes/mypackages/pkgs/status_engine/worker.nix37
-rw-r--r--flakes/mypackages/pkgs/status_engine/worker_composer.lock2072
-rw-r--r--flakes/mypackages/pkgs/status_engine/worker_php_packages.nix266
-rw-r--r--flakes/mypackages/pkgs/telegram-history-dump/default.nix18
-rw-r--r--flakes/mypackages/pkgs/telegramircd/default.nix22
-rw-r--r--flakes/mypackages/pkgs/telethon_sync/default.nix24
-rw-r--r--flakes/mypackages/pkgs/terminal-velocity/default.nix37
-rw-r--r--flakes/mypackages/pkgs/terminal-velocity/fix_build.patch21
-rw-r--r--flakes/mypackages/pkgs/terminal-velocity/python3_support.patch215
-rw-r--r--flakes/mypackages/pkgs/terminal-velocity/sort_found_notes.patch73
-rw-r--r--flakes/mypackages/pkgs/tiv/default.nix19
-rw-r--r--flakes/mypackages/pkgs/tiv/tiv_builder.sh8
-rw-r--r--flakes/mypackages/pkgs/twins/default.nix15
-rw-r--r--flakes/mypackages/pkgs/umami/build-geo.patch15
-rw-r--r--flakes/mypackages/pkgs/umami/default.nix72
-rw-r--r--flakes/mypackages/pkgs/unicode/default.nix48
-rw-r--r--flakes/mypackages/pkgs/upcmd/default.nix13
-rw-r--r--flakes/mypackages/pkgs/webapps/adminer/default.nix14
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/default.nix88
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/.htaccess9
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/footer.html31
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/header.html3
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/archive.pngbin0 -> 551 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/audio.pngbin0 -> 554 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/authors.pngbin0 -> 492 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bin.pngbin0 -> 551 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/blank.pngbin0 -> 227 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bmp.pngbin0 -> 663 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/c.pngbin0 -> 554 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/calc.pngbin0 -> 506 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cd.pngbin0 -> 757 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/copying.pngbin0 -> 699 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cpp.pngbin0 -> 599 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/css.pngbin0 -> 592 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/deb.pngbin0 -> 671 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/default.pngbin0 -> 311 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/diff.pngbin0 -> 586 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/doc.pngbin0 -> 535 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/draw.pngbin0 -> 679 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/eps.pngbin0 -> 619 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/exe.pngbin0 -> 846 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-home.pngbin0 -> 618 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-open.pngbin0 -> 431 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-page.pngbin0 -> 591 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.pngbin0 -> 494 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent.pngbin0 -> 621 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder.pngbin0 -> 395 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gif.pngbin0 -> 655 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gzip.pngbin0 -> 551 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/h.pngbin0 -> 504 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/hpp.pngbin0 -> 530 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/html.pngbin0 -> 770 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ico.pngbin0 -> 792 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/image.pngbin0 -> 671 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/install.pngbin0 -> 788 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/java.pngbin0 -> 658 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/jpg.pngbin0 -> 675 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/js.pngbin0 -> 540 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/json.pngbin0 -> 540 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/log.pngbin0 -> 423 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/makefile.pngbin0 -> 614 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/markdown.pngbin0 -> 627 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/package.pngbin0 -> 614 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pdf.pngbin0 -> 799 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/php.pngbin0 -> 757 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/playlist.pngbin0 -> 610 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/png.pngbin0 -> 679 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pres.pngbin0 -> 629 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ps.pngbin0 -> 817 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/psd.pngbin0 -> 622 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/py.pngbin0 -> 743 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rar.pngbin0 -> 621 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rb.pngbin0 -> 781 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/readme.pngbin0 -> 384 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rpm.pngbin0 -> 660 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rss.pngbin0 -> 660 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rtf.pngbin0 -> 627 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/script.pngbin0 -> 613 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/source.pngbin0 -> 586 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/sql.pngbin0 -> 510 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tar.pngbin0 -> 406 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tex.pngbin0 -> 677 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/text.pngbin0 -> 463 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tiff.pngbin0 -> 654 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/unknown.pngbin0 -> 556 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/vcal.pngbin0 -> 556 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/video.pngbin0 -> 739 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/xml.pngbin0 -> 585 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/zip.pngbin0 -> 617 bytes
-rw-r--r--flakes/mypackages/pkgs/webapps/apache-theme/theme/style.css160
-rw-r--r--flakes/mypackages/pkgs/webapps/awl/default.nix16
-rw-r--r--flakes/mypackages/pkgs/webapps/davical/default.nix23
-rw-r--r--flakes/mypackages/pkgs/webapps/default.nix24
-rw-r--r--flakes/mypackages/pkgs/webapps/dokuwiki/default.nix54
-rw-r--r--flakes/mypackages/pkgs/webapps/dokuwiki/plugins/farmer.nix25
-rw-r--r--flakes/mypackages/pkgs/webapps/dokuwiki/plugins/todo.nix18
-rw-r--r--flakes/mypackages/pkgs/webapps/infcloud/default.nix19
-rw-r--r--flakes/mypackages/pkgs/webapps/infcloud/infcloud_config.js1446
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report.php.diff20
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report_page.php.diff53
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add.php.diff20
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff52
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/default.nix44
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/slack/default.nix18
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff12
-rw-r--r--flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix22
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/audioplayer.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/bookmarks.nix21
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/calendar.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/carnet.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/contacts.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/cookbook.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/deck.nix27
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/drawio.nix24
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/external.nix27
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/extract.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/files_markdown.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/files_mindmap.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/files_readmemd.nix14
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/flowupload.nix14
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxedit.nix22
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxpod.nix31
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/groupfolders.nix27
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/impersonate.nix27
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/integration_dropbox.nix13
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/keeweb.nix24
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/maps.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/metadata.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/music.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/notes.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/ocsms.nix21
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/onlyoffice.nix21
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/passman.nix21
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/polls.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/side_menu.nix16
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/social.nix14
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/spreed.nix27
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/talk_matterbridge.nix14
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/apps/tasks.nix15
-rw-r--r--flakes/mypackages/pkgs/webapps/nextcloud/default.nix84
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/default.nix61
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/extensions/adduser.nix22
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/extensions/autosubscribe.nix19
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/extensions/mailinglist.nix18
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/extensions/markdown.nix20
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/extensions/mchat.nix21
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/extensions/monitoranswers.nix19
-rw-r--r--flakes/mypackages/pkgs/webapps/phpbb/langs/fr.nix12
-rw-r--r--flakes/mypackages/pkgs/webapps/phpldapadmin/default.nix27
-rw-r--r--flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-align-button.patch11
-rw-r--r--flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-fix-password.patch13
-rw-r--r--flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch12
-rw-r--r--flakes/mypackages/pkgs/webapps/rompr/default.nix17
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch209
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/default.nix85
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/spip/default.nix32
-rw-r--r--flakes/mypackages/pkgs/webapps/spip/spip_ldap_patch.patch60
-rw-r--r--flakes/mypackages/pkgs/webapps/spip/spip_mes_options.php18
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/default.nix37
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix18
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch12
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix17
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/default.nix18
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch18
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix17
-rw-r--r--flakes/mypackages/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix17
-rw-r--r--flakes/mypackages/pkgs/webapps/wallabag/default.nix54
-rw-r--r--flakes/mypackages/pkgs/webapps/wallabag/ldap.patch664
-rw-r--r--flakes/mypackages/pkgs/webapps/yourls/default.nix37
-rw-r--r--flakes/mypackages/pkgs/webapps/yourls/plugins/ldap/default.nix17
262 files changed, 14930 insertions, 0 deletions
diff --git a/flakes/mypackages/flake.lock b/flakes/mypackages/flake.lock
new file mode 100644
index 0000000..f11f6c5
--- /dev/null
+++ b/flakes/mypackages/flake.lock
@@ -0,0 +1,83 @@
1{
2 "nodes": {
3 "flake-parts": {
4 "inputs": {
5 "nixpkgs-lib": "nixpkgs-lib"
6 },
7 "locked": {
8 "lastModified": 1675295133,
9 "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=",
10 "owner": "hercules-ci",
11 "repo": "flake-parts",
12 "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f",
13 "type": "github"
14 },
15 "original": {
16 "owner": "hercules-ci",
17 "repo": "flake-parts",
18 "type": "github"
19 }
20 },
21 "nixpkgs": {
22 "locked": {
23 "lastModified": 1646497237,
24 "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
25 "owner": "nixos",
26 "repo": "nixpkgs",
27 "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
28 "type": "github"
29 },
30 "original": {
31 "owner": "nixos",
32 "repo": "nixpkgs",
33 "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
34 "type": "github"
35 }
36 },
37 "nixpkgs-lib": {
38 "locked": {
39 "dir": "lib",
40 "lastModified": 1675183161,
41 "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
42 "owner": "NixOS",
43 "repo": "nixpkgs",
44 "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
45 "type": "github"
46 },
47 "original": {
48 "dir": "lib",
49 "owner": "NixOS",
50 "ref": "nixos-unstable",
51 "repo": "nixpkgs",
52 "type": "github"
53 }
54 },
55 "root": {
56 "inputs": {
57 "flake-parts": "flake-parts",
58 "nixpkgs": "nixpkgs",
59 "webapps-ttrss": "webapps-ttrss"
60 }
61 },
62 "webapps-ttrss": {
63 "flake": false,
64 "locked": {
65 "lastModified": 1546759381,
66 "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=",
67 "ref": "master",
68 "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
69 "revCount": 9256,
70 "type": "git",
71 "url": "https://git.tt-rss.org/fox/tt-rss.git"
72 },
73 "original": {
74 "ref": "master",
75 "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
76 "type": "git",
77 "url": "https://git.tt-rss.org/fox/tt-rss.git"
78 }
79 }
80 },
81 "root": "root",
82 "version": 7
83}
diff --git a/flakes/mypackages/flake.nix b/flakes/mypackages/flake.nix
new file mode 100644
index 0000000..adad96f
--- /dev/null
+++ b/flakes/mypackages/flake.nix
@@ -0,0 +1,43 @@
1{
2 description = "immae-eu infrastructure";
3 inputs = {
4 flake-parts.url = "github:hercules-ci/flake-parts";
5 # TODO: use nixos-unstable branch at some point and use the lock to keep the actual commit
6 nixpkgs.url = "github:nixos/nixpkgs/062a0c5437b68f950b081bbfc8a699d57a4ee026";
7 webapps-ttrss = {
8 url = "https://git.tt-rss.org/fox/tt-rss.git";
9 ref = "master";
10 rev = "986ca251f995f7754a0470d3e0c44538a545081f";
11 type = "git";
12 flake = false;
13 };
14 };
15 outputs = inputs@{ self, flake-parts, ... }:
16 flake-parts.lib.mkFlake { inherit inputs; } {
17 imports = [
18 (import ./lib/flake-parts-lib.nix { name = "lib"; type = "unspecified"; })
19 ];
20 systems = [ "x86_64-linux" ];
21 perSystem = { config, inputs', pkgs, ... }:
22 let
23 mypkgs = import ./pkgs/default.nix { inherit pkgs; inherit (self) mylibs sources; };
24 in {
25 packages = builtins.removeAttrs mypkgs [ "composerEnv" "webapps-apache-theme" ];
26 lib = {
27 inherit (self) sources;
28 inherit (mypkgs) composerEnv;
29 inherit (self.mylibs) postfixScript;
30 apache-theme = mypkgs.webapps-apache-theme;
31 };
32 };
33 flake = {
34 mylibs = import ./lib/default.nix;
35 sources.tools.ttrss = inputs.webapps-ttrss;
36 # We want overlays to be infected (in contrary to "packages"
37 # above): if someone imports an overlay here, we want his own
38 # overlays to be taken into account in every package, even new
39 # ones.
40 overlays = import ./overlays/default.nix { inherit (self) sources mylibs; };
41 };
42 };
43}
diff --git a/flakes/mypackages/lib/default.nix b/flakes/mypackages/lib/default.nix
new file mode 100644
index 0000000..972ace0
--- /dev/null
+++ b/flakes/mypackages/lib/default.nix
@@ -0,0 +1,37 @@
1{
2 flakePartsAddPerSystem = import ./flake-parts-lib.nix;
3 nodeEnv = import ./node-env.nix;
4 postfixScript = pkgs: name: script: pkgs.writeScript name ''
5 #! ${pkgs.stdenv.shell}
6 mail=$(${pkgs.coreutils}/bin/cat -)
7 output=$(echo "$mail" | ${script} 2>&1)
8 ret=$?
9
10 if [ "$ret" != "0" ]; then
11 echo "$mail" \
12 | ${pkgs.procmail}/bin/formail -i "X-Return-Code: $ret" \
13 | /run/wrappers/bin/sendmail -i scripts_error+${name}@mail.immae.eu
14
15 messageId=$(echo "$mail" | ${pkgs.procmail}/bin/formail -x "Message-Id:")
16 repeat=$(echo "$mail" | ${pkgs.procmail}/bin/formail -X "From:" -X "Received:")
17
18 ${pkgs.coreutils}/bin/cat <<EOF | /run/wrappers/bin/sendmail -i scripts_error+${name}@mail.immae.eu
19 $repeat
20 To: scripts_error+${name}@mail.immae.eu
21 Subject: Log from script error
22 Content-Type: text/plain; charset="UTF-8"
23 Content-Transfer-Encoding: 8bit
24 References:$messageId
25 MIME-Version: 1.0
26 X-Return-Code: $ret
27
28 Error code: $ret
29 Output of message:
30 --------------
31 $output
32 --------------
33 EOF
34 fi
35 '';
36
37}
diff --git a/flakes/mypackages/lib/flake-parts-lib.nix b/flakes/mypackages/lib/flake-parts-lib.nix
new file mode 100644
index 0000000..271a4cf
--- /dev/null
+++ b/flakes/mypackages/lib/flake-parts-lib.nix
@@ -0,0 +1,10 @@
1i@{ name, type }:
2{ lib, flake-parts-lib, ... }:
3flake-parts-lib.mkTransposedPerSystemModule {
4 inherit name;
5 option = lib.mkOption {
6 type = lib.types.lazyAttrsOf lib.types."${type}";
7 default = { };
8 };
9 file = import ./flake-parts-lib.nix i;
10}
diff --git a/flakes/mypackages/lib/node-env.nix b/flakes/mypackages/lib/node-env.nix
new file mode 100644
index 0000000..842caa1
--- /dev/null
+++ b/flakes/mypackages/lib/node-env.nix
@@ -0,0 +1,542 @@
1# This file originates from node2nix
2
3{lib, stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}:
4
5let
6 python = if nodejs ? python then nodejs.python else python2;
7
8 # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
9 tarWrapper = runCommand "tarWrapper" {} ''
10 mkdir -p $out/bin
11
12 cat > $out/bin/tar <<EOF
13 #! ${stdenv.shell} -e
14 $(type -p tar) "\$@" --warning=no-unknown-keyword
15 EOF
16
17 chmod +x $out/bin/tar
18 '';
19
20 # Function that generates a TGZ file from a NPM project
21 buildNodeSourceDist =
22 { name, version, src, ... }:
23
24 stdenv.mkDerivation {
25 name = "node-tarball-${name}-${version}";
26 inherit src;
27 buildInputs = [ nodejs ];
28 buildPhase = ''
29 export HOME=$TMPDIR
30 tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
31 '';
32 installPhase = ''
33 mkdir -p $out/tarballs
34 mv $tgzFile $out/tarballs
35 mkdir -p $out/nix-support
36 echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
37 '';
38 };
39
40 includeDependencies = {dependencies}:
41 lib.optionalString (dependencies != [])
42 (lib.concatMapStrings (dependency:
43 ''
44 # Bundle the dependencies of the package
45 mkdir -p node_modules
46 cd node_modules
47
48 # Only include dependencies if they don't exist. They may also be bundled in the package.
49 if [ ! -e "${dependency.name}" ]
50 then
51 ${composePackage dependency}
52 fi
53
54 cd ..
55 ''
56 ) dependencies);
57
58 # Recursively composes the dependencies of a package
59 composePackage = { name, packageName, src, dependencies ? [], ... }@args:
60 ''
61 DIR=$(pwd)
62 cd $TMPDIR
63
64 unpackFile ${src}
65
66 # Make the base dir in which the target dependency resides first
67 mkdir -p "$(dirname "$DIR/${packageName}")"
68
69 if [ -f "${src}" ]
70 then
71 # Figure out what directory has been unpacked
72 packageDir="$(find . -maxdepth 1 -type d | tail -1)"
73
74 # Restore write permissions to make building work
75 find "$packageDir" -type d -print0 | xargs -0 chmod u+x
76 chmod -R u+w "$packageDir"
77
78 # Move the extracted tarball into the output folder
79 mv "$packageDir" "$DIR/${packageName}"
80 elif [ -d "${src}" ]
81 then
82 # Get a stripped name (without hash) of the source directory.
83 # On old nixpkgs it's already set internally.
84 if [ -z "$strippedName" ]
85 then
86 strippedName="$(stripHash ${src})"
87 fi
88
89 # Restore write permissions to make building work
90 chmod -R u+w "$strippedName"
91
92 # Move the extracted directory into the output folder
93 mv "$strippedName" "$DIR/${packageName}"
94 fi
95
96 # Unset the stripped name to not confuse the next unpack step
97 unset strippedName
98
99 # Include the dependencies of the package
100 cd "$DIR/${packageName}"
101 ${includeDependencies { inherit dependencies; }}
102 cd ..
103 ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
104 '';
105
106 pinpointDependencies = {dependencies, production}:
107 let
108 pinpointDependenciesFromPackageJSON = writeTextFile {
109 name = "pinpointDependencies.js";
110 text = ''
111 var fs = require('fs');
112 var path = require('path');
113
114 function resolveDependencyVersion(location, name) {
115 if(location == process.env['NIX_STORE']) {
116 return null;
117 } else {
118 var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
119
120 if(fs.existsSync(dependencyPackageJSON)) {
121 var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
122
123 if(dependencyPackageObj.name == name) {
124 return dependencyPackageObj.version;
125 }
126 } else {
127 return resolveDependencyVersion(path.resolve(location, ".."), name);
128 }
129 }
130 }
131
132 function replaceDependencies(dependencies) {
133 if(typeof dependencies == "object" && dependencies !== null) {
134 for(var dependency in dependencies) {
135 var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
136
137 if(resolvedVersion === null) {
138 process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
139 } else {
140 dependencies[dependency] = resolvedVersion;
141 }
142 }
143 }
144 }
145
146 /* Read the package.json configuration */
147 var packageObj = JSON.parse(fs.readFileSync('./package.json'));
148
149 /* Pinpoint all dependencies */
150 replaceDependencies(packageObj.dependencies);
151 if(process.argv[2] == "development") {
152 replaceDependencies(packageObj.devDependencies);
153 }
154 replaceDependencies(packageObj.optionalDependencies);
155
156 /* Write the fixed package.json file */
157 fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
158 '';
159 };
160 in
161 ''
162 node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
163
164 ${lib.optionalString (dependencies != [])
165 ''
166 if [ -d node_modules ]
167 then
168 cd node_modules
169 ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
170 cd ..
171 fi
172 ''}
173 '';
174
175 # Recursively traverses all dependencies of a package and pinpoints all
176 # dependencies in the package.json file to the versions that are actually
177 # being used.
178
179 pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
180 ''
181 if [ -d "${packageName}" ]
182 then
183 cd "${packageName}"
184 ${pinpointDependencies { inherit dependencies production; }}
185 cd ..
186 ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
187 fi
188 '';
189
190 # Extract the Node.js source code which is used to compile packages with
191 # native bindings
192 nodeSources = runCommand "node-sources" {} ''
193 tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
194 mv node-* $out
195 '';
196
197 # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
198 addIntegrityFieldsScript = writeTextFile {
199 name = "addintegrityfields.js";
200 text = ''
201 var fs = require('fs');
202 var path = require('path');
203
204 function augmentDependencies(baseDir, dependencies) {
205 for(var dependencyName in dependencies) {
206 var dependency = dependencies[dependencyName];
207
208 // Open package.json and augment metadata fields
209 var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
210 var packageJSONPath = path.join(packageJSONDir, "package.json");
211
212 if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
213 console.log("Adding metadata fields to: "+packageJSONPath);
214 var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
215
216 if(dependency.integrity) {
217 packageObj["_integrity"] = dependency.integrity;
218 } else {
219 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.
220 }
221
222 packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
223 fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
224 }
225
226 // Augment transitive dependencies
227 if(dependency.dependencies !== undefined) {
228 augmentDependencies(packageJSONDir, dependency.dependencies);
229 }
230 }
231 }
232
233 if(fs.existsSync("./package-lock.json")) {
234 var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
235
236 if(packageLock.lockfileVersion !== 1) {
237 process.stderr.write("Sorry, I only understand lock file version 1!\n");
238 process.exit(1);
239 }
240
241 if(packageLock.dependencies !== undefined) {
242 augmentDependencies(".", packageLock.dependencies);
243 }
244 }
245 '';
246 };
247
248 # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
249 reconstructPackageLock = writeTextFile {
250 name = "addintegrityfields.js";
251 text = ''
252 var fs = require('fs');
253 var path = require('path');
254
255 var packageObj = JSON.parse(fs.readFileSync("package.json"));
256
257 var lockObj = {
258 name: packageObj.name,
259 version: packageObj.version,
260 lockfileVersion: 1,
261 requires: true,
262 dependencies: {}
263 };
264
265 function augmentPackageJSON(filePath, dependencies) {
266 var packageJSON = path.join(filePath, "package.json");
267 if(fs.existsSync(packageJSON)) {
268 var packageObj = JSON.parse(fs.readFileSync(packageJSON));
269 dependencies[packageObj.name] = {
270 version: packageObj.version,
271 integrity: "sha1-000000000000000000000000000=",
272 dependencies: {}
273 };
274 processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
275 }
276 }
277
278 function processDependencies(dir, dependencies) {
279 if(fs.existsSync(dir)) {
280 var files = fs.readdirSync(dir);
281
282 files.forEach(function(entry) {
283 var filePath = path.join(dir, entry);
284 var stats = fs.statSync(filePath);
285
286 if(stats.isDirectory()) {
287 if(entry.substr(0, 1) == "@") {
288 // When we encounter a namespace folder, augment all packages belonging to the scope
289 var pkgFiles = fs.readdirSync(filePath);
290
291 pkgFiles.forEach(function(entry) {
292 if(stats.isDirectory()) {
293 var pkgFilePath = path.join(filePath, entry);
294 augmentPackageJSON(pkgFilePath, dependencies);
295 }
296 });
297 } else {
298 augmentPackageJSON(filePath, dependencies);
299 }
300 }
301 });
302 }
303 }
304
305 processDependencies("node_modules", lockObj.dependencies);
306
307 fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
308 '';
309 };
310
311 # Builds and composes an NPM package including all its dependencies
312 buildNodePackage =
313 { name
314 , packageName
315 , version
316 , dependencies ? []
317 , buildInputs ? []
318 , production ? true
319 , npmFlags ? ""
320 , dontNpmInstall ? false
321 , bypassCache ? false
322 , preRebuild ? ""
323 , dontStrip ? true
324 , unpackPhase ? "true"
325 , buildPhase ? "true"
326 , ... }@args:
327
328 let
329 forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
330 extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ];
331 in
332 stdenv.mkDerivation ({
333 name = "node-${name}-${version}";
334 buildInputs = [ tarWrapper python nodejs ]
335 ++ lib.optional (stdenv.isLinux) utillinux
336 ++ lib.optional (stdenv.isDarwin) libtool
337 ++ buildInputs;
338
339 inherit dontStrip; # Stripping may fail a build for some package deployments
340 inherit dontNpmInstall preRebuild unpackPhase buildPhase;
341
342 compositionScript = composePackage args;
343 pinpointDependenciesScript = pinpointDependenciesOfPackage args;
344
345 passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
346
347 installPhase = ''
348 # Create and enter a root node_modules/ folder
349 mkdir -p $out/lib/node_modules
350 cd $out/lib/node_modules
351
352 # Compose the package and all its dependencies
353 source $compositionScriptPath
354
355 # Pinpoint the versions of all dependencies to the ones that are actually being used
356 echo "pinpointing versions of dependencies..."
357 source $pinpointDependenciesScriptPath
358
359 # Patch the shebangs of the bundled modules to prevent them from
360 # calling executables outside the Nix store as much as possible
361 patchShebangs .
362
363 # Deploy the Node.js package by running npm install. Since the
364 # dependencies have been provided already by ourselves, it should not
365 # attempt to install them again, which is good, because we want to make
366 # it Nix's responsibility. If it needs to install any dependencies
367 # anyway (e.g. because the dependency parameters are
368 # incomplete/incorrect), it fails.
369 #
370 # The other responsibilities of NPM are kept -- version checks, build
371 # steps, postprocessing etc.
372
373 export HOME=$TMPDIR
374 cd "${packageName}"
375 runHook preRebuild
376
377 ${lib.optionalString bypassCache ''
378 if [ ! -f package-lock.json ]
379 then
380 echo "No package-lock.json file found, reconstructing..."
381 node ${reconstructPackageLock}
382 fi
383
384 node ${addIntegrityFieldsScript}
385 ''}
386
387 npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
388
389 if [ "$dontNpmInstall" != "1" ]
390 then
391 # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
392 rm -f npm-shrinkwrap.json
393
394 npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
395 fi
396
397 # Create symlink to the deployed executable folder, if applicable
398 if [ -d "$out/lib/node_modules/.bin" ]
399 then
400 ln -s $out/lib/node_modules/.bin $out/bin
401 fi
402
403 # Create symlinks to the deployed manual page folders, if applicable
404 if [ -d "$out/lib/node_modules/${packageName}/man" ]
405 then
406 mkdir -p $out/share
407 for dir in "$out/lib/node_modules/${packageName}/man/"*
408 do
409 mkdir -p $out/share/man/$(basename "$dir")
410 for page in "$dir"/*
411 do
412 ln -s $page $out/share/man/$(basename "$dir")
413 done
414 done
415 fi
416
417 # Run post install hook, if provided
418 runHook postInstall
419 '';
420 } // extraArgs);
421
422 # Builds a development shell
423 buildNodeShell =
424 { name
425 , packageName
426 , version
427 , src
428 , dependencies ? []
429 , buildInputs ? []
430 , production ? true
431 , npmFlags ? ""
432 , dontNpmInstall ? false
433 , bypassCache ? false
434 , dontStrip ? true
435 , unpackPhase ? "true"
436 , buildPhase ? "true"
437 , ... }@args:
438
439 let
440 forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
441
442 extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
443
444 nodeDependencies = stdenv.mkDerivation ({
445 name = "node-dependencies-${name}-${version}";
446
447 buildInputs = [ tarWrapper python nodejs ]
448 ++ lib.optional (stdenv.isLinux) utillinux
449 ++ lib.optional (stdenv.isDarwin) libtool
450 ++ buildInputs;
451
452 inherit dontStrip; # Stripping may fail a build for some package deployments
453 inherit dontNpmInstall unpackPhase buildPhase;
454
455 includeScript = includeDependencies { inherit dependencies; };
456 pinpointDependenciesScript = pinpointDependenciesOfPackage args;
457
458 passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
459
460 installPhase = ''
461 mkdir -p $out/${packageName}
462 cd $out/${packageName}
463
464 source $includeScriptPath
465
466 # Create fake package.json to make the npm commands work properly
467 cp ${src}/package.json .
468 chmod 644 package.json
469 ${lib.optionalString bypassCache ''
470 if [ -f ${src}/package-lock.json ]
471 then
472 cp ${src}/package-lock.json .
473 fi
474 ''}
475
476 # Pinpoint the versions of all dependencies to the ones that are actually being used
477 echo "pinpointing versions of dependencies..."
478 cd ..
479 ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
480
481 source $pinpointDependenciesScriptPath
482 cd ${packageName}
483
484 # Patch the shebangs of the bundled modules to prevent them from
485 # calling executables outside the Nix store as much as possible
486 patchShebangs .
487
488 export HOME=$PWD
489
490 ${lib.optionalString bypassCache ''
491 if [ ! -f package-lock.json ]
492 then
493 echo "No package-lock.json file found, reconstructing..."
494 node ${reconstructPackageLock}
495 fi
496
497 node ${addIntegrityFieldsScript}
498 ''}
499
500 npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
501
502 ${lib.optionalString (!dontNpmInstall) ''
503 # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
504 rm -f npm-shrinkwrap.json
505
506 npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
507 ''}
508
509 cd ..
510 ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
511
512 mv ${packageName} lib
513 ln -s $out/lib/node_modules/.bin $out/bin
514 '';
515 } // extraArgs);
516 in
517 stdenv.mkDerivation {
518 name = "node-shell-${name}-${version}";
519
520 buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
521 buildCommand = ''
522 mkdir -p $out/bin
523 cat > $out/bin/shell <<EOF
524 #! ${stdenv.shell} -e
525 $shellHook
526 exec ${stdenv.shell}
527 EOF
528 chmod +x $out/bin/shell
529 '';
530
531 # Provide the dependencies in a development shell through the NODE_PATH environment variable
532 inherit nodeDependencies;
533 shellHook = lib.optionalString (dependencies != []) ''
534 export NODE_PATH=$nodeDependencies/lib/node_modules
535 '';
536 };
537in
538{
539 buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
540 buildNodePackage = lib.makeOverridable buildNodePackage;
541 buildNodeShell = lib.makeOverridable buildNodeShell;
542}
diff --git a/flakes/mypackages/lib/private/default.nix b/flakes/mypackages/lib/private/default.nix
new file mode 100644
index 0000000..86dd840
--- /dev/null
+++ b/flakes/mypackages/lib/private/default.nix
@@ -0,0 +1,20 @@
1{ pkgs }:
2{
3 # This adds header colors to the builds, but it rebuilds the whole
4 # world from scratch, so only use it to debug!
5 # add it as postHook in derivations
6 immaePostHook = ''
7 header() {
8 echo -ne "\033[1;36m"
9 echo -n "$1"
10 echo -e "\033[0m"
11 }
12
13 echoCmd() {
14 printf "\033[1;34m%s:\033[0m" "$1"
15 shift
16 printf ' %q' "$@"
17 echo
18 }
19 '';
20}
diff --git a/flakes/mypackages/overlays/bitlbee-discord/default.nix b/flakes/mypackages/overlays/bitlbee-discord/default.nix
new file mode 100644
index 0000000..4227677
--- /dev/null
+++ b/flakes/mypackages/overlays/bitlbee-discord/default.nix
@@ -0,0 +1,12 @@
1self: super: {
2 bitlbee-discord = super.bitlbee-discord.overrideAttrs(old: rec {
3 version = "master";
4 name = "bitlbee-discord-${version}";
5 src = self.fetchFromGitHub {
6 rev = "607f9887ca85f246e970778e3d40aa5c346365a7";
7 owner = "sm00th";
8 repo = "bitlbee-discord";
9 sha256 = "0jkwhx2walx2ay0vc9x13q0j1qq4r5x30ss03a3j7ks28xvsnxc7";
10 };
11 });
12}
diff --git a/flakes/mypackages/overlays/bitlbee/bitlbee_long_nicks.patch b/flakes/mypackages/overlays/bitlbee/bitlbee_long_nicks.patch
new file mode 100644
index 0000000..70be092
--- /dev/null
+++ b/flakes/mypackages/overlays/bitlbee/bitlbee_long_nicks.patch
@@ -0,0 +1,56 @@
1diff --git a/bitlbee.h b/bitlbee.h
2index 17ab2979..5858277e 100644
3--- a/bitlbee.h
4+++ b/bitlbee.h
5@@ -121,7 +121,7 @@ extern "C" {
6 #define CONTROL_TOPIC "Welcome to the control channel. Type \2help\2 for help information."
7 #define IRCD_INFO PACKAGE " <http://www.bitlbee.org/>"
8
9-#define MAX_NICK_LENGTH 24
10+#define MAX_NICK_LENGTH 99
11
12 #define HELP_FILE VARDIR "help.txt"
13 #define CONF_FILE_DEF ETCDIR "bitlbee.conf"
14diff --git a/tests/check_nick.c b/tests/check_nick.c
15index ca5e5111..909fdcc9 100644
16--- a/tests/check_nick.c
17+++ b/tests/check_nick.c
18@@ -11,16 +11,16 @@
19 START_TEST(test_nick_strip){
20 int i;
21 const char *get[] = { "test:", "test", "test\n",
22- "thisisaveryveryveryverylongnick",
23- "thisisave:ryveryveryverylongnick",
24+ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick",
25+ "thisis:averyveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick",
26 "t::::est",
27 "test123",
28 "123test",
29 "123",
30 NULL };
31 const char *expected[] = { "test", "test", "test",
32- "thisisaveryveryveryveryl",
33- "thisisaveryveryveryveryl",
34+ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryve",
35+ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryve",
36 "test",
37 "test123",
38 "_123test",
39@@ -28,7 +28,7 @@ START_TEST(test_nick_strip){
40 NULL };
41
42 for (i = 0; get[i]; i++) {
43- char copy[60];
44+ char copy[260];
45 strcpy(copy, get[i]);
46 nick_strip(NULL, copy);
47 fail_unless(strcmp(copy, expected[i]) == 0,
48@@ -53,7 +53,7 @@ END_TEST
49
50 START_TEST(test_nick_ok_notok)
51 {
52- const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnick",
53+ const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick",
54 "\nillegalchar", "", "nick%", "123test", NULL };
55 int i;
56
diff --git a/flakes/mypackages/overlays/bitlbee/default.nix b/flakes/mypackages/overlays/bitlbee/default.nix
new file mode 100644
index 0000000..5183d01
--- /dev/null
+++ b/flakes/mypackages/overlays/bitlbee/default.nix
@@ -0,0 +1,5 @@
1self: super: {
2 bitlbee = super.bitlbee.overrideAttrs(old: {
3 patches = (old.patches or []) ++ [ ./bitlbee_long_nicks.patch ];
4 });
5}
diff --git a/flakes/mypackages/overlays/databases/mysql/default.nix b/flakes/mypackages/overlays/databases/mysql/default.nix
new file mode 100644
index 0000000..45dc468
--- /dev/null
+++ b/flakes/mypackages/overlays/databases/mysql/default.nix
@@ -0,0 +1,28 @@
1self: super: rec {
2 #mariadb = super.mariadb_106.overrideAttrs(old: {
3 # passthru = old.passthru // { mysqlVersion = "5.7"; };
4 #});
5 #mariadb_pam = super.mariadb_106.overrideAttrs(old: {
6 # cmakeFlags = old.cmakeFlags ++ [ "-DWITH_AUTHENTICATION_PAM=ON" ];
7 # buildInputs = old.buildInputs ++ [ self.pam ];
8 # outputs = old.outputs ++ [ "dev" ];
9 # passthru = old.passthru // { mysqlVersion = "5.7"; };
10 # postInstall = ''
11 # mkdir -p $dev $dev/lib $dev/share
12 # cp -a $out/include $dev
13 # cp -a $out/lib/{libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a} $dev/lib
14 # cp -a $out/lib/pkgconfig $dev/lib
15 # cp -a $out/share/aclocal $dev/share
16 # '' + old.postInstall;
17 #});
18 ## This patched version includes C headers from the server part (see
19 ## above). It seems to be required to build pam support in clients.
20 #libmysqlclient_pam = super.libmysqlclient.overrideAttrs(old: {
21 # prePatch = old.prePatch or "" + ''
22 # 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
23 # '';
24 # postInstall = old.postInstall or "" + ''
25 # cp -a ${mariadb_pam.dev}/include/* $out/include/mariadb
26 # '';
27 #});
28}
diff --git a/flakes/mypackages/overlays/databases/postgresql/default.nix b/flakes/mypackages/overlays/databases/postgresql/default.nix
new file mode 100644
index 0000000..9ada29c
--- /dev/null
+++ b/flakes/mypackages/overlays/databases/postgresql/default.nix
@@ -0,0 +1,8 @@
1self: super: rec {
2 postgresql_pam = super.postgresql_11.overrideAttrs(old: {
3 # datadir in /var/lib/postgresql is named after psqlSchema
4 passthru = old.passthru // { psqlSchema = "11.0"; };
5 configureFlags = old.configureFlags ++ [ "--with-pam" ];
6 buildInputs = (old.buildInputs or []) ++ [ self.pam ];
7 });
8}
diff --git a/flakes/mypackages/overlays/default.nix b/flakes/mypackages/overlays/default.nix
new file mode 100644
index 0000000..e91d6a1
--- /dev/null
+++ b/flakes/mypackages/overlays/default.nix
@@ -0,0 +1,25 @@
1{ sources, mylibs }:
2{
3 mylibs = self: super: { inherit mylibs; };
4 mypkgs = final: prev: import ../pkgs/default.nix { pkgs = final; inherit mylibs sources; };
5
6 bitlbee = import ./bitlbee;
7 bitlbee-discord = import ./bitlbee-discord;
8 gitweb = import ./gitweb;
9 gitolite = import ./gitolite;
10 goaccess = import ./goaccess;
11 kanboard = import ./kanboard;
12 mysql = import ./databases/mysql;
13 postfix = import ./postfix;
14 postgresql = import ./databases/postgresql;
15 ympd = import ./ympd;
16 morph = import ./morph;
17 cron = self: super: {
18 cron = super.cron.overrideAttrs(old: {
19 # Allow "+" char in MAILTO
20 patchPhase = ''
21 sed -i -e "/static const char safe_delim/s/@/@+/" do_command.c
22 '';
23 });
24 };
25}
diff --git a/flakes/mypackages/overlays/gitolite/default.nix b/flakes/mypackages/overlays/gitolite/default.nix
new file mode 100644
index 0000000..7f8f007
--- /dev/null
+++ b/flakes/mypackages/overlays/gitolite/default.nix
@@ -0,0 +1,8 @@
1self: super: {
2 gitolite = super.gitolite.overrideAttrs(old: {
3 postPatch = old.postPatch + ''
4 sed -i -e "s@/bin/rm@rm@" src/commands/sskm
5 cp ${./invite} src/commands/invite
6 '';
7 });
8}
diff --git a/flakes/mypackages/overlays/gitolite/invite b/flakes/mypackages/overlays/gitolite/invite
new file mode 100755
index 0000000..3cc2dbd
--- /dev/null
+++ b/flakes/mypackages/overlays/gitolite/invite
@@ -0,0 +1,172 @@
1#!/usr/bin/perl
2use strict;
3use warnings;
4
5use lib $ENV{GL_LIBDIR};
6use Gitolite::Rc;
7use Gitolite::Common;
8
9=for usage
10Please see usage at https://www.immae.eu/docs/forge-logicielle/gitolite.html#inviter-des-collaborateurs
11=cut
12
13usage() if @ARGV and ($ARGV[0] eq '-h' or $ARGV[0] eq '--help');
14
15my $rb = $rc{GL_REPO_BASE};
16my $ab = $rc{GL_ADMIN_BASE};
17# get to the keydir
18_chdir("$ab/keydir");
19
20# save arguments for later
21my $operation = shift || 'list';
22my $invitekeyid = shift || '';
23$invitekeyid and $invitekeyid !~ /^[-0-9a-z_]+@[-0-9a-z_]+$/i and die "invalid keyid $invitekeyid\n";
24my ($invited, $keyid) = split /@/, $invitekeyid;
25
26# get the actual userid and keytype
27my $gl_user = $ENV{GL_USER};
28die "This function is reserved for actual users" if $gl_user =~ s/-invite-(.*)$//;
29
30# ----
31# first collect the keys
32
33my ( @invited_keys );
34
35for my $pubkey (`find . -type f -name "*.pub" | sort`) {
36 chomp($pubkey);
37 $pubkey =~ s(^./)(); # artifact of the find command
38
39 my $user = $pubkey;
40 $user =~ s(.*/)(); # foo/bar/baz.pub -> baz.pub
41 $user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz
42
43 if ( $user =~ m(^(zzz-marked-for-...-)?$gl_user-invite-) ) {
44 push @invited_keys, $pubkey;
45 }
46}
47
48# ----
49# list mode; just do it and exit
50sub print_keylist {
51 my ( $message, @list ) = @_;
52 return unless @list;
53 print "== $message ==\n";
54 my $count = 1;
55 for (@list) {
56 my $fp = fingerprint($_);
57 s/(zzz-marked-for-...-)?$gl_user-invite-//g;
58 s/\.pub$//;
59 s(.*/)();
60 print $count++ . ": $fp : $_\n";
61 }
62}
63if ( $operation eq 'list' ) {
64 print "you have the following invited keys:\n";
65 print_keylist( "keys for invited persons", @invited_keys );
66 print "\n\n";
67 exit;
68}
69
70# ----
71# please see docs for details on how a user interacts with this
72
73die "valid operations: add, del\n" unless $operation =~ /^(add|del)$/;
74
75if ( $operation eq 'add' ) {
76 print STDERR "please supply the new key on STDIN. (I recommend you
77 don't try to do this interactively, but use a pipe)\n";
78 kf_add( $gl_user, $invited, $keyid, safe_stdin() );
79} elsif ( $operation eq 'del' ) {
80 kf_del( $gl_user, $invited, $keyid );
81}
82
83exit;
84
85# ----
86
87# make a temp clone and switch to it
88our $TEMPDIR;
89BEGIN { $TEMPDIR = `mktemp -d -t tmp.XXXXXXXXXX`; }
90END { `rm -rf $TEMPDIR`; }
91
92sub cd_temp_clone {
93 chomp($TEMPDIR);
94 hushed_git( "clone", "$rb/gitolite-admin.git", "$TEMPDIR" );
95 chdir($TEMPDIR);
96 my $hostname = `hostname`; chomp($hostname);
97 hushed_git( "config", "--get", "user.email" ) and hushed_git( "config", "user.email", $ENV{USER} . "@" . $hostname );
98 hushed_git( "config", "--get", "user.name" ) and hushed_git( "config", "user.name", "$ENV{USER} on $hostname" );
99}
100
101sub fingerprint {
102 my ($fp, $output) = ssh_fingerprint_file(shift);
103 # Do not print the output of $output to an untrusted destination.
104 die "does not seem to be a valid pubkey\n" unless $fp;
105 return $fp;
106}
107
108sub safe_stdin {
109 # read one line from STDIN
110 my $data;
111 my $ret = read STDIN, $data, 4096;
112 # current pubkeys are approx 400 bytes so we go a little overboard
113 die "could not read pubkey data" . ( defined($ret) ? "" : ": $!" ) . "\n" unless $ret;
114 die "pubkey data seems to have more than one line\n" if $data =~ /\n./;
115 return $data;
116}
117
118sub hushed_git {
119 local (*STDOUT) = \*STDOUT;
120 local (*STDERR) = \*STDERR;
121 open( STDOUT, ">", "/dev/null" );
122 open( STDERR, ">", "/dev/null" );
123 system( "git", @_ );
124}
125
126sub highlander {
127 # there can be only one
128 my ( $keyid, $die_if_empty, @a ) = @_;
129 # too many?
130 if ( @a > 1 ) {
131 print STDERR "
132more than one key satisfies this condition, and I can't deal with that!
133The keys are:
134
135";
136 print STDERR "\t" . join( "\n\t", @a ), "\n\n";
137 exit 1;
138 }
139 # too few?
140 die "no keys with " . ( $keyid || "empty" ) . " keyid found\n" if $die_if_empty and not @a;
141
142 return @a;
143}
144
145sub kf_add {
146 my ( $gl_user, $invited, $keyid, $keymaterial ) = @_;
147
148 # add a new "invited" key for $gl_user.
149 cd_temp_clone();
150 chdir("keydir");
151
152 mkdir("invited");
153 _print( "invited/$gl_user-invite-$invited\@$keyid.pub", $keymaterial );
154 hushed_git( "add", "." ) and die "git add failed\n";
155 my $fp = fingerprint("invited/$gl_user-invite-$invited\@$keyid.pub");
156 hushed_git( "commit", "-m", "invite add $gl_user-invite-$invited\@$keyid ($fp)" ) and die "git commit failed\n";
157 system("gitolite push >/dev/null 2>/dev/null") and die "git push failed\n";
158}
159
160sub kf_del {
161 my ( $gl_user, $invited, $keyid ) = @_;
162
163 cd_temp_clone();
164 chdir("keydir");
165
166 my @pk = highlander( $keyid, 1, grep { m(^(.*/)?(zzz-marked-for-...-)?$gl_user-invite-$invited\@$keyid.pub$) } @invited_keys );
167
168 my $fp = fingerprint( $pk[0] );
169 hushed_git( "rm", $pk[0]) and die "git mv failed\n";
170 hushed_git( "commit", "-m", "invite del $pk[0] ($fp)" ) and die "git commit failed\n";
171 system("gitolite push >/dev/null 2>/dev/null") and die "git push failed\n";
172}
diff --git a/flakes/mypackages/overlays/gitweb/default.nix b/flakes/mypackages/overlays/gitweb/default.nix
new file mode 100644
index 0000000..27a1152
--- /dev/null
+++ b/flakes/mypackages/overlays/gitweb/default.nix
@@ -0,0 +1,7 @@
1self: super: {
2 gitweb = super.gitweb.overrideAttrs(old: {
3 postBuild = old.postBuild or "" + ''
4 cp -r ${./theme} $out/gitweb-theme;
5 '';
6 });
7}
diff --git a/flakes/mypackages/overlays/gitweb/theme/git-favicon.png b/flakes/mypackages/overlays/gitweb/theme/git-favicon.png
new file mode 100644
index 0000000..4fa44bb
--- /dev/null
+++ b/flakes/mypackages/overlays/gitweb/theme/git-favicon.png
Binary files differ
diff --git a/flakes/mypackages/overlays/gitweb/theme/git-logo.png b/flakes/mypackages/overlays/gitweb/theme/git-logo.png
new file mode 100644
index 0000000..fdaf7b7
--- /dev/null
+++ b/flakes/mypackages/overlays/gitweb/theme/git-logo.png
Binary files differ
diff --git a/flakes/mypackages/overlays/gitweb/theme/gitweb.css b/flakes/mypackages/overlays/gitweb/theme/gitweb.css
new file mode 100644
index 0000000..83e0742
--- /dev/null
+++ b/flakes/mypackages/overlays/gitweb/theme/gitweb.css
@@ -0,0 +1,783 @@
1/* Reset
2------------------------------------------------------------------------- */
3
4/* Based on http://meyerweb.com/eric/tools/css/reset/ */
5/* v1.0 | 20080212 */
6
7html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p,
8blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em,
9font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b,
10u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table,
11caption, tbody, tfoot, thead, tr, th, td {
12 margin: 0;
13 padding: 0;
14 border: 0;
15 outline: 0;
16 font-size: 100%;
17 vertical-align: baseline;
18 background: transparent;
19}
20
21ol, ul { list-style: none; }
22
23blockquote, q { quotes: none; }
24
25blockquote:before, blockquote:after,
26q:before, q:after {
27 content: '';
28 content: none;
29}
30
31:focus { outline: 0; }
32
33ins { text-decoration: none; }
34
35del { text-decoration: line-through; }
36
37table {
38 border-collapse: collapse;
39 border-spacing: 0;
40}
41
42a { outline: none; }
43
44/* General
45---------------------------------------------------------------------------- */
46
47html {
48 position: relative;
49 min-height: 100%;
50}
51
52body {
53 font: 13px Helvetica,arial,freesans,clean,sans-serif;
54 line-height: 1.4;
55 margin: 0 0 105px;
56 background-color: #fff;
57 color: #000000;
58}
59
60/* Monospaced Fonts */
61.sha1, .mode, .diff_tree .list, .pre, .diff, .patchset {
62 font-family: 'Consolas','Bitstream Vera Sans Mono',monospace;
63}
64
65a:link, a:visited {
66 color: #4183C4;
67 text-decoration: none;
68}
69
70a:hover {
71 text-decoration: underline;
72}
73
74td.list a[href*='tree'], td.list a[href*='blob'] {
75 padding-left: 20px;
76 display: block;
77 float: left;
78 height: 16px;
79 line-height: 16px;
80}
81
82td.list a[href*='tree'] {
83 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;
84}
85
86td.list a[href*='blob'] {
87 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQoFQXBMW5TQRgGwNnHnoE0QbiCjoIooUmTU3AuS1BwIoTSUdJBigg3GCWOg9/++zHTop078wIAsPMrE4SL5/1aIyMjIyMjz/m0tbFECFdrPeaQQw75mz/5nZH7fN7aWILmauSYfznmmIfss8vIUx7zZWsTTXM5vpWvTk5Wq9VHQP/gtgOLa0Qpw940vAQdaG6thpOhlOkG0AEuAVGmEkAH+G4YSikxXQM6wDsAMRFAB/ihDNNUmN4DOsAbBAEAdICfpmmaAt4COoj2GgCASbIkZh1NAACznhQt2itnFgAAlF3u/gMDtJXPzQxoswAAAABJRU5ErkJgggo=) center left no-repeat;
88}
89
90i {
91 font-style: normal;
92}
93
94td, th {
95 padding: 5px;
96}
97
98.page_nav br {
99 display: none;
100}
101
102/* Page Header
103---------------------------------------------------------------------------- */
104
105.page_header {
106 height: 50px;
107 line-height: 50px;
108 position: relative;
109 padding: 0 27px;
110 margin-bottom: 20px;
111 font-size: 20px;
112 font-family: Helvetica, Arial, Freesans, Clean, sans-serif;
113 background: #FFFFFF; /* old browsers */
114 background: -moz-linear-gradient(top, #FFFFFF 0%, #F5F5F5 100%); /* firefox */
115 background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#F5F5F5)); /* webkit */
116 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#F5F5F5',GradientType=0 ); /* ie */
117 background: -o-linear-gradient(top, #FFFFFF 0%, #F5F5F5 100%);
118 border-bottom: 1px solid #dfdfdf;
119}
120
121.page_header a:link, .page_header a:visited {
122 color: #4183C4;
123 text-decoration: none;
124 padding: 3px;
125 font-weight: bold;
126}
127
128.page_header a:hover {
129 font-weight: bold;
130 padding: 3px;
131 text-decoration: underline;
132}
133
134.page_header a:first-child {
135 background: transparent;
136}
137
138.page_header img.logo {
139 position: relative;
140 top: 7px;
141 margin-right: 5px;
142}
143
144/* Page Footer
145---------------------------------------------------------------------------- */
146
147.page_footer {
148 position: absolute;
149 left: 0;
150 bottom: 0;
151 width: 100%;
152 height: 80px;
153 line-height: 80px;
154 margin-top: 15px;
155 background: #f1f1f1;
156 border-top: 2px solid #ddd;
157 border-bottom: 1px solid #ddd;
158}
159
160.page_footer_text {
161 color: #666;
162 display: inline;
163 float: left;
164 margin-left: 25px;
165 width: 80%;
166 overflow: hidden;
167 white-space: nowrap;
168 text-overflow: ellipsis;
169}
170
171a.rss_logo {
172 float: right;
173 padding: 3px 1px;
174 width: 35px;
175 line-height: 10px;
176 border: 1px solid;
177 border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e;
178 color: #ffffff;
179 background-color: #ff6600;
180 font-weight: bold;
181 font-family: sans-serif;
182 font-size: 80%;
183 text-align: center;
184 text-decoration: none;
185 margin-top: 30px;
186 margin-left: 5px;
187}
188
189a.rss_logo:hover {
190 background-color: #ee5500;
191}
192
193.rss_logo {
194 margin-right: 25px;
195 background: yellow;
196}
197
198.rss_logo:last-child {
199 margin-right: 5px;
200}
201
202/* Index include
203---------------------------------------------------------------------------- */
204
205.index_include {
206 width: 95%;
207 margin: 0 auto 15px;
208 background: -moz-linear-gradient(center top , #FFFFFF 0%, #F5F5F5 100%) repeat scroll 0 0 transparent;
209 border: 1px solid #DFDFDF;
210 padding: 8px;
211 -webkit-box-sizing: border-box;
212 -moz-box-sizing: border-box;
213 box-sizing: border-box;
214}
215
216/* Elements
217---------------------------------------------------------------------------- */
218
219.project_list,
220.shortlog,
221.tree,
222.commit_search,
223.history {
224 width: 95%;
225 margin: 0 auto 15px auto;
226 border: 1px solid #d8d8d8;
227 -moz-box-shadow: 0 0 3px rgba(0,0,0,0.2);
228 -webkit-box-shadow: 0 0 3px rgba(0,0,0,0.2);
229 box-shadow: 0 0 3px rgba(0,0,0,0.2);
230}
231
232.project_list th,
233.shortlog th,
234.tree th,
235.commit_search th {
236 color: #afafaf;
237 font-weight: normal;
238}
239
240.project_list th {
241 font-weight: bold;
242}
243
244.project_list tr,
245.shortlog tr,
246.tree tr,
247.commit_search tr {
248 background: #eaeaea;
249 height: 2.5em;
250 text-align: left;
251 color: #545454;
252}
253
254.project_list tr.dark, .project_list tr.light,
255.shortlog tr.dark, .shortlog tr.light,
256.tree tr.dark, .tree tr.light,
257.commit_search tr.dark, .commit_search tr.light,
258.history tr.dark, .history tr.light,
259.heads tr.dark, .heads tr.light {
260 background: #F9F9F9; /* old browsers */
261 background: -moz-linear-gradient(top, #F9F9F9 0%, #EFEFEF 100%); /* firefox */
262 background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F9F9F9), color-stop(100%,#EFEFEF)); /* webkit */
263 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F9F9F9', endColorstr='#EFEFEF',GradientType=0 ); /* ie */
264 background: -o-linear-gradient(top, #F9F9F9 0%, #EFEFEF 100%);
265 height: 2.5em;
266 border-bottom: 1px solid #e1e1e1;
267}
268
269th .header {
270 background: transparent;
271 border: 0;
272 padding: 0;
273 font-weight: bold;
274}
275
276.tree {
277 width: 100%;
278 margin: 0;
279}
280
281.projsearch {
282 position: absolute;
283 right: 4%;
284 top: 15px;
285}
286
287.projsearch a {
288 display: none;
289}
290
291.commit_search {
292 background: #eaeaea;
293}
294
295.page_nav,
296.list_head,
297.page_path,
298.search {
299 width: 94%;
300 background: #eaeaea;
301 color: #545454;
302 border: 1px solid #d8d8d8;
303 padding: 5px;
304 margin: 0 auto 15px auto;
305}
306
307.history {
308 background: #eaeaea;
309}
310
311.title {
312 margin: 0 auto 15px auto;
313 padding: 5px;
314 width: 95%;
315}
316
317.readme {
318 background: #eaf2f5;
319 border: 1px solid #bedce7;
320 -moz-box-sizing: border-box;
321 -webkit-box-sizing: border-box;
322 box-sizing: border-box;
323 margin: 0 auto 15px auto;
324 padding: 15px;
325 width: 95%;
326}
327
328.readme h1 {
329 display: block;
330 font-size: 2em;
331 font-weight: bold;
332 margin-bottom: 0.67em;
333 margin-top: 0;
334}
335
336.readme h2 {
337 font-size: 1.5em;
338 font-weight: bold;
339 margin-bottom: 0.83em;
340}
341
342
343.readme h3 {
344 font-size: 1.17em;
345 font-weight: bold;
346 margin-bottom: 1em;
347}
348
349.readme p {
350 margin-bottom: 1em;
351}
352
353.readme ul {
354 list-style: disc;
355 margin-bottom: 1em;
356 margin-left: 1.5em;
357}
358
359.readme ul ul {
360 margin-bottom: 0;
361}
362
363.readme ol {
364 list-style: decimal;
365 margin-bottom: 1em;
366 margin-left: 1.5em;
367}
368
369.readme ol ol {
370 margin-bottom: 0;
371}
372
373.readme pre {
374 font-family: monospace;
375 margin: 1em 0;
376 white-space: pre;
377}
378
379.readme tt, .readme code, .readme kbd, .readme samp {
380 font-family: monospace;
381}
382
383.readme blockquote {
384 margin: 1em;
385}
386
387.projects_list,
388.tags {
389 width: 95%;
390 background: #f0f0f0;
391 color: #545454;
392 border: 1px solid #d8d8d8;
393 padding: 5px;
394 margin: 0 auto 15px auto;
395}
396
397.heads {
398 width: 95%;
399 color: #545454;
400 border: 1px solid #d8d8d8;
401 padding: 5px;
402 margin: 0 auto 15px auto;
403}
404
405.header {
406 width: 94%;
407 margin: 0 auto 15px auto;
408 background: #eaf2f5;
409 border: 1px solid #bedce7;
410 padding: 5px;
411}
412
413.header .age {
414 float: left;
415 color: #000;
416 font-weight: bold;
417 width: 10em;
418}
419
420.title_text {
421 width: 94%;
422 background: #eaf2f5;
423 border: 1px solid #bedce7;
424 padding: 5px;
425 margin: 0 auto 0 auto;
426}
427
428.log_body {
429 width: 94%;
430 background: #eaf2f5;
431 border: 1px solid #bedce7;
432 border-top: 0;
433 padding: 5px;
434 margin: 0 auto 15px auto;
435}
436
437.page_body {
438 line-height: 1.4em;
439 width: 94%;
440 background: #f8f8f8;
441 border: 1px solid #d8d8d8;
442 padding: 5px;
443 margin: 15px auto 15px auto;
444}
445
446.diff_tree {
447 width: 95%;
448 background: #f0f0f0;
449 border: 1px solid #d8d8d8;
450 padding: 5px;
451 margin: 0 auto 15px auto;
452}
453
454.page_body > .list_head {
455 width: 98.5%;
456}
457
458.page_body > .diff_tree {
459 width: 99.5%;
460}
461
462.patch > .header {
463 width: 99%;
464}
465
466.author .avatar,
467.author_date .avatar {
468 position: relative;
469 top: 3px;
470}
471
472.object_header .avatar {
473 border: 1px solid #D8D8D8;
474 float: right;
475}
476
477.object_header td,
478.object_header th {
479 vertical-align: top;
480}
481
482/* Refs
483---------------------------------------------------------------------------- */
484
485span.refs span {
486 color: #707070;
487 display: inline-block;
488 margin: 0;
489 background-color: #eee;
490 border: 1px solid #ccc;
491 border-radius: 3px;
492 height: 18px;
493 padding: 0 6px;
494 text-overflow: ellipsis;
495}
496
497span.refs span.ref {
498 color: #707070;
499 display: inline-block;
500 margin: 0;
501 background-color: #c4c4ff;
502 border: 1px solid #7878ff;
503 border-radius: 3px;
504 height: 18px;
505 padding: 0 6px;
506 text-overflow: ellipsis;
507 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=);
508 background-repeat: no-repeat;
509 padding-left: 18px;
510}
511
512span.refs span.tag {
513 color: #707070;
514 display: inline-block;
515 margin: 0;
516 background-color: #ffffab;
517 border: 1px solid #d9d93b;
518 border-radius: 3px;
519 height: 18px;
520 padding: 0 6px;
521 text-overflow: ellipsis;
522 background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUZZ+h9RwAAAGZQTFRFAAAAtrYkwMBAwMBAx8c4yso11NQ71NQ51dU52Ng71tY519c719c719c62Ng719c719c62Ng72dk62Ng62Ng72Ng72dk62Ng72Ng62dk62dk72dk62Ng62dk72Ng72Ng72dk7////ou/AnQAAACB0Uk5TAAYHCxESLjRCWWlqa4uNkpissbrO19jc3ufs8vf6/f7atAU2AAAAAWJLR0QhxGwNFgAAAF1JREFUGFeNy0cOgCAABVGw94rY5d//lC7omhhn+ZIh5Gf1xPk0Zi5dAABROIQjSU/fsAXhDkCUljAv8jW2wlQpaixpo4Nj+dtatVpjkSJjLNaizRVpvhBCu/4h391jzw1lU12Z7wAAAABJRU5ErkJggg==);
523 background-repeat: no-repeat;
524 padding-left: 18px;
525}
526
527span.refs span.head {
528 color: #707070;
529 display: inline-block;
530 margin: 0;
531 background-color: #c4ffc4;
532 border: 1px solid #78ff78;
533 border-radius: 3px;
534 height: 18px;
535 padding: 0 6px;
536 text-overflow: ellipsis;
537 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==);
538 background-repeat: no-repeat;
539 padding-left: 18px;
540}
541
542span.refs a {
543 color: #4e4e4e;
544 font: 11px "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, monospace;
545 line-height: 18px;
546}
547
548/* Diffs
549---------------------------------------------------------------------------- */
550
551div.diff.to_file a.path,
552div.diff.to_file {
553 color: #007000;
554}
555
556div.diff.from_file a.path,
557div.diff.from_file {
558 color: #aa0000;
559}
560
561.patch .header {
562 margin: 0;
563}
564
565.patchset {
566 overflow-x: auto;
567 overflow-y: hidden;
568}
569
570.chunk_header {
571 background: #eaf2f5;
572 color: #999;
573}
574
575.rem {
576 background: #ffdddd;
577}
578.rem .marked {
579 background: #ffaaaa;
580}
581.add {
582 background: #ddffdd;
583}
584.add .marked {
585 background: #7dff7d;
586}
587
588.extended_header {
589 width: 99.5%;
590}
591
592div.chunk_block {
593 overflow: hidden;
594}
595
596div.chunk_block div.old {
597 float: left;
598 width: 50%;
599 overflow: hidden;
600 border-right: 5px solid #EAF2F5;
601}
602
603div.chunk_block.rem,
604div.chunk_block.add {
605 background: transparent;
606}
607
608div.chunk_block div.old .add,
609div.chunk_block div.old .rem {
610 padding-right: 3px;
611}
612
613div.chunk_block div.new .add,
614div.chunk_block div.new .rem {
615 padding-left: 3px;
616}
617
618div.chunk_block div.new {
619 margin-left: 50%;
620 width: 50%;
621 border-left: 5px solid #EAF2F5;
622}
623
624/* Category
625---------------------------------------------------------------------------- */
626
627td.category {
628 background: #E6F1F6; /* old browsers */
629 background: -moz-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); /* firefox */
630 background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#C8D8E7), color-stop(100%,#E6F1F3)); /* webkit */
631 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C8D8E7', endColorstr='#E6F1F3',GradientType=0 ); /* ie */
632 background: -o-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%);
633 font-weight: bold;
634 border-bottom: 1px solid #D1D1D1;
635 border-top: 1px solid #D1D1D1;
636}
637
638/* Age
639---------------------------------------------------------------------------- */
640
641/* noage: "No commits" */
642.project_list td.noage {
643 color: #cdcdcd;
644}
645
646/* age2: 60*60*24*2 <= age */
647.project_list td.age2, .blame td.age2 {
648 color: #545454;
649}
650
651/* age1: 60*60*2 <= age < 60*60*24*2 */
652.project_list td.age1 {
653 color: #009900;
654}
655
656/* age0: age < 60*60*2 */
657.project_list td.age0 {
658 color: #009900;
659 font-weight: bold;
660}
661
662/* File status
663---------------------------------------------------------------------------- */
664
665.diff_tree span.file_status.new {
666 color: #008000;
667}
668
669table.diff_tree span.file_status.deleted {
670 color: #c00000;
671}
672
673table.diff_tree span.file_status.moved,
674table.diff_tree span.file_status.mode_chnge {
675 color: #545454;
676}
677
678table.diff_tree span.file_status.copied {
679 color: #70a070;
680}
681
682span.cntrl {
683 border: dashed #aaaaaa;
684 border-width: 1px;
685 padding: 0px 2px 0px 2px;
686 margin: 0px 2px 0px 2px;
687}
688
689span.match {
690 background: #aaffaa;
691 color: #000;
692}
693
694td.error {
695 color: red;
696 background: yellow;
697}
698
699/* blob view */
700
701td.pre, div.pre, div.diff {
702 white-space: pre-wrap;
703}
704
705/* JavaScript-based timezone manipulation */
706
707.popup { /* timezone selection UI */
708 position: absolute;
709 /* "top: 0; right: 0;" would be better, if not for bugs in browsers */
710 top: 0; left: 0;
711 border: 1px solid #d8d8d8;
712 padding: 2px;
713 background-color: #f0f0f0;
714 font-style: normal;
715 color: #545454;
716 cursor: auto;
717}
718
719.close-button { /* close timezone selection UI without selecting */
720 /* float doesn't work within absolutely positioned container,
721 * if width of container is not set explicitly */
722 /* float: right; */
723 position: absolute;
724 top: 0px; right: 0px;
725 border: 1px solid #ffaaaa;
726 margin: 1px 1px 1px 1px;
727 padding-bottom: 2px;
728 width: 12px;
729 height: 10px;
730 font-size: 9px;
731 font-weight: bold;
732 text-align: center;
733 background-color: #ffdddd;
734 cursor: pointer;
735}
736
737/* Style definition generated by highlight 2.4.5, http://www.andre-simon.de/ */
738
739/* Highlighting theme definition: */
740
741.num { color:#6ecf36; }
742.esc { color:#ff00ff; }
743.str { color:#ff00d3; background-color: #edc9ec }
744.dstr { color:#818100; }
745.slc { color:#838183; font-style:italic; }
746.com { color:#838183; font-style:italic; }
747.dir { color:#008200; }
748.sym { color:#000000; }
749.line { color:#555555; }
750.kwa { color:#666666; font-weight:bold; }
751.kwb { color:#6b3099; }
752.kwc { color:#d4663d; }
753.kwd { color:#2928ff; }
754
755/**** Styles supplémentaires *****/
756
757.readme div.toc {
758 float: right;
759 border: 1px solid black;
760 background-color: white;
761}
762.readme div.toc span.toctitle {
763 display: inline-block;
764 width: 100%;
765 text-align: center;
766 font-weight: bold;
767}
768
769.readme table {
770 background-color: white;
771}
772
773.readme table thead tr {
774 background-color: #ccc;
775}
776
777.readme table tbody tr:nth-child(2n) {
778 background-color: #f8f8f8;
779}
780
781.readme table td, .readme table th {
782 border: 1px solid black;
783}
diff --git a/flakes/mypackages/overlays/gitweb/theme/gitweb.js b/flakes/mypackages/overlays/gitweb/theme/gitweb.js
new file mode 100644
index 0000000..72f3cfa
--- /dev/null
+++ b/flakes/mypackages/overlays/gitweb/theme/gitweb.js
@@ -0,0 +1,27 @@
1function include(filename, onload) {
2 var head = document.getElementsByTagName('head')[0];
3 var script = document.createElement('script');
4 script.src = filename;
5 script.type = 'text/javascript';
6 script.onload = script.onreadystatechange = function() {
7 if (script.readyState) {
8 if (script.readyState === 'complete' || script.readyState === 'loaded') {
9 script.onreadystatechange = null;
10 onload();
11 }
12 }
13 else {
14 onload();
15 }
16 }
17 head.appendChild(script);
18}
19
20include('static/gitweb.js', function() {});
21include('//code.jquery.com/jquery-3.1.0.min.js', function() {
22 $("div.title").each(function(index, element) {
23 if ($(element).text() === "readme" || $(element).text() === " ") {
24 $(element).hide();
25 }
26 });
27});
diff --git a/flakes/mypackages/overlays/goaccess/default.nix b/flakes/mypackages/overlays/goaccess/default.nix
new file mode 100644
index 0000000..6b9758b
--- /dev/null
+++ b/flakes/mypackages/overlays/goaccess/default.nix
@@ -0,0 +1,13 @@
1self: super: {
2 goaccess = super.goaccess.overrideAttrs(old: rec {
3 name = "goaccess-${version}";
4 version = "1.4";
5 src = self.fetchurl {
6 url = "https://tar.goaccess.io/${name}.tar.gz";
7 sha256 = "1gkpjg39f3afdwm9128jqjsfap07p8s027czzlnxfmi5hpzvkyz8";
8 };
9 configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ];
10 buildInputs = old.buildInputs ++ [ self.tokyocabinet self.bzip2 ];
11 });
12
13}
diff --git a/flakes/mypackages/overlays/kanboard/default.nix b/flakes/mypackages/overlays/kanboard/default.nix
new file mode 100644
index 0000000..2a0d41b
--- /dev/null
+++ b/flakes/mypackages/overlays/kanboard/default.nix
@@ -0,0 +1,19 @@
1self: super: {
2 kanboard = self.stdenv.mkDerivation rec {
3 name = "kanboard-${version}";
4 version = "1.2.21";
5 src = self.fetchFromGitHub {
6 owner = "kanboard";
7 repo = "kanboard";
8 rev = "ee18479b7e019e6415d7b095da629932ee1b3fd5";
9 sha256 = "00pnpq5qgxpb2f9la58ycvx5kx3pmcvpssh6lwgpcdk04yciw8nh";
10 };
11
12 dontBuild = true;
13
14 installPhase = ''
15 cp -a . $out
16 mv $out/data $out/dataold
17 '';
18 };
19}
diff --git a/flakes/mypackages/overlays/morph/default.nix b/flakes/mypackages/overlays/morph/default.nix
new file mode 100644
index 0000000..b316d70
--- /dev/null
+++ b/flakes/mypackages/overlays/morph/default.nix
@@ -0,0 +1,27 @@
1self: super: {
2 morph = super.morph.overrideAttrs(old: rec {
3 version = "1.6.0-30-g5b85237";
4 src = self.fetchFromGitHub {
5 owner = "dbcdk";
6 repo = "morph";
7 rev = "5b852370d8054a895b5ba79b5ef017c3afbb3a3c";
8 sha256 = "166dwibbpb90bdy8dvhlinh6gc509f8pq8wn345h01pilf7fc8fh";
9 };
10
11 ldflags = [
12 "-X main.version=${version}"
13 ];
14 preBuild = ''
15 ldflags+=" -X main.assetRoot=$lib"
16 '';
17 postInstall = ''
18 mkdir -p $lib
19 cp -v ./data/*.nix $lib
20 '';
21
22 outputs = [ "out" "lib" ];
23 vendorSha256 = "08zzp0h4c4i5hk4whz06a3da7qjms6lr36596vxz0d8q0n7rspr9";
24
25 patches = (old.patches or []) ++ [ ./dry-run.patch ];
26 });
27}
diff --git a/flakes/mypackages/overlays/morph/dry-run.patch b/flakes/mypackages/overlays/morph/dry-run.patch
new file mode 100644
index 0000000..2ff099e
--- /dev/null
+++ b/flakes/mypackages/overlays/morph/dry-run.patch
@@ -0,0 +1,59 @@
1diff --git a/morph.go b/morph.go
2index a88414b..e5894df 100644
3--- a/morph.go
4+++ b/morph.go
5@@ -542,6 +542,7 @@ func getNixContext() *nix.NixContext {
6 return &nix.NixContext{
7 EvalMachines: filepath.Join(assetRoot, assets.Friendly, "eval-machines.nix"),
8 ShowTrace: showTrace,
9+ DryRun: *dryRun,
10 KeepGCRoot: *keepGCRoot,
11 AllowBuildShell: *allowBuildShell,
12 }
13@@ -574,8 +575,10 @@ func buildHosts(hosts []nix.Host) (resultPath string, err error) {
14 return
15 }
16
17- fmt.Fprintln(os.Stderr, "nix result path: ")
18- fmt.Println(resultPath)
19+ if resultPath != "" {
20+ fmt.Fprintln(os.Stderr, "nix result path: ")
21+ fmt.Println(resultPath)
22+ }
23 return
24 }
25
26diff --git a/nix/nix.go b/nix/nix.go
27index 6a9cfd5..0f7884b 100644
28--- a/nix/nix.go
29+++ b/nix/nix.go
30@@ -49,6 +49,7 @@ type Deployment struct {
31 type NixContext struct {
32 EvalMachines string
33 ShowTrace bool
34+ DryRun bool
35 KeepGCRoot bool
36 AllowBuildShell bool
37 }
38@@ -269,6 +270,10 @@ func (ctx *NixContext) BuildMachines(deploymentPath string, hosts []Host, nixArg
39 args = append(args, "--show-trace")
40 }
41
42+ if ctx.DryRun {
43+ args = append(args, "--dry-run")
44+ }
45+
46 if nixBuildTargets != "" {
47 args = append(args,
48 "--arg", "buildTargets", nixBuildTargets)
49@@ -308,6 +313,10 @@ func (ctx *NixContext) BuildMachines(deploymentPath string, hosts []Host, nixArg
50 return resultPath, errors.New(errorMessage)
51 }
52
53+ if ctx.DryRun {
54+ return "", err
55+ }
56+
57 resultPath, err = os.Readlink(resultLinkPath)
58 if err != nil {
59 return "", err
diff --git a/flakes/mypackages/overlays/morph/verbose_nix.patch b/flakes/mypackages/overlays/morph/verbose_nix.patch
new file mode 100644
index 0000000..389a79c
--- /dev/null
+++ b/flakes/mypackages/overlays/morph/verbose_nix.patch
@@ -0,0 +1,12 @@
1diff --git a/nix/nix.go b/nix/nix.go
2index bb63870..7fe04aa 100644
3--- a/nix/nix.go
4+++ b/nix/nix.go
5@@ -347,6 +347,7 @@ func Push(ctx *ssh.SSHContext, host Host, paths ...string) (err error) {
6 options := mkOptions(host)
7 for _, path := range paths {
8 args := []string{
9+ "-v",
10 "copy",
11 path,
12 "--to", "ssh://" + userArg + host.TargetHost + keyArg,
diff --git a/flakes/mypackages/overlays/php-packages/mysqli_patch.patch b/flakes/mypackages/overlays/php-packages/mysqli_patch.patch
new file mode 100644
index 0000000..a8f03e3
--- /dev/null
+++ b/flakes/mypackages/overlays/php-packages/mysqli_patch.patch
@@ -0,0 +1,11 @@
1--- a/ext/mysqli/mysqli_nonapi.c
2+++ b/ext/mysqli/mysqli_nonapi.c
3@@ -263,7 +263,7 @@ void mysqli_common_connect(INTERNAL_FUNC
4 php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql));
5
6 #if !defined(MYSQLI_USE_MYSQLND)
7- mysql->mysql->reconnect = MyG(reconnect);
8+ mysql_options(mysql->mysql, MYSQL_OPT_RECONNECT, (my_bool *)&MyG(reconnect));
9 #endif
10
11 mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&MyG(allow_local_infile));
diff --git a/flakes/mypackages/overlays/postfix/default.nix b/flakes/mypackages/overlays/postfix/default.nix
new file mode 100644
index 0000000..c77e4cf
--- /dev/null
+++ b/flakes/mypackages/overlays/postfix/default.nix
@@ -0,0 +1,3 @@
1self: super: {
2 postfix = super.postfix.override { withMySQL = true; withPgSQL = true; };
3}
diff --git a/flakes/mypackages/overlays/taskwarrior/TW-1778_patch.diff b/flakes/mypackages/overlays/taskwarrior/TW-1778_patch.diff
new file mode 100644
index 0000000..6d7e376
--- /dev/null
+++ b/flakes/mypackages/overlays/taskwarrior/TW-1778_patch.diff
@@ -0,0 +1,12 @@
1--- a/src/text.cpp 2016-02-24 23:18:11.000000000 +0100
2+++ b/src/text.cpp 2020-02-26 18:53:15.869331031 +0100
3@@ -248,7 +248,7 @@
4 // Premature EOL.
5 if (character == '\n')
6 {
7- line = text.substr (offset, line_length);
8+ line = text.substr (offset, prior_cursor-offset);
9 offset = cursor;
10 return true;
11 }
12
diff --git a/flakes/mypackages/overlays/taskwarrior/default.nix b/flakes/mypackages/overlays/taskwarrior/default.nix
new file mode 100644
index 0000000..9ca52b8
--- /dev/null
+++ b/flakes/mypackages/overlays/taskwarrior/default.nix
@@ -0,0 +1,16 @@
1self: super:
2{
3 taskwarrior = super.taskwarrior.overrideAttrs (old: {
4 patches = old.patches or [] ++ [
5 ./TW-1778_patch.diff
6 ];
7 postInstall = ''${old.postInstall}
8 mkdir -p "$out/share/vim/vimfiles/ftdetect"
9 mkdir -p "$out/share/vim/vimfiles/syntax"
10 ln -s "../../../../share/doc/task/scripts/vim/ftdetect/task.vim" "$out/share/vim/vimfiles/ftdetect/"
11 ln -s "../../../../share/doc/task/scripts/vim/syntax/taskrc.vim" "$out/share/vim/vimfiles/syntax/"
12 ln -s "../../../../share/doc/task/scripts/vim/syntax/taskdata.vim" "$out/share/vim/vimfiles/syntax/"
13 ln -s "../../../../share/doc/task/scripts/vim/syntax/taskedit.vim" "$out/share/vim/vimfiles/syntax/"
14 '';
15 });
16}
diff --git a/flakes/mypackages/overlays/ympd/default.nix b/flakes/mypackages/overlays/ympd/default.nix
new file mode 100644
index 0000000..648403f
--- /dev/null
+++ b/flakes/mypackages/overlays/ympd/default.nix
@@ -0,0 +1,14 @@
1self: super: {
2 ympd = super.ympd.overrideAttrs(old: {
3 pname = "ympd";
4 version = "612f8fc-master";
5 src = self.fetchFromGitHub {
6 owner = "notandy";
7 repo = "ympd";
8 rev = "612f8fc0b2c47fc89d403e4a044541c6b2b238c8";
9 sha256 = "01hnj10zl103mrn82vyd42fvq7w5az3jf1qz18889zv67kn73ll9";
10 fetchSubmodules = true;
11 };
12 patches = (old.patches or []) ++ [ ./ympd-password-env.patch ];
13 });
14}
diff --git a/flakes/mypackages/overlays/ympd/ympd-password-env.patch b/flakes/mypackages/overlays/ympd/ympd-password-env.patch
new file mode 100644
index 0000000..2bbe188
--- /dev/null
+++ b/flakes/mypackages/overlays/ympd/ympd-password-env.patch
@@ -0,0 +1,23 @@
1diff --git a/src/ympd.c b/src/ympd.c
2index 3aed7e6..b3b6fda 100644
3--- a/src/ympd.c
4+++ b/src/ympd.c
5@@ -71,6 +71,7 @@ int main(int argc, char **argv)
6 char *run_as_user = NULL;
7 char const *error_msg = NULL;
8 char *webport = "8080";
9+ const char *s;
10
11 atexit(bye);
12 #ifdef WITH_DYNAMIC_ASSETS
13@@ -92,6 +93,10 @@ int main(int argc, char **argv)
14 {0, 0, 0, 0 }
15 };
16
17+ if ((s = getenv("MPD_PASSWORD")) != NULL) {
18+ mpd.password = strdup(s);
19+ }
20+
21 while((n = getopt_long(argc, argv, "h:p:w:u:vm:",
22 long_options, &option_index)) != -1) {
23 switch (n) {
diff --git a/flakes/mypackages/pkgs/bash-libs/default.nix b/flakes/mypackages/pkgs/bash-libs/default.nix
new file mode 100644
index 0000000..991c9d2
--- /dev/null
+++ b/flakes/mypackages/pkgs/bash-libs/default.nix
@@ -0,0 +1,33 @@
1{ lib, stdenv, fetchFromGitHub, makeWrapper, shellcheck, bashInteractive, coreutils, gnugrep, gawk, file, aspell, util-linux, gnused }:
2stdenv.mkDerivation {
3 pname = "bash-libs";
4 version = "master";
5 src = fetchFromGitHub {
6 owner = "foopgp";
7 repo = "bash-libs";
8 rev = "4bf7fe3a488f55beecc74b76e0daf24244bd824f";
9 sha256 = "sha256-8AHUXPd1dQpo1Ce9MT4++eFhJT3X8SYtgaIKbPFUYjM=";
10 };
11
12 buildInputs = [ shellcheck makeWrapper bashInteractive ];
13 phases = [ "checkPhase" "installPhase" ];
14 checkPhase = ''
15 shellcheck bin/*
16 '';
17 installPhase =
18 let binPath = lib.makeBinPath [
19 coreutils file aspell util-linux gnused gnugrep gawk
20 ];
21 in ''
22 mkdir -p $out/bin $out/nix-support $out/share/doc/bash-libs $out/share/bash-libs/include
23
24 for i in $src/bin/*; do
25 name=$(basename $i)
26 cp "$i" $out/share/bash-libs/include
27 patchShebangs $out/share/bash-libs/include/$name
28 makeWrapper $out/share/bash-libs/include/$name $out/bin/$name --set PATH ${binPath}
29 done
30 echo "${binPath}" > $out/nix-support/propagated-build-inputs
31 cp $src/man/* $out/share/doc/bash-libs
32 '';
33}
diff --git a/flakes/mypackages/pkgs/boinctui/default.nix b/flakes/mypackages/pkgs/boinctui/default.nix
new file mode 100644
index 0000000..565840c
--- /dev/null
+++ b/flakes/mypackages/pkgs/boinctui/default.nix
@@ -0,0 +1,21 @@
1{ stdenv, fetchurl, expat, openssl, autoconf269, ncurses }:
2stdenv.mkDerivation rec {
3 name = "boinctui-${version}";
4 version = "2.6.0";
5 src = fetchurl {
6 url = "http://sourceforge.net/projects/boinctui/files/boinctui_${version}.tar.gz";
7 sha256 = "1c6hc4x28z8hjncxcwxhb0r3980f72i6480569a0hd9y7vcgf3d0";
8 };
9
10 configureFlags = [ "--without-gnutls" ];
11 preConfigure = ''
12 autoconf
13 '';
14
15 makeFlags = [ "DESTDIR=$(out)" ];
16 preBuild = ''
17 sed -i -e 's/"HOME"/"XDG_CONFIG_HOME"/' src/cfg.cpp
18 sed -i -e 's@\.boinctui\.cfg@boinctui/boinctui.cfg@' src/mainprog.cpp
19 '';
20 buildInputs = [ expat openssl autoconf269 ncurses ];
21}
diff --git a/flakes/mypackages/pkgs/cnagios/default.nix b/flakes/mypackages/pkgs/cnagios/default.nix
new file mode 100644
index 0000000..2b8b0da
--- /dev/null
+++ b/flakes/mypackages/pkgs/cnagios/default.nix
@@ -0,0 +1,32 @@
1{ stdenv, fetchFromGitHub, perl, ncurses }:
2stdenv.mkDerivation (rec {
3 version = "3bd27fb-master";
4 pname = "cnagios";
5 name = "${pname}-${version}";
6 src = fetchFromGitHub {
7 owner = "dannywarren";
8 repo = "cnagios";
9 rev = "3bd27fb40e68f61ffd01bea6234b919a667b6fe4";
10 sha256 = "0iy5pmlcz6y3if72nav22xqxniiv1v8ywi0927m6s459hkw5n2rb";
11 fetchSubmodules = true;
12 };
13 configureFlags = [
14 "--with-etc-dir=/etc/cnagios"
15 "--with-var-dir=/var/lib/naemon"
16 "--with-status-file=/var/lib/naemon/status.dat"
17 "--with-nagios-data=4"
18 ];
19
20 prePatch = ''
21 sed -i -e "s/-lcurses/-lncurses/" Makefile.in
22 '';
23 installPhase = ''
24 install -dm755 $out/share/doc/cnagios
25 install -Dm644 cnagiosrc $out/share/doc/cnagios/
26 install -Dm644 cnagios.help $out/share/doc/cnagios/
27 install -Dm644 cnagios.pl $out/share/doc/cnagios/
28 install -dm755 $out/bin
29 install -Dm755 cnagios $out/bin/
30 '';
31 buildInputs = [ perl ncurses ];
32})
diff --git a/flakes/mypackages/pkgs/commento/default.nix b/flakes/mypackages/pkgs/commento/default.nix
new file mode 100644
index 0000000..6361583
--- /dev/null
+++ b/flakes/mypackages/pkgs/commento/default.nix
@@ -0,0 +1,20 @@
1{ stdenv, fetchurl, patchelfUnstable, autoPatchelfHook }:
2stdenv.mkDerivation rec {
3 pname = "commento";
4 version = "v1.8.0";
5 name = "${pname}-${version}";
6 src = fetchurl {
7 url = "https://dl.commento.io/release/${name}-linux-glibc-amd64.tar.gz";
8 sha256 = "1j88b16hdx3i8nsq56581cscij65slgbsa6yfj73ybbg1585axxs";
9 };
10 phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
11 unpackPhase = ''
12 tar --one-top-level=${name} -xf "$src"
13 '';
14 installPhase = ''
15 cp -a ${name} $out
16 '';
17 postFixup = ''
18 ${patchelfUnstable}/bin/patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/commento
19 '';
20}
diff --git a/flakes/mypackages/pkgs/composer-env/default.nix b/flakes/mypackages/pkgs/composer-env/default.nix
new file mode 100644
index 0000000..772ed73
--- /dev/null
+++ b/flakes/mypackages/pkgs/composer-env/default.nix
@@ -0,0 +1,243 @@
1# This file originates from composer2nix
2
3{ stdenv, lib, writeTextFile, fetchurl, php, unzip, composer ? php.packages.composer }:
4
5let
6 buildZipPackage = { name, src }:
7 stdenv.mkDerivation {
8 inherit name src;
9 buildInputs = [ unzip ];
10 buildCommand = ''
11 unzip $src
12 baseDir=$(find . -type d -mindepth 1 -maxdepth 1)
13 cd $baseDir
14 mkdir -p $out
15 mv * $out
16 '';
17 };
18
19 buildPackage =
20 { name
21 , src
22 , packages ? {}
23 , devPackages ? {}
24 , buildInputs ? []
25 , symlinkDependencies ? false
26 , executable ? false
27 , removeComposerArtifacts ? false
28 , postInstall ? ""
29 , preInstall ? ""
30 , noDev ? false
31 , unpackPhase ? "true"
32 , buildPhase ? "true"
33 , doRemoveVendor ? true
34 , ...}@args:
35
36 let
37 reconstructInstalled = writeTextFile {
38 name = "reconstructinstalled.php";
39 executable = true;
40 text = ''
41 #! ${php}/bin/php
42 <?php
43 if(file_exists($argv[1]))
44 {
45 $composerLockStr = file_get_contents($argv[1]);
46
47 if($composerLockStr === false)
48 {
49 fwrite(STDERR, "Cannot open composer.lock contents\n");
50 exit(1);
51 }
52 else
53 {
54 $config = json_decode($composerLockStr, true);
55
56 if(array_key_exists("packages", $config))
57 $allPackages = $config["packages"];
58 else
59 $allPackages = array();
60
61 ${lib.optionalString (!noDev) ''
62 if(array_key_exists("packages-dev", $config))
63 $allPackages = array_merge($allPackages, $config["packages-dev"]);
64 ''}
65
66 $packagesStr = json_encode($allPackages, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
67 print($packagesStr);
68 }
69 }
70 else
71 print("[]");
72 ?>
73 '';
74 };
75
76 constructBin = writeTextFile {
77 name = "constructbin.php";
78 executable = true;
79 text = ''
80 #! ${php}/bin/php
81 <?php
82 $composerJSONStr = file_get_contents($argv[1]);
83
84 if($composerJSONStr === false)
85 {
86 fwrite(STDERR, "Cannot open composer.json contents\n");
87 exit(1);
88 }
89 else
90 {
91 $config = json_decode($composerJSONStr, true);
92
93 if(array_key_exists("bin-dir", $config))
94 $binDir = $config["bin-dir"];
95 else
96 $binDir = "bin";
97
98 if(array_key_exists("bin", $config))
99 {
100 if(!file_exists("vendor/".$binDir))
101 mkdir("vendor/".$binDir);
102
103 foreach($config["bin"] as $bin)
104 symlink("../../".$bin, "vendor/".$binDir."/".basename($bin));
105 }
106 }
107 ?>
108 '';
109 };
110
111 bundleDependencies = dependencies:
112 lib.concatMapStrings (dependencyName:
113 let
114 dependency = dependencies.${dependencyName};
115 in
116 ''
117 ${if dependency.targetDir == "" then ''
118 vendorDir="$(dirname ${dependencyName})"
119 mkdir -p "$vendorDir"
120 ${if symlinkDependencies then
121 ''ln -s "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"''
122 else
123 ''cp -a "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"''
124 }${if dependency.needsModifyRights or false then "\n" + ''
125 chmod -R u+rwx "$vendorDir/$(basename "${dependencyName}")"
126 '' else ""}
127 '' else ''
128 namespaceDir="${dependencyName}/$(dirname "${dependency.targetDir}")"
129 mkdir -p "$namespaceDir"
130 ${if symlinkDependencies then
131 ''ln -s "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"''
132 else
133 ''cp -a "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"''
134 }${if dependency.needsModifyRights or false then "\n" + ''
135 chmod -R u+rwx "$namespaceDir/$(basename "${dependency.targetDir}")"
136 '' else ""}
137 ''}
138 '') (builtins.attrNames dependencies);
139
140 extraArgs = removeAttrs args [ "name" "packages" "devPackages" "buildInputs" ];
141 in
142 stdenv.mkDerivation ({
143 name = "composer-${name}";
144 buildInputs = [ php composer ] ++ buildInputs;
145
146 inherit unpackPhase buildPhase;
147
148 installPhase = ''
149 ${if executable then ''
150 mkdir -p $out/share/php
151 cp -a $src $out/share/php/$name
152 chmod -R u+w $out/share/php/$name
153 cd $out/share/php/$name
154 '' else ''
155 cp -a $src $out
156 chmod -R u+w $out
157 cd $out
158 ''}
159
160 # Execute pre install hook
161 runHook preInstall
162
163 # Remove unwanted files
164 rm -f *.nix
165
166 export HOME=$TMPDIR
167
168 ${if doRemoveVendor then ''
169 # Remove the provided vendor folder if it exists
170 rm -Rf vendor
171 '' else ""}
172 # If there is no composer.lock file, compose a dummy file.
173 # Otherwise, composer attempts to download the package.json file from
174 # the registry which we do not want.
175 if [ ! -f composer.lock ]
176 then
177 cat > composer.lock <<EOF
178 {
179 "packages": []
180 }
181 EOF
182 fi
183
184 # Reconstruct the installed.json file from the lock file
185 mkdir -p vendor/composer
186 ${reconstructInstalled} composer.lock > vendor/composer/installed.json
187
188 # Copy or symlink the provided dependencies
189 cd vendor
190 ${bundleDependencies packages}
191 ${lib.optionalString (!noDev) (bundleDependencies devPackages)}
192 cd ..
193
194 # Reconstruct autoload scripts
195 # We use the optimize feature because Nix packages cannot change after they have been built
196 # Using the dynamic loader for a Nix package is useless since there is nothing to dynamically reload.
197 composer dump-autoload --optimize ${lib.optionalString noDev "--no-dev"}
198
199 # Run the install step as a validation to confirm that everything works out as expected
200 composer install --optimize-autoloader ${lib.optionalString noDev "--no-dev"}
201
202 ${lib.optionalString executable ''
203 # Reconstruct the bin/ folder if we deploy an executable project
204 ${constructBin} composer.json
205 ln -s $(pwd)/vendor/bin $out/bin
206 ''}
207
208 ${lib.optionalString (!symlinkDependencies) ''
209 # Patch the shebangs if possible
210 if [ -d $(pwd)/vendor/bin ]
211 then
212 # Look for all executables in bin/
213 for i in $(pwd)/vendor/bin/*
214 do
215 # Look for their location
216 realFile=$(readlink -f "$i")
217
218 # Restore write permissions
219 chmod u+wx "$(dirname "$realFile")"
220 chmod u+w "$realFile"
221
222 # Patch shebang
223 sed -e "s|#!/usr/bin/php|#!${php}/bin/php|" \
224 -e "s|#!/usr/bin/env php|#!${php}/bin/php|" \
225 "$realFile" > tmp
226 mv tmp "$realFile"
227 chmod u+x "$realFile"
228 done
229 fi
230 ''}
231
232 if [ "$removeComposerArtifacts" = "1" ]
233 then
234 # Remove composer stuff
235 rm -f composer.json composer.lock
236 fi
237
238 # Execute post install hook
239 runHook postInstall
240 '';
241 } // extraArgs);
242in
243{ inherit composer buildZipPackage buildPackage; }
diff --git a/flakes/mypackages/pkgs/crypto/cardano-cli/default.nix b/flakes/mypackages/pkgs/crypto/cardano-cli/default.nix
new file mode 100644
index 0000000..3cd5a4c
--- /dev/null
+++ b/flakes/mypackages/pkgs/crypto/cardano-cli/default.nix
@@ -0,0 +1,16 @@
1{ rustPlatform, fetchFromGitHub }:
2rustPlatform.buildRustPackage rec {
3 name = "cardano-cli-${version}";
4 version = "master";
5
6 src = fetchFromGitHub {
7 owner = "input-output-hk";
8 repo = "cardano-cli";
9 rev = "ed064d5a3b96c23b52bb20ca49da9cb8764a2e0f";
10 sha256 = "07y5ssar6aq93snrvmapk05zmym4w23ydvjn2njp8saxk23ivqsg";
11 fetchSubmodules = true;
12 };
13
14 cargoSha256 = "0j68dsqahvgpa9ms62149530lbfa55lmpd56rgdxkrh2z32lshs8";
15 verifyCargoDeps = true;
16}
diff --git a/flakes/mypackages/pkgs/crypto/cardano/default.nix b/flakes/mypackages/pkgs/crypto/cardano/default.nix
new file mode 100644
index 0000000..8e3c83f
--- /dev/null
+++ b/flakes/mypackages/pkgs/crypto/cardano/default.nix
@@ -0,0 +1,35 @@
1{ stdenv, fetchFromGitHub }:
2let
3 src = fetchFromGitHub {
4 owner = "input-output-hk";
5 repo = "daedalus";
6 rev = "998fd3189c9a54fac496dfef7a6224714c67bc80";
7 sha256 = "1r3gwfv6hn7lzp4h2s6849m7x12nxadsql358ss615krvdlnb6rr";
8 fetchSubmodules = true;
9 };
10 daedalusOrig = (import src {}).daedalus;
11 cfg = stdenv.mkDerivation rec {
12 name = "launcher-config-custom";
13 buildInputs = [ src daedalusOrig.cfg ];
14 src = daedalusOrig.cfg;
15 installPhase = ''
16 cp -a $src $out
17 chmod -R u+w $out
18 cd $out/etc
19 sed -e "/^walletPath/d" -e "/^walletArgs/d" launcher-config.yaml > launcher-config-server-only.yaml
20 '';
21 };
22in
23stdenv.mkDerivation rec {
24 name = "daedalus-custom";
25 src = daedalusOrig;
26 buildInputs = [ cfg daedalusOrig ];
27 installPhase = ''
28 cp -a $src $out
29 chmod -R u+w $out
30 cd $out/bin
31 sed -i -e "s@${builtins.storeDir}/[0-9a-z]*-daedalus-config@${cfg}/etc@" daedalus
32 sed -e "s@${cfg}/etc/launcher-config.yaml@${cfg}/etc/launcher-config-server-only.yaml@" daedalus > daedalus-server-only
33 chmod a+x daedalus-server-only
34 '';
35}
diff --git a/flakes/mypackages/pkgs/crypto/iota-cli-app/default.nix b/flakes/mypackages/pkgs/crypto/iota-cli-app/default.nix
new file mode 100644
index 0000000..e386489
--- /dev/null
+++ b/flakes/mypackages/pkgs/crypto/iota-cli-app/default.nix
@@ -0,0 +1,29 @@
1{ stdenv, mylibs, fetchFromGitHub, fetchurl, fetchgit, callPackage, nodePackages, nodejs-10_x }:
2let
3 nodeEnv = callPackage mylibs.nodeEnv { nodejs = nodejs-10_x; };
4 # built using node2nix -8 -l package-lock.json
5 # and changing "./." to "src"
6 packageEnv = import ./node-packages.nix {
7 src = stdenv.mkDerivation ({
8 pname = "iota-cli-app";
9 version = "d7e2e08-master";
10 src = fetchFromGitHub {
11 owner = "iotaledger";
12 repo = "cli-app";
13 rev = "d7e2e0856ae6bd34890fefb4245c07cd467a5032";
14 sha256 = "1n9kczsxdgjv8282nj2grlijvxipiskx0ndn169vz6v1l1hrwc8b";
15 fetchSubmodules = true;
16 };
17 phases = "installPhase";
18 installPhase = ''
19 cp -a $src $out
20 chmod u+w -R $out
21 cd $out
22 sed -i -e "s@host: 'http://localhost',@host: 'https://nodes.thetangle.org',@" index.js
23 sed -i -e "s@port: 14265@port: 443@" index.js
24 '';
25 });
26 inherit fetchurl fetchgit nodeEnv;
27 };
28in
29packageEnv.package
diff --git a/flakes/mypackages/pkgs/crypto/iota-cli-app/node-packages.nix b/flakes/mypackages/pkgs/crypto/iota-cli-app/node-packages.nix
new file mode 100644
index 0000000..d5c61d6
--- /dev/null
+++ b/flakes/mypackages/pkgs/crypto/iota-cli-app/node-packages.nix
@@ -0,0 +1,1814 @@
1# This file has been generated by node2nix 1.6.0. Do not edit!
2
3{src, nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
4
5let
6 sources = {
7 "acorn-3.3.0" = {
8 name = "acorn";
9 packageName = "acorn";
10 version = "3.3.0";
11 src = fetchurl {
12 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
13 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
14 };
15 };
16 "acorn-5.2.1" = {
17 name = "acorn";
18 packageName = "acorn";
19 version = "5.2.1";
20 src = fetchurl {
21 url = "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz";
22 sha512 = "jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==";
23 };
24 };
25 "acorn-jsx-3.0.1" = {
26 name = "acorn-jsx";
27 packageName = "acorn-jsx";
28 version = "3.0.1";
29 src = fetchurl {
30 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
31 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
32 };
33 };
34 "ajv-4.11.8" = {
35 name = "ajv";
36 packageName = "ajv";
37 version = "4.11.8";
38 src = fetchurl {
39 url = "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz";
40 sha1 = "82ffb02b29e662ae53bdc20af15947706739c536";
41 };
42 };
43 "ajv-keywords-1.5.1" = {
44 name = "ajv-keywords";
45 packageName = "ajv-keywords";
46 version = "1.5.1";
47 src = fetchurl {
48 url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz";
49 sha1 = "314dd0a4b3368fad3dfcdc54ede6171b886daf3c";
50 };
51 };
52 "ansi-escapes-1.4.0" = {
53 name = "ansi-escapes";
54 packageName = "ansi-escapes";
55 version = "1.4.0";
56 src = fetchurl {
57 url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz";
58 sha1 = "d3a8a83b319aa67793662b13e761c7911422306e";
59 };
60 };
61 "ansi-regex-2.1.1" = {
62 name = "ansi-regex";
63 packageName = "ansi-regex";
64 version = "2.1.1";
65 src = fetchurl {
66 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
67 sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
68 };
69 };
70 "ansi-regex-3.0.0" = {
71 name = "ansi-regex";
72 packageName = "ansi-regex";
73 version = "3.0.0";
74 src = fetchurl {
75 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
76 sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
77 };
78 };
79 "ansi-styles-2.2.1" = {
80 name = "ansi-styles";
81 packageName = "ansi-styles";
82 version = "2.2.1";
83 src = fetchurl {
84 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
85 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
86 };
87 };
88 "ansi-styles-3.2.0" = {
89 name = "ansi-styles";
90 packageName = "ansi-styles";
91 version = "3.2.0";
92 src = fetchurl {
93 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz";
94 sha512 = "NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==";
95 };
96 };
97 "argparse-1.0.9" = {
98 name = "argparse";
99 packageName = "argparse";
100 version = "1.0.9";
101 src = fetchurl {
102 url = "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz";
103 sha1 = "73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86";
104 };
105 };
106 "array-union-1.0.2" = {
107 name = "array-union";
108 packageName = "array-union";
109 version = "1.0.2";
110 src = fetchurl {
111 url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz";
112 sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39";
113 };
114 };
115 "array-uniq-1.0.3" = {
116 name = "array-uniq";
117 packageName = "array-uniq";
118 version = "1.0.3";
119 src = fetchurl {
120 url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz";
121 sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6";
122 };
123 };
124 "arrify-1.0.1" = {
125 name = "arrify";
126 packageName = "arrify";
127 version = "1.0.1";
128 src = fetchurl {
129 url = "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz";
130 sha1 = "898508da2226f380df904728456849c1501a4b0d";
131 };
132 };
133 "async-2.6.0" = {
134 name = "async";
135 packageName = "async";
136 version = "2.6.0";
137 src = fetchurl {
138 url = "https://registry.npmjs.org/async/-/async-2.6.0.tgz";
139 sha512 = "xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==";
140 };
141 };
142 "babel-code-frame-6.26.0" = {
143 name = "babel-code-frame";
144 packageName = "babel-code-frame";
145 version = "6.26.0";
146 src = fetchurl {
147 url = "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz";
148 sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b";
149 };
150 };
151 "babel-polyfill-6.26.0" = {
152 name = "babel-polyfill";
153 packageName = "babel-polyfill";
154 version = "6.26.0";
155 src = fetchurl {
156 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz";
157 sha1 = "379937abc67d7895970adc621f284cd966cf2153";
158 };
159 };
160 "babel-runtime-6.26.0" = {
161 name = "babel-runtime";
162 packageName = "babel-runtime";
163 version = "6.26.0";
164 src = fetchurl {
165 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
166 sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
167 };
168 };
169 "balanced-match-1.0.0" = {
170 name = "balanced-match";
171 packageName = "balanced-match";
172 version = "1.0.0";
173 src = fetchurl {
174 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
175 sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
176 };
177 };
178 "bignumber.js-4.1.0" = {
179 name = "bignumber.js";
180 packageName = "bignumber.js";
181 version = "4.1.0";
182 src = fetchurl {
183 url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz";
184 sha512 = "eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==";
185 };
186 };
187 "bluebird-3.5.1" = {
188 name = "bluebird";
189 packageName = "bluebird";
190 version = "3.5.1";
191 src = fetchurl {
192 url = "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz";
193 sha512 = "MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==";
194 };
195 };
196 "brace-expansion-1.1.8" = {
197 name = "brace-expansion";
198 packageName = "brace-expansion";
199 version = "1.1.8";
200 src = fetchurl {
201 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz";
202 sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292";
203 };
204 };
205 "caller-path-0.1.0" = {
206 name = "caller-path";
207 packageName = "caller-path";
208 version = "0.1.0";
209 src = fetchurl {
210 url = "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz";
211 sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f";
212 };
213 };
214 "callsites-0.2.0" = {
215 name = "callsites";
216 packageName = "callsites";
217 version = "0.2.0";
218 src = fetchurl {
219 url = "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz";
220 sha1 = "afab96262910a7f33c19a5775825c69f34e350ca";
221 };
222 };
223 "chalk-1.1.3" = {
224 name = "chalk";
225 packageName = "chalk";
226 version = "1.1.3";
227 src = fetchurl {
228 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
229 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
230 };
231 };
232 "chalk-2.3.0" = {
233 name = "chalk";
234 packageName = "chalk";
235 version = "2.3.0";
236 src = fetchurl {
237 url = "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz";
238 sha512 = "Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==";
239 };
240 };
241 "circular-json-0.3.3" = {
242 name = "circular-json";
243 packageName = "circular-json";
244 version = "0.3.3";
245 src = fetchurl {
246 url = "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz";
247 sha512 = "UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==";
248 };
249 };
250 "cli-cursor-1.0.2" = {
251 name = "cli-cursor";
252 packageName = "cli-cursor";
253 version = "1.0.2";
254 src = fetchurl {
255 url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz";
256 sha1 = "64da3f7d56a54412e59794bd62dc35295e8f2987";
257 };
258 };
259 "cli-width-1.1.1" = {
260 name = "cli-width";
261 packageName = "cli-width";
262 version = "1.1.1";
263 src = fetchurl {
264 url = "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz";
265 sha1 = "a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d";
266 };
267 };
268 "cli-width-2.2.0" = {
269 name = "cli-width";
270 packageName = "cli-width";
271 version = "2.2.0";
272 src = fetchurl {
273 url = "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz";
274 sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639";
275 };
276 };
277 "co-4.6.0" = {
278 name = "co";
279 packageName = "co";
280 version = "4.6.0";
281 src = fetchurl {
282 url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz";
283 sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
284 };
285 };
286 "code-point-at-1.1.0" = {
287 name = "code-point-at";
288 packageName = "code-point-at";
289 version = "1.1.0";
290 src = fetchurl {
291 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
292 sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
293 };
294 };
295 "color-convert-1.9.1" = {
296 name = "color-convert";
297 packageName = "color-convert";
298 version = "1.9.1";
299 src = fetchurl {
300 url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz";
301 sha512 = "mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==";
302 };
303 };
304 "color-name-1.1.3" = {
305 name = "color-name";
306 packageName = "color-name";
307 version = "1.1.3";
308 src = fetchurl {
309 url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
310 sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
311 };
312 };
313 "colors-1.1.2" = {
314 name = "colors";
315 packageName = "colors";
316 version = "1.1.2";
317 src = fetchurl {
318 url = "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz";
319 sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63";
320 };
321 };
322 "concat-map-0.0.1" = {
323 name = "concat-map";
324 packageName = "concat-map";
325 version = "0.0.1";
326 src = fetchurl {
327 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
328 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
329 };
330 };
331 "concat-stream-1.6.0" = {
332 name = "concat-stream";
333 packageName = "concat-stream";
334 version = "1.6.0";
335 src = fetchurl {
336 url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz";
337 sha1 = "0aac662fd52be78964d5532f694784e70110acf7";
338 };
339 };
340 "core-js-2.5.3" = {
341 name = "core-js";
342 packageName = "core-js";
343 version = "2.5.3";
344 src = fetchurl {
345 url = "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz";
346 sha1 = "8acc38345824f16d8365b7c9b4259168e8ed603e";
347 };
348 };
349 "core-util-is-1.0.2" = {
350 name = "core-util-is";
351 packageName = "core-util-is";
352 version = "1.0.2";
353 src = fetchurl {
354 url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
355 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
356 };
357 };
358 "crypto-js-3.1.9-1" = {
359 name = "crypto-js";
360 packageName = "crypto-js";
361 version = "3.1.9-1";
362 src = fetchurl {
363 url = "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz";
364 sha1 = "fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8";
365 };
366 };
367 "d-1.0.0" = {
368 name = "d";
369 packageName = "d";
370 version = "1.0.0";
371 src = fetchurl {
372 url = "https://registry.npmjs.org/d/-/d-1.0.0.tgz";
373 sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f";
374 };
375 };
376 "debug-2.6.9" = {
377 name = "debug";
378 packageName = "debug";
379 version = "2.6.9";
380 src = fetchurl {
381 url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
382 sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
383 };
384 };
385 "deep-is-0.1.3" = {
386 name = "deep-is";
387 packageName = "deep-is";
388 version = "0.1.3";
389 src = fetchurl {
390 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
391 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
392 };
393 };
394 "del-2.2.2" = {
395 name = "del";
396 packageName = "del";
397 version = "2.2.2";
398 src = fetchurl {
399 url = "https://registry.npmjs.org/del/-/del-2.2.2.tgz";
400 sha1 = "c12c981d067846c84bcaf862cff930d907ffd1a8";
401 };
402 };
403 "doctrine-2.0.2" = {
404 name = "doctrine";
405 packageName = "doctrine";
406 version = "2.0.2";
407 src = fetchurl {
408 url = "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz";
409 sha512 = "y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==";
410 };
411 };
412 "encoding-0.1.12" = {
413 name = "encoding";
414 packageName = "encoding";
415 version = "0.1.12";
416 src = fetchurl {
417 url = "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz";
418 sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb";
419 };
420 };
421 "es5-ext-0.10.37" = {
422 name = "es5-ext";
423 packageName = "es5-ext";
424 version = "0.10.37";
425 src = fetchurl {
426 url = "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz";
427 sha1 = "0ee741d148b80069ba27d020393756af257defc3";
428 };
429 };
430 "es6-iterator-2.0.3" = {
431 name = "es6-iterator";
432 packageName = "es6-iterator";
433 version = "2.0.3";
434 src = fetchurl {
435 url = "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz";
436 sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7";
437 };
438 };
439 "es6-map-0.1.5" = {
440 name = "es6-map";
441 packageName = "es6-map";
442 version = "0.1.5";
443 src = fetchurl {
444 url = "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz";
445 sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0";
446 };
447 };
448 "es6-set-0.1.5" = {
449 name = "es6-set";
450 packageName = "es6-set";
451 version = "0.1.5";
452 src = fetchurl {
453 url = "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz";
454 sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1";
455 };
456 };
457 "es6-symbol-3.1.1" = {
458 name = "es6-symbol";
459 packageName = "es6-symbol";
460 version = "3.1.1";
461 src = fetchurl {
462 url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz";
463 sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77";
464 };
465 };
466 "es6-weak-map-2.0.2" = {
467 name = "es6-weak-map";
468 packageName = "es6-weak-map";
469 version = "2.0.2";
470 src = fetchurl {
471 url = "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz";
472 sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f";
473 };
474 };
475 "escape-string-regexp-1.0.5" = {
476 name = "escape-string-regexp";
477 packageName = "escape-string-regexp";
478 version = "1.0.5";
479 src = fetchurl {
480 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
481 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
482 };
483 };
484 "escope-3.6.0" = {
485 name = "escope";
486 packageName = "escope";
487 version = "3.6.0";
488 src = fetchurl {
489 url = "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz";
490 sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3";
491 };
492 };
493 "eslint-3.19.0" = {
494 name = "eslint";
495 packageName = "eslint";
496 version = "3.19.0";
497 src = fetchurl {
498 url = "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz";
499 sha1 = "c8fc6201c7f40dd08941b87c085767386a679acc";
500 };
501 };
502 "espree-3.5.2" = {
503 name = "espree";
504 packageName = "espree";
505 version = "3.5.2";
506 src = fetchurl {
507 url = "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz";
508 sha512 = "sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==";
509 };
510 };
511 "esprima-4.0.0" = {
512 name = "esprima";
513 packageName = "esprima";
514 version = "4.0.0";
515 src = fetchurl {
516 url = "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz";
517 sha512 = "oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==";
518 };
519 };
520 "esquery-1.0.0" = {
521 name = "esquery";
522 packageName = "esquery";
523 version = "1.0.0";
524 src = fetchurl {
525 url = "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz";
526 sha1 = "cfba8b57d7fba93f17298a8a006a04cda13d80fa";
527 };
528 };
529 "esrecurse-4.2.0" = {
530 name = "esrecurse";
531 packageName = "esrecurse";
532 version = "4.2.0";
533 src = fetchurl {
534 url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz";
535 sha1 = "fa9568d98d3823f9a41d91e902dcab9ea6e5b163";
536 };
537 };
538 "estraverse-4.2.0" = {
539 name = "estraverse";
540 packageName = "estraverse";
541 version = "4.2.0";
542 src = fetchurl {
543 url = "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz";
544 sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13";
545 };
546 };
547 "esutils-2.0.2" = {
548 name = "esutils";
549 packageName = "esutils";
550 version = "2.0.2";
551 src = fetchurl {
552 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
553 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
554 };
555 };
556 "event-emitter-0.3.5" = {
557 name = "event-emitter";
558 packageName = "event-emitter";
559 version = "0.3.5";
560 src = fetchurl {
561 url = "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz";
562 sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39";
563 };
564 };
565 "exit-hook-1.1.1" = {
566 name = "exit-hook";
567 packageName = "exit-hook";
568 version = "1.1.1";
569 src = fetchurl {
570 url = "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz";
571 sha1 = "f05ca233b48c05d54fff07765df8507e95c02ff8";
572 };
573 };
574 "fast-levenshtein-2.0.6" = {
575 name = "fast-levenshtein";
576 packageName = "fast-levenshtein";
577 version = "2.0.6";
578 src = fetchurl {
579 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
580 sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
581 };
582 };
583 "figures-1.7.0" = {
584 name = "figures";
585 packageName = "figures";
586 version = "1.7.0";
587 src = fetchurl {
588 url = "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz";
589 sha1 = "cbe1e3affcf1cd44b80cadfed28dc793a9701d2e";
590 };
591 };
592 "file-entry-cache-2.0.0" = {
593 name = "file-entry-cache";
594 packageName = "file-entry-cache";
595 version = "2.0.0";
596 src = fetchurl {
597 url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz";
598 sha1 = "c392990c3e684783d838b8c84a45d8a048458361";
599 };
600 };
601 "flat-cache-1.3.0" = {
602 name = "flat-cache";
603 packageName = "flat-cache";
604 version = "1.3.0";
605 src = fetchurl {
606 url = "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz";
607 sha1 = "d3030b32b38154f4e3b7e9c709f490f7ef97c481";
608 };
609 };
610 "fs.realpath-1.0.0" = {
611 name = "fs.realpath";
612 packageName = "fs.realpath";
613 version = "1.0.0";
614 src = fetchurl {
615 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
616 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
617 };
618 };
619 "generate-function-2.0.0" = {
620 name = "generate-function";
621 packageName = "generate-function";
622 version = "2.0.0";
623 src = fetchurl {
624 url = "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz";
625 sha1 = "6858fe7c0969b7d4e9093337647ac79f60dfbe74";
626 };
627 };
628 "generate-object-property-1.2.0" = {
629 name = "generate-object-property";
630 packageName = "generate-object-property";
631 version = "1.2.0";
632 src = fetchurl {
633 url = "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz";
634 sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0";
635 };
636 };
637 "glob-7.1.2" = {
638 name = "glob";
639 packageName = "glob";
640 version = "7.1.2";
641 src = fetchurl {
642 url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";
643 sha512 = "MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==";
644 };
645 };
646 "globals-9.18.0" = {
647 name = "globals";
648 packageName = "globals";
649 version = "9.18.0";
650 src = fetchurl {
651 url = "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz";
652 sha512 = "S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==";
653 };
654 };
655 "globby-5.0.0" = {
656 name = "globby";
657 packageName = "globby";
658 version = "5.0.0";
659 src = fetchurl {
660 url = "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz";
661 sha1 = "ebd84667ca0dbb330b99bcfc68eac2bc54370e0d";
662 };
663 };
664 "graceful-fs-4.1.11" = {
665 name = "graceful-fs";
666 packageName = "graceful-fs";
667 version = "4.1.11";
668 src = fetchurl {
669 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
670 sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
671 };
672 };
673 "has-ansi-2.0.0" = {
674 name = "has-ansi";
675 packageName = "has-ansi";
676 version = "2.0.0";
677 src = fetchurl {
678 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
679 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
680 };
681 };
682 "has-flag-2.0.0" = {
683 name = "has-flag";
684 packageName = "has-flag";
685 version = "2.0.0";
686 src = fetchurl {
687 url = "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz";
688 sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51";
689 };
690 };
691 "iconv-lite-0.4.19" = {
692 name = "iconv-lite";
693 packageName = "iconv-lite";
694 version = "0.4.19";
695 src = fetchurl {
696 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz";
697 sha512 = "oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==";
698 };
699 };
700 "ignore-3.3.7" = {
701 name = "ignore";
702 packageName = "ignore";
703 version = "3.3.7";
704 src = fetchurl {
705 url = "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz";
706 sha512 = "YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==";
707 };
708 };
709 "imurmurhash-0.1.4" = {
710 name = "imurmurhash";
711 packageName = "imurmurhash";
712 version = "0.1.4";
713 src = fetchurl {
714 url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
715 sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
716 };
717 };
718 "in-publish-2.0.0" = {
719 name = "in-publish";
720 packageName = "in-publish";
721 version = "2.0.0";
722 src = fetchurl {
723 url = "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz";
724 sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51";
725 };
726 };
727 "inflight-1.0.6" = {
728 name = "inflight";
729 packageName = "inflight";
730 version = "1.0.6";
731 src = fetchurl {
732 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
733 sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
734 };
735 };
736 "inherits-2.0.3" = {
737 name = "inherits";
738 packageName = "inherits";
739 version = "2.0.3";
740 src = fetchurl {
741 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
742 sha1 = "633c2c83e3da42a502f52466022480f4208261de";
743 };
744 };
745 "inquirer-0.11.0" = {
746 name = "inquirer";
747 packageName = "inquirer";
748 version = "0.11.0";
749 src = fetchurl {
750 url = "https://registry.npmjs.org/inquirer/-/inquirer-0.11.0.tgz";
751 sha1 = "7448bfa924092af311d47173bbab990cae2bb027";
752 };
753 };
754 "inquirer-0.12.0" = {
755 name = "inquirer";
756 packageName = "inquirer";
757 version = "0.12.0";
758 src = fetchurl {
759 url = "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz";
760 sha1 = "1ef2bfd63504df0bc75785fff8c2c41df12f077e";
761 };
762 };
763 "install-0.10.4" = {
764 name = "install";
765 packageName = "install";
766 version = "0.10.4";
767 src = fetchurl {
768 url = "https://registry.npmjs.org/install/-/install-0.10.4.tgz";
769 sha512 = "+IRyOastuPmLVx9zlVXJoKErSqz1Ma5at9A7S8yfsj3W+Kg95faPoh3bPDtMrZ/grz4PRmXzrswmlzfLlYyLOw==";
770 };
771 };
772 "interpret-1.1.0" = {
773 name = "interpret";
774 packageName = "interpret";
775 version = "1.1.0";
776 src = fetchurl {
777 url = "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz";
778 sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614";
779 };
780 };
781 "iota.lib.js-0.4.6" = {
782 name = "iota.lib.js";
783 packageName = "iota.lib.js";
784 version = "0.4.6";
785 src = fetchurl {
786 url = "https://registry.npmjs.org/iota.lib.js/-/iota.lib.js-0.4.6.tgz";
787 sha1 = "47afdc03d57c7f55d2f58f068db492df6bc6e9bb";
788 };
789 };
790 "is-fullwidth-code-point-1.0.0" = {
791 name = "is-fullwidth-code-point";
792 packageName = "is-fullwidth-code-point";
793 version = "1.0.0";
794 src = fetchurl {
795 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
796 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
797 };
798 };
799 "is-fullwidth-code-point-2.0.0" = {
800 name = "is-fullwidth-code-point";
801 packageName = "is-fullwidth-code-point";
802 version = "2.0.0";
803 src = fetchurl {
804 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
805 sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
806 };
807 };
808 "is-my-json-valid-2.16.1" = {
809 name = "is-my-json-valid";
810 packageName = "is-my-json-valid";
811 version = "2.16.1";
812 src = fetchurl {
813 url = "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz";
814 sha512 = "ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==";
815 };
816 };
817 "is-path-cwd-1.0.0" = {
818 name = "is-path-cwd";
819 packageName = "is-path-cwd";
820 version = "1.0.0";
821 src = fetchurl {
822 url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz";
823 sha1 = "d225ec23132e89edd38fda767472e62e65f1106d";
824 };
825 };
826 "is-path-in-cwd-1.0.0" = {
827 name = "is-path-in-cwd";
828 packageName = "is-path-in-cwd";
829 version = "1.0.0";
830 src = fetchurl {
831 url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz";
832 sha1 = "6477582b8214d602346094567003be8a9eac04dc";
833 };
834 };
835 "is-path-inside-1.0.1" = {
836 name = "is-path-inside";
837 packageName = "is-path-inside";
838 version = "1.0.1";
839 src = fetchurl {
840 url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz";
841 sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036";
842 };
843 };
844 "is-property-1.0.2" = {
845 name = "is-property";
846 packageName = "is-property";
847 version = "1.0.2";
848 src = fetchurl {
849 url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz";
850 sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84";
851 };
852 };
853 "is-resolvable-1.0.1" = {
854 name = "is-resolvable";
855 packageName = "is-resolvable";
856 version = "1.0.1";
857 src = fetchurl {
858 url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz";
859 sha512 = "y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==";
860 };
861 };
862 "is-stream-1.1.0" = {
863 name = "is-stream";
864 packageName = "is-stream";
865 version = "1.1.0";
866 src = fetchurl {
867 url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
868 sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
869 };
870 };
871 "isarray-1.0.0" = {
872 name = "isarray";
873 packageName = "isarray";
874 version = "1.0.0";
875 src = fetchurl {
876 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
877 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
878 };
879 };
880 "js-tokens-3.0.2" = {
881 name = "js-tokens";
882 packageName = "js-tokens";
883 version = "3.0.2";
884 src = fetchurl {
885 url = "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz";
886 sha1 = "9866df395102130e38f7f996bceb65443209c25b";
887 };
888 };
889 "js-yaml-3.10.0" = {
890 name = "js-yaml";
891 packageName = "js-yaml";
892 version = "3.10.0";
893 src = fetchurl {
894 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz";
895 sha512 = "O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==";
896 };
897 };
898 "json-stable-stringify-1.0.1" = {
899 name = "json-stable-stringify";
900 packageName = "json-stable-stringify";
901 version = "1.0.1";
902 src = fetchurl {
903 url = "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz";
904 sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af";
905 };
906 };
907 "json5-0.5.1" = {
908 name = "json5";
909 packageName = "json5";
910 version = "0.5.1";
911 src = fetchurl {
912 url = "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz";
913 sha1 = "1eade7acc012034ad84e2396767ead9fa5495821";
914 };
915 };
916 "jsonify-0.0.0" = {
917 name = "jsonify";
918 packageName = "jsonify";
919 version = "0.0.0";
920 src = fetchurl {
921 url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz";
922 sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
923 };
924 };
925 "jsonpointer-4.0.1" = {
926 name = "jsonpointer";
927 packageName = "jsonpointer";
928 version = "4.0.1";
929 src = fetchurl {
930 url = "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz";
931 sha1 = "4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9";
932 };
933 };
934 "left-pad-1.2.0" = {
935 name = "left-pad";
936 packageName = "left-pad";
937 version = "1.2.0";
938 src = fetchurl {
939 url = "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz";
940 sha1 = "d30a73c6b8201d8f7d8e7956ba9616087a68e0ee";
941 };
942 };
943 "levn-0.3.0" = {
944 name = "levn";
945 packageName = "levn";
946 version = "0.3.0";
947 src = fetchurl {
948 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
949 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
950 };
951 };
952 "lodash-3.10.1" = {
953 name = "lodash";
954 packageName = "lodash";
955 version = "3.10.1";
956 src = fetchurl {
957 url = "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz";
958 sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6";
959 };
960 };
961 "lodash-4.17.4" = {
962 name = "lodash";
963 packageName = "lodash";
964 version = "4.17.4";
965 src = fetchurl {
966 url = "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz";
967 sha1 = "78203a4d1c328ae1d86dca6460e369b57f4055ae";
968 };
969 };
970 "log-update-1.0.2" = {
971 name = "log-update";
972 packageName = "log-update";
973 version = "1.0.2";
974 src = fetchurl {
975 url = "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz";
976 sha1 = "19929f64c4093d2d2e7075a1dad8af59c296b8d1";
977 };
978 };
979 "minimatch-3.0.4" = {
980 name = "minimatch";
981 packageName = "minimatch";
982 version = "3.0.4";
983 src = fetchurl {
984 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
985 sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
986 };
987 };
988 "minimist-0.0.8" = {
989 name = "minimist";
990 packageName = "minimist";
991 version = "0.0.8";
992 src = fetchurl {
993 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
994 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
995 };
996 };
997 "minimist-1.2.0" = {
998 name = "minimist";
999 packageName = "minimist";
1000 version = "1.2.0";
1001 src = fetchurl {
1002 url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
1003 sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
1004 };
1005 };
1006 "mkdirp-0.5.1" = {
1007 name = "mkdirp";
1008 packageName = "mkdirp";
1009 version = "0.5.1";
1010 src = fetchurl {
1011 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
1012 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
1013 };
1014 };
1015 "moment-2.20.1" = {
1016 name = "moment";
1017 packageName = "moment";
1018 version = "2.20.1";
1019 src = fetchurl {
1020 url = "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz";
1021 sha512 = "Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==";
1022 };
1023 };
1024 "ms-2.0.0" = {
1025 name = "ms";
1026 packageName = "ms";
1027 version = "2.0.0";
1028 src = fetchurl {
1029 url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
1030 sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
1031 };
1032 };
1033 "mute-stream-0.0.5" = {
1034 name = "mute-stream";
1035 packageName = "mute-stream";
1036 version = "0.0.5";
1037 src = fetchurl {
1038 url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz";
1039 sha1 = "8fbfabb0a98a253d3184331f9e8deb7372fac6c0";
1040 };
1041 };
1042 "natural-compare-1.4.0" = {
1043 name = "natural-compare";
1044 packageName = "natural-compare";
1045 version = "1.4.0";
1046 src = fetchurl {
1047 url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
1048 sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
1049 };
1050 };
1051 "node-fetch-1.7.3" = {
1052 name = "node-fetch";
1053 packageName = "node-fetch";
1054 version = "1.7.3";
1055 src = fetchurl {
1056 url = "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz";
1057 sha512 = "NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==";
1058 };
1059 };
1060 "node-localstorage-0.6.0" = {
1061 name = "node-localstorage";
1062 packageName = "node-localstorage";
1063 version = "0.6.0";
1064 src = fetchurl {
1065 url = "https://registry.npmjs.org/node-localstorage/-/node-localstorage-0.6.0.tgz";
1066 sha1 = "45a0601c6932dfde6644a23361f1be173c75d3af";
1067 };
1068 };
1069 "number-is-nan-1.0.1" = {
1070 name = "number-is-nan";
1071 packageName = "number-is-nan";
1072 version = "1.0.1";
1073 src = fetchurl {
1074 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
1075 sha1 = "097b602b53422a522c1afb8790318336941a011d";
1076 };
1077 };
1078 "object-assign-4.1.1" = {
1079 name = "object-assign";
1080 packageName = "object-assign";
1081 version = "4.1.1";
1082 src = fetchurl {
1083 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
1084 sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
1085 };
1086 };
1087 "once-1.4.0" = {
1088 name = "once";
1089 packageName = "once";
1090 version = "1.4.0";
1091 src = fetchurl {
1092 url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
1093 sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
1094 };
1095 };
1096 "onetime-1.1.0" = {
1097 name = "onetime";
1098 packageName = "onetime";
1099 version = "1.1.0";
1100 src = fetchurl {
1101 url = "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz";
1102 sha1 = "a1f7838f8314c516f05ecefcbc4ccfe04b4ed789";
1103 };
1104 };
1105 "optionator-0.8.2" = {
1106 name = "optionator";
1107 packageName = "optionator";
1108 version = "0.8.2";
1109 src = fetchurl {
1110 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";
1111 sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64";
1112 };
1113 };
1114 "os-homedir-1.0.2" = {
1115 name = "os-homedir";
1116 packageName = "os-homedir";
1117 version = "1.0.2";
1118 src = fetchurl {
1119 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
1120 sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
1121 };
1122 };
1123 "path-is-absolute-1.0.1" = {
1124 name = "path-is-absolute";
1125 packageName = "path-is-absolute";
1126 version = "1.0.1";
1127 src = fetchurl {
1128 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
1129 sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
1130 };
1131 };
1132 "path-is-inside-1.0.2" = {
1133 name = "path-is-inside";
1134 packageName = "path-is-inside";
1135 version = "1.0.2";
1136 src = fetchurl {
1137 url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz";
1138 sha1 = "365417dede44430d1c11af61027facf074bdfc53";
1139 };
1140 };
1141 "path-parse-1.0.5" = {
1142 name = "path-parse";
1143 packageName = "path-parse";
1144 version = "1.0.5";
1145 src = fetchurl {
1146 url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz";
1147 sha1 = "3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1";
1148 };
1149 };
1150 "pify-2.3.0" = {
1151 name = "pify";
1152 packageName = "pify";
1153 version = "2.3.0";
1154 src = fetchurl {
1155 url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";
1156 sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
1157 };
1158 };
1159 "pinkie-2.0.4" = {
1160 name = "pinkie";
1161 packageName = "pinkie";
1162 version = "2.0.4";
1163 src = fetchurl {
1164 url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
1165 sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
1166 };
1167 };
1168 "pinkie-promise-2.0.1" = {
1169 name = "pinkie-promise";
1170 packageName = "pinkie-promise";
1171 version = "2.0.1";
1172 src = fetchurl {
1173 url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
1174 sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
1175 };
1176 };
1177 "pluralize-1.2.1" = {
1178 name = "pluralize";
1179 packageName = "pluralize";
1180 version = "1.2.1";
1181 src = fetchurl {
1182 url = "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz";
1183 sha1 = "d1a21483fd22bb41e58a12fa3421823140897c45";
1184 };
1185 };
1186 "prelude-ls-1.1.2" = {
1187 name = "prelude-ls";
1188 packageName = "prelude-ls";
1189 version = "1.1.2";
1190 src = fetchurl {
1191 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1192 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1193 };
1194 };
1195 "prettyjson-1.2.1" = {
1196 name = "prettyjson";
1197 packageName = "prettyjson";
1198 version = "1.2.1";
1199 src = fetchurl {
1200 url = "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz";
1201 sha1 = "fcffab41d19cab4dfae5e575e64246619b12d289";
1202 };
1203 };
1204 "process-nextick-args-1.0.7" = {
1205 name = "process-nextick-args";
1206 packageName = "process-nextick-args";
1207 version = "1.0.7";
1208 src = fetchurl {
1209 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1210 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1211 };
1212 };
1213 "progress-1.1.8" = {
1214 name = "progress";
1215 packageName = "progress";
1216 version = "1.1.8";
1217 src = fetchurl {
1218 url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz";
1219 sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be";
1220 };
1221 };
1222 "readable-stream-2.3.3" = {
1223 name = "readable-stream";
1224 packageName = "readable-stream";
1225 version = "2.3.3";
1226 src = fetchurl {
1227 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz";
1228 sha512 = "m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==";
1229 };
1230 };
1231 "readline2-1.0.1" = {
1232 name = "readline2";
1233 packageName = "readline2";
1234 version = "1.0.1";
1235 src = fetchurl {
1236 url = "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz";
1237 sha1 = "41059608ffc154757b715d9989d199ffbf372e35";
1238 };
1239 };
1240 "rechoir-0.6.2" = {
1241 name = "rechoir";
1242 packageName = "rechoir";
1243 version = "0.6.2";
1244 src = fetchurl {
1245 url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz";
1246 sha1 = "85204b54dba82d5742e28c96756ef43af50e3384";
1247 };
1248 };
1249 "regenerator-runtime-0.10.5" = {
1250 name = "regenerator-runtime";
1251 packageName = "regenerator-runtime";
1252 version = "0.10.5";
1253 src = fetchurl {
1254 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz";
1255 sha1 = "336c3efc1220adcedda2c9fab67b5a7955a33658";
1256 };
1257 };
1258 "regenerator-runtime-0.11.1" = {
1259 name = "regenerator-runtime";
1260 packageName = "regenerator-runtime";
1261 version = "0.11.1";
1262 src = fetchurl {
1263 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
1264 sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==";
1265 };
1266 };
1267 "require-uncached-1.0.3" = {
1268 name = "require-uncached";
1269 packageName = "require-uncached";
1270 version = "1.0.3";
1271 src = fetchurl {
1272 url = "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz";
1273 sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3";
1274 };
1275 };
1276 "resolve-1.5.0" = {
1277 name = "resolve";
1278 packageName = "resolve";
1279 version = "1.5.0";
1280 src = fetchurl {
1281 url = "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz";
1282 sha512 = "hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==";
1283 };
1284 };
1285 "resolve-from-1.0.1" = {
1286 name = "resolve-from";
1287 packageName = "resolve-from";
1288 version = "1.0.1";
1289 src = fetchurl {
1290 url = "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz";
1291 sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226";
1292 };
1293 };
1294 "restore-cursor-1.0.1" = {
1295 name = "restore-cursor";
1296 packageName = "restore-cursor";
1297 version = "1.0.1";
1298 src = fetchurl {
1299 url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz";
1300 sha1 = "34661f46886327fed2991479152252df92daa541";
1301 };
1302 };
1303 "rimraf-2.6.2" = {
1304 name = "rimraf";
1305 packageName = "rimraf";
1306 version = "2.6.2";
1307 src = fetchurl {
1308 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz";
1309 sha512 = "lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==";
1310 };
1311 };
1312 "run-async-0.1.0" = {
1313 name = "run-async";
1314 packageName = "run-async";
1315 version = "0.1.0";
1316 src = fetchurl {
1317 url = "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz";
1318 sha1 = "c8ad4a5e110661e402a7d21b530e009f25f8e389";
1319 };
1320 };
1321 "rx-lite-3.1.2" = {
1322 name = "rx-lite";
1323 packageName = "rx-lite";
1324 version = "3.1.2";
1325 src = fetchurl {
1326 url = "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz";
1327 sha1 = "19ce502ca572665f3b647b10939f97fd1615f102";
1328 };
1329 };
1330 "safe-buffer-5.1.1" = {
1331 name = "safe-buffer";
1332 packageName = "safe-buffer";
1333 version = "5.1.1";
1334 src = fetchurl {
1335 url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz";
1336 sha512 = "kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==";
1337 };
1338 };
1339 "shelljs-0.7.8" = {
1340 name = "shelljs";
1341 packageName = "shelljs";
1342 version = "0.7.8";
1343 src = fetchurl {
1344 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz";
1345 sha1 = "decbcf874b0d1e5fb72e14b164a9683048e9acb3";
1346 };
1347 };
1348 "slice-ansi-0.0.4" = {
1349 name = "slice-ansi";
1350 packageName = "slice-ansi";
1351 version = "0.0.4";
1352 src = fetchurl {
1353 url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz";
1354 sha1 = "edbf8903f66f7ce2f8eafd6ceed65e264c831b35";
1355 };
1356 };
1357 "sprintf-js-1.0.3" = {
1358 name = "sprintf-js";
1359 packageName = "sprintf-js";
1360 version = "1.0.3";
1361 src = fetchurl {
1362 url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
1363 sha1 = "04e6926f662895354f3dd015203633b857297e2c";
1364 };
1365 };
1366 "string-width-1.0.2" = {
1367 name = "string-width";
1368 packageName = "string-width";
1369 version = "1.0.2";
1370 src = fetchurl {
1371 url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
1372 sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
1373 };
1374 };
1375 "string-width-2.1.1" = {
1376 name = "string-width";
1377 packageName = "string-width";
1378 version = "2.1.1";
1379 src = fetchurl {
1380 url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
1381 sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
1382 };
1383 };
1384 "string_decoder-1.0.3" = {
1385 name = "string_decoder";
1386 packageName = "string_decoder";
1387 version = "1.0.3";
1388 src = fetchurl {
1389 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz";
1390 sha512 = "4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==";
1391 };
1392 };
1393 "strip-ansi-3.0.1" = {
1394 name = "strip-ansi";
1395 packageName = "strip-ansi";
1396 version = "3.0.1";
1397 src = fetchurl {
1398 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
1399 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
1400 };
1401 };
1402 "strip-ansi-4.0.0" = {
1403 name = "strip-ansi";
1404 packageName = "strip-ansi";
1405 version = "4.0.0";
1406 src = fetchurl {
1407 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
1408 sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
1409 };
1410 };
1411 "strip-bom-3.0.0" = {
1412 name = "strip-bom";
1413 packageName = "strip-bom";
1414 version = "3.0.0";
1415 src = fetchurl {
1416 url = "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz";
1417 sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3";
1418 };
1419 };
1420 "strip-json-comments-2.0.1" = {
1421 name = "strip-json-comments";
1422 packageName = "strip-json-comments";
1423 version = "2.0.1";
1424 src = fetchurl {
1425 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
1426 sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
1427 };
1428 };
1429 "supports-color-2.0.0" = {
1430 name = "supports-color";
1431 packageName = "supports-color";
1432 version = "2.0.0";
1433 src = fetchurl {
1434 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
1435 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
1436 };
1437 };
1438 "supports-color-4.5.0" = {
1439 name = "supports-color";
1440 packageName = "supports-color";
1441 version = "4.5.0";
1442 src = fetchurl {
1443 url = "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz";
1444 sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b";
1445 };
1446 };
1447 "table-3.8.3" = {
1448 name = "table";
1449 packageName = "table";
1450 version = "3.8.3";
1451 src = fetchurl {
1452 url = "https://registry.npmjs.org/table/-/table-3.8.3.tgz";
1453 sha1 = "2bbc542f0fda9861a755d3947fefd8b3f513855f";
1454 };
1455 };
1456 "text-table-0.2.0" = {
1457 name = "text-table";
1458 packageName = "text-table";
1459 version = "0.2.0";
1460 src = fetchurl {
1461 url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
1462 sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
1463 };
1464 };
1465 "through-2.3.8" = {
1466 name = "through";
1467 packageName = "through";
1468 version = "2.3.8";
1469 src = fetchurl {
1470 url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
1471 sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
1472 };
1473 };
1474 "type-check-0.3.2" = {
1475 name = "type-check";
1476 packageName = "type-check";
1477 version = "0.3.2";
1478 src = fetchurl {
1479 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1480 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1481 };
1482 };
1483 "typedarray-0.0.6" = {
1484 name = "typedarray";
1485 packageName = "typedarray";
1486 version = "0.0.6";
1487 src = fetchurl {
1488 url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
1489 sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
1490 };
1491 };
1492 "user-home-2.0.0" = {
1493 name = "user-home";
1494 packageName = "user-home";
1495 version = "2.0.0";
1496 src = fetchurl {
1497 url = "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz";
1498 sha1 = "9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f";
1499 };
1500 };
1501 "util-deprecate-1.0.2" = {
1502 name = "util-deprecate";
1503 packageName = "util-deprecate";
1504 version = "1.0.2";
1505 src = fetchurl {
1506 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
1507 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
1508 };
1509 };
1510 "vorpal-1.12.0" = {
1511 name = "vorpal";
1512 packageName = "vorpal";
1513 version = "1.12.0";
1514 src = fetchurl {
1515 url = "https://registry.npmjs.org/vorpal/-/vorpal-1.12.0.tgz";
1516 sha1 = "4be7b2a4e48f8fcfc9cf3648c419d311c522159d";
1517 };
1518 };
1519 "wordwrap-1.0.0" = {
1520 name = "wordwrap";
1521 packageName = "wordwrap";
1522 version = "1.0.0";
1523 src = fetchurl {
1524 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1525 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1526 };
1527 };
1528 "wrap-ansi-2.1.0" = {
1529 name = "wrap-ansi";
1530 packageName = "wrap-ansi";
1531 version = "2.1.0";
1532 src = fetchurl {
1533 url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
1534 sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85";
1535 };
1536 };
1537 "wrappy-1.0.2" = {
1538 name = "wrappy";
1539 packageName = "wrappy";
1540 version = "1.0.2";
1541 src = fetchurl {
1542 url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
1543 sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
1544 };
1545 };
1546 "write-0.2.1" = {
1547 name = "write";
1548 packageName = "write";
1549 version = "0.2.1";
1550 src = fetchurl {
1551 url = "https://registry.npmjs.org/write/-/write-0.2.1.tgz";
1552 sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757";
1553 };
1554 };
1555 "xmlhttprequest-1.8.0" = {
1556 name = "xmlhttprequest";
1557 packageName = "xmlhttprequest";
1558 version = "1.8.0";
1559 src = fetchurl {
1560 url = "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz";
1561 sha1 = "67fe075c5c24fef39f9d65f5f7b7fe75171968fc";
1562 };
1563 };
1564 "xtend-4.0.1" = {
1565 name = "xtend";
1566 packageName = "xtend";
1567 version = "4.0.1";
1568 src = fetchurl {
1569 url = "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz";
1570 sha1 = "a5c6d532be656e23db820efb943a1f04998d63af";
1571 };
1572 };
1573 };
1574 args = {
1575 name = "iota-cli-app";
1576 packageName = "iota-cli-app";
1577 version = "1.0.8";
1578 inherit src;
1579 dependencies = [
1580 sources."acorn-5.2.1"
1581 (sources."acorn-jsx-3.0.1" // {
1582 dependencies = [
1583 sources."acorn-3.3.0"
1584 ];
1585 })
1586 sources."ajv-4.11.8"
1587 sources."ajv-keywords-1.5.1"
1588 sources."ansi-escapes-1.4.0"
1589 sources."ansi-regex-2.1.1"
1590 sources."ansi-styles-3.2.0"
1591 sources."argparse-1.0.9"
1592 sources."array-union-1.0.2"
1593 sources."array-uniq-1.0.3"
1594 sources."arrify-1.0.1"
1595 sources."async-2.6.0"
1596 (sources."babel-code-frame-6.26.0" // {
1597 dependencies = [
1598 sources."ansi-styles-2.2.1"
1599 sources."chalk-1.1.3"
1600 sources."supports-color-2.0.0"
1601 ];
1602 })
1603 sources."babel-polyfill-6.26.0"
1604 (sources."babel-runtime-6.26.0" // {
1605 dependencies = [
1606 sources."regenerator-runtime-0.11.1"
1607 ];
1608 })
1609 sources."balanced-match-1.0.0"
1610 sources."bignumber.js-4.1.0"
1611 sources."bluebird-3.5.1"
1612 sources."brace-expansion-1.1.8"
1613 sources."caller-path-0.1.0"
1614 sources."callsites-0.2.0"
1615 sources."chalk-2.3.0"
1616 sources."circular-json-0.3.3"
1617 sources."cli-cursor-1.0.2"
1618 sources."cli-width-2.2.0"
1619 sources."co-4.6.0"
1620 sources."code-point-at-1.1.0"
1621 sources."color-convert-1.9.1"
1622 sources."color-name-1.1.3"
1623 sources."colors-1.1.2"
1624 sources."concat-map-0.0.1"
1625 sources."concat-stream-1.6.0"
1626 sources."core-js-2.5.3"
1627 sources."core-util-is-1.0.2"
1628 sources."crypto-js-3.1.9-1"
1629 sources."d-1.0.0"
1630 sources."debug-2.6.9"
1631 sources."deep-is-0.1.3"
1632 sources."del-2.2.2"
1633 sources."doctrine-2.0.2"
1634 sources."encoding-0.1.12"
1635 sources."es5-ext-0.10.37"
1636 sources."es6-iterator-2.0.3"
1637 sources."es6-map-0.1.5"
1638 sources."es6-set-0.1.5"
1639 sources."es6-symbol-3.1.1"
1640 sources."es6-weak-map-2.0.2"
1641 sources."escape-string-regexp-1.0.5"
1642 sources."escope-3.6.0"
1643 (sources."eslint-3.19.0" // {
1644 dependencies = [
1645 sources."ansi-styles-2.2.1"
1646 sources."chalk-1.1.3"
1647 sources."supports-color-2.0.0"
1648 ];
1649 })
1650 sources."espree-3.5.2"
1651 sources."esprima-4.0.0"
1652 sources."esquery-1.0.0"
1653 sources."esrecurse-4.2.0"
1654 sources."estraverse-4.2.0"
1655 sources."esutils-2.0.2"
1656 sources."event-emitter-0.3.5"
1657 sources."exit-hook-1.1.1"
1658 sources."fast-levenshtein-2.0.6"
1659 sources."figures-1.7.0"
1660 sources."file-entry-cache-2.0.0"
1661 sources."flat-cache-1.3.0"
1662 sources."fs.realpath-1.0.0"
1663 sources."generate-function-2.0.0"
1664 sources."generate-object-property-1.2.0"
1665 sources."glob-7.1.2"
1666 sources."globals-9.18.0"
1667 sources."globby-5.0.0"
1668 sources."graceful-fs-4.1.11"
1669 sources."has-ansi-2.0.0"
1670 sources."has-flag-2.0.0"
1671 sources."iconv-lite-0.4.19"
1672 sources."ignore-3.3.7"
1673 sources."imurmurhash-0.1.4"
1674 sources."in-publish-2.0.0"
1675 sources."inflight-1.0.6"
1676 sources."inherits-2.0.3"
1677 (sources."inquirer-0.12.0" // {
1678 dependencies = [
1679 sources."ansi-styles-2.2.1"
1680 sources."chalk-1.1.3"
1681 sources."supports-color-2.0.0"
1682 ];
1683 })
1684 sources."install-0.10.4"
1685 sources."interpret-1.1.0"
1686 sources."iota.lib.js-0.4.6"
1687 sources."is-fullwidth-code-point-1.0.0"
1688 sources."is-my-json-valid-2.16.1"
1689 sources."is-path-cwd-1.0.0"
1690 sources."is-path-in-cwd-1.0.0"
1691 sources."is-path-inside-1.0.1"
1692 sources."is-property-1.0.2"
1693 sources."is-resolvable-1.0.1"
1694 sources."is-stream-1.1.0"
1695 sources."isarray-1.0.0"
1696 sources."js-tokens-3.0.2"
1697 sources."js-yaml-3.10.0"
1698 sources."json-stable-stringify-1.0.1"
1699 sources."json5-0.5.1"
1700 sources."jsonify-0.0.0"
1701 sources."jsonpointer-4.0.1"
1702 sources."left-pad-1.2.0"
1703 sources."levn-0.3.0"
1704 sources."lodash-4.17.4"
1705 sources."log-update-1.0.2"
1706 sources."minimatch-3.0.4"
1707 sources."minimist-0.0.8"
1708 sources."mkdirp-0.5.1"
1709 sources."moment-2.20.1"
1710 sources."ms-2.0.0"
1711 sources."mute-stream-0.0.5"
1712 sources."natural-compare-1.4.0"
1713 sources."node-fetch-1.7.3"
1714 sources."node-localstorage-0.6.0"
1715 sources."number-is-nan-1.0.1"
1716 sources."object-assign-4.1.1"
1717 sources."once-1.4.0"
1718 sources."onetime-1.1.0"
1719 sources."optionator-0.8.2"
1720 sources."os-homedir-1.0.2"
1721 sources."path-is-absolute-1.0.1"
1722 sources."path-is-inside-1.0.2"
1723 sources."path-parse-1.0.5"
1724 sources."pify-2.3.0"
1725 sources."pinkie-2.0.4"
1726 sources."pinkie-promise-2.0.1"
1727 sources."pluralize-1.2.1"
1728 sources."prelude-ls-1.1.2"
1729 (sources."prettyjson-1.2.1" // {
1730 dependencies = [
1731 sources."minimist-1.2.0"
1732 ];
1733 })
1734 sources."process-nextick-args-1.0.7"
1735 sources."progress-1.1.8"
1736 sources."readable-stream-2.3.3"
1737 sources."readline2-1.0.1"
1738 sources."rechoir-0.6.2"
1739 sources."regenerator-runtime-0.10.5"
1740 sources."require-uncached-1.0.3"
1741 sources."resolve-1.5.0"
1742 sources."resolve-from-1.0.1"
1743 sources."restore-cursor-1.0.1"
1744 sources."rimraf-2.6.2"
1745 sources."run-async-0.1.0"
1746 sources."rx-lite-3.1.2"
1747 sources."safe-buffer-5.1.1"
1748 sources."shelljs-0.7.8"
1749 sources."slice-ansi-0.0.4"
1750 sources."sprintf-js-1.0.3"
1751 sources."string-width-1.0.2"
1752 sources."string_decoder-1.0.3"
1753 sources."strip-ansi-3.0.1"
1754 sources."strip-bom-3.0.0"
1755 sources."strip-json-comments-2.0.1"
1756 sources."supports-color-4.5.0"
1757 (sources."table-3.8.3" // {
1758 dependencies = [
1759 sources."ansi-regex-3.0.0"
1760 sources."ansi-styles-2.2.1"
1761 (sources."chalk-1.1.3" // {
1762 dependencies = [
1763 sources."ansi-regex-2.1.1"
1764 sources."strip-ansi-3.0.1"
1765 ];
1766 })
1767 sources."is-fullwidth-code-point-2.0.0"
1768 sources."string-width-2.1.1"
1769 sources."strip-ansi-4.0.0"
1770 sources."supports-color-2.0.0"
1771 ];
1772 })
1773 sources."text-table-0.2.0"
1774 sources."through-2.3.8"
1775 sources."type-check-0.3.2"
1776 sources."typedarray-0.0.6"
1777 sources."user-home-2.0.0"
1778 sources."util-deprecate-1.0.2"
1779 (sources."vorpal-1.12.0" // {
1780 dependencies = [
1781 sources."ansi-styles-2.2.1"
1782 sources."chalk-1.1.3"
1783 sources."cli-width-1.1.1"
1784 (sources."inquirer-0.11.0" // {
1785 dependencies = [
1786 sources."lodash-3.10.1"
1787 ];
1788 })
1789 sources."minimist-1.2.0"
1790 sources."supports-color-2.0.0"
1791 ];
1792 })
1793 sources."wordwrap-1.0.0"
1794 sources."wrap-ansi-2.1.0"
1795 sources."wrappy-1.0.2"
1796 sources."write-0.2.1"
1797 sources."xmlhttprequest-1.8.0"
1798 sources."xtend-4.0.1"
1799 ];
1800 buildInputs = globalBuildInputs;
1801 meta = {
1802 description = "IOTA CLI";
1803 homepage = "https://github.com/iotaledger/cli-app#readme";
1804 license = "MIT";
1805 };
1806 production = true;
1807 bypassCache = true;
1808 };
1809in
1810{
1811 tarball = nodeEnv.buildNodeSourceDist args;
1812 package = nodeEnv.buildNodePackage args;
1813 shell = nodeEnv.buildNodeShell args;
1814}
diff --git a/flakes/mypackages/pkgs/crypto/sia/default.nix b/flakes/mypackages/pkgs/crypto/sia/default.nix
new file mode 100644
index 0000000..27e4014
--- /dev/null
+++ b/flakes/mypackages/pkgs/crypto/sia/default.nix
@@ -0,0 +1,21 @@
1{ stdenv, fetchzip, autoPatchelfHook }:
2stdenv.mkDerivation rec {
3 version = "v1.4.3";
4 name = "Sia-${version}";
5 src = fetchzip {
6 url = "https://sia.tech/static/releases/${name}-linux-amd64.zip";
7 sha256 = "1i67zjzk4cwfzb1dxaxc1m41fa44sz1d0mf6dmlyg6pm4cyqizki";
8 };
9 phases = "installPhase fixupPhase";
10 nativeBuildInputs = [
11 autoPatchelfHook
12 ];
13 installPhase = ''
14 mkdir -p $out/share/doc
15 mkdir -p $out/bin
16 mkdir -p $out/share/sia
17 cp -a $src/doc $out/share/doc/sia
18 cp -a $src/LICENSE $src/README.md $out/share/sia
19 cp -a $src/{siac,siad} $out/bin
20 '';
21}
diff --git a/flakes/mypackages/pkgs/default.nix b/flakes/mypackages/pkgs/default.nix
new file mode 100644
index 0000000..cd6b1a1
--- /dev/null
+++ b/flakes/mypackages/pkgs/default.nix
@@ -0,0 +1,64 @@
1{ pkgs, mylibs, sources }:
2let
3 inherit (pkgs) callPackage python2Packages python38Packages python38;
4 composerEnv = callPackage ./composer-env {};
5 webapps = import ./webapps { inherit callPackage mylibs composerEnv sources; };
6in
7rec {
8 bash-libs = callPackage ./bash-libs {};
9 boinctui = callPackage ./boinctui {};
10 cnagios = callPackage ./cnagios {};
11 commento = callPackage ./commento {};
12 flrn = callPackage ./flrn { slang = callPackage ./slang_1 {}; };
13 fluentd = callPackage ./fluentd {};
14 fluent-bit = callPackage ./fluent-bit {};
15 genius = callPackage ./genius {};
16 ical2html = callPackage ./ical2html {};
17 mtop = callPackage ./mtop {};
18 muttprint = callPackage ./muttprint {};
19 mutt-ics = callPackage ./mutt-ics {};
20 nagios-cli = callPackage ./nagios-cli {};
21 nagnu = callPackage ./nagnu {};
22 nb = callPackage ./nb {};
23 note = callPackage ./note {};
24 notmuch-python2 = callPackage ./notmuch/notmuch-python { pythonPackages = python2Packages; };
25 notmuch-python3 = callPackage ./notmuch/notmuch-python { pythonPackages = python38Packages; };
26 notmuch-vim = callPackage ./notmuch/notmuch-vim {};
27 perl-ical-parser-html = callPackage ./perl-ical-parser-html {};
28 pgpid = callPackage ./pgpid { inherit bash-libs; };
29 predixy = callPackage ./predixy {};
30 riotkit-do = callPackage ./riotkit-do {};
31 rrsync_sudo = callPackage ./rrsync_sudo {};
32 signaldctl = callPackage ./signaldctl {};
33 telegram-history-dump = callPackage ./telegram-history-dump {};
34 telegramircd = callPackage ./telegramircd { telethon = callPackage ./telethon_sync {}; };
35 terminal-velocity = callPackage ./terminal-velocity {};
36 tiv = callPackage ./tiv {};
37 twins = callPackage ./twins {};
38 upcmd = callPackage ./upcmd {};
39 umami = callPackage ./umami {};
40 unicodeDoc = callPackage ./unicode {};
41 shaarli = callPackage ./shaarli {};
42
43 cardano = callPackage ./crypto/cardano {};
44 cardano-cli = callPackage ./crypto/cardano-cli {};
45 iota-cli-app = callPackage ./crypto/iota-cli-app { inherit mylibs; };
46 sia = callPackage ./crypto/sia {};
47
48 proftpd = callPackage ./proftpd {};
49 pure-ftpd = callPackage ./pure-ftpd {};
50
51 inherit composerEnv;
52
53 monitoring-plugins = callPackage ./monitoring-plugins {};
54 naemon = callPackage ./naemon { inherit monitoring-plugins; };
55 naemon-livestatus = callPackage ./naemon-livestatus { inherit naemon; };
56 gearmand = callPackage ./gearmand {};
57 status-engine-module = callPackage ./status_engine/module.nix { inherit gearmand; };
58 status-engine-worker = callPackage ./status_engine/worker.nix { inherit composerEnv gearmand; };
59 status-engine-interface = callPackage ./status_engine/interface.nix { inherit composerEnv; };
60
61 dovecot_deleted-to-trash = callPackage ./dovecot/plugins/deleted_to_trash {};
62}
63# lib.mapAttrs' produces infinite recursion
64// (builtins.listToAttrs (builtins.map (n: { name = "webapps-${n}"; value = webapps."${n}"; }) (builtins.attrNames webapps)))
diff --git a/flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/default.nix b/flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/default.nix
new file mode 100644
index 0000000..f270032
--- /dev/null
+++ b/flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/default.nix
@@ -0,0 +1,30 @@
1{ stdenv, fetchurl, dovecot, fetchFromGitHub, fetchpatch }:
2
3stdenv.mkDerivation ({
4 pname = "dovecot-deleted_to_trash";
5 version = "81b0754-master";
6 src = fetchFromGitHub {
7 owner = "lexbrugman";
8 repo = "dovecot_deleted_to_trash";
9 rev = "81b07549accfc36467bf8527a53c295c7a02dbb9";
10 sha256 = "1b3k31g898s4fa0a9l4kvjsdyds772waaay84sjdxv09jw6mqs0f";
11 fetchSubmodules = true;
12 };
13 buildInputs = [ dovecot ];
14 patches = [
15 (fetchpatch {
16 name = "fix-dovecot-2.3.diff";
17 url = "https://github.com/lexbrugman/dovecot_deleted_to_trash/commit/c52a3799a96104a603ade33404ef6aa1db647b2f.diff";
18 sha256 = "0pld3rdcjp9df2qxbp807k6v4f48lyk0xy5q508ypa57d559y6dq";
19 })
20 ./fix_mbox.patch
21 ];
22 preConfigure = ''
23 substituteInPlace Makefile --replace \
24 "/usr/include/dovecot" \
25 "${dovecot}/include/dovecot"
26 substituteInPlace Makefile --replace \
27 "/usr/lib/dovecot/modules" \
28 "$out/lib/dovecot"
29 '';
30})
diff --git a/flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch b/flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch
new file mode 100644
index 0000000..0060fb4
--- /dev/null
+++ b/flakes/mypackages/pkgs/dovecot/plugins/deleted_to_trash/fix_mbox.patch
@@ -0,0 +1,12 @@
1diff --git a/src/deleted-to-trash-plugin.c b/src/deleted-to-trash-plugin.c
2index bb4cc78..66bad53 100644
3--- a/src/deleted-to-trash-plugin.c
4+++ b/src/deleted-to-trash-plugin.c
5@@ -82,6 +82,7 @@ static struct mailbox *mailbox_open_or_create(struct mailbox_list *list, const c
6 *error_r = mail_storage_get_last_error(mailbox_get_storage(box), &error);
7 if (error != MAIL_ERROR_NOTFOUND)
8 {
9+ i_error("%s", *error_r);
10 mailbox_free(&box);
11 return NULL;
12 }
diff --git a/flakes/mypackages/pkgs/flrn/default.nix b/flakes/mypackages/pkgs/flrn/default.nix
new file mode 100644
index 0000000..088654c
--- /dev/null
+++ b/flakes/mypackages/pkgs/flrn/default.nix
@@ -0,0 +1,22 @@
1{ stdenv, fetchFromGitHub, libetpan, openssl, autoconf, groff, slang, yacc }:
2stdenv.mkDerivation (rec {
3 version = "860d642-master";
4 pname = "flrn";
5 src = fetchFromGitHub {
6 owner = "Cigaes";
7 repo = "flrn";
8 rev = "860d642bd6389a209c8b697bd044f78d23406509";
9 sha256 = "0sqlxxpy1xg7cb2hbxcr0al46nyr6jjnns4b5i8w04z5sypa9r5c";
10 fetchSubmodules = true;
11 };
12 buildInputs = [ libetpan openssl autoconf groff slang yacc ];
13 preConfigure = ''
14 sed -i -e "s/test -e configure/false/" configure.in
15 autoconf
16 sed -i -e '/define CHECK_MAIL/d' src/flrn_config.h
17 sed -i -e '/DEFAULT_DIR_FILE/s@".flrn"@".config/flrn"@' src/flrn_config.h
18 sed -i -e '/DEFAULT_CONFIG_FILE/s@".flrnrc"@"flrnrc"@' src/flrn_config.h
19 sed -i -e '/DEFAULT_FLNEWS_FILE/s@".flnewsrc"@"flnewsrc"@' src/flrn_config.h
20 sed -i -e '/flrn_char chaine/s@18@20@' src/flrn_command.c
21 '';
22})
diff --git a/flakes/mypackages/pkgs/fluent-bit/default.nix b/flakes/mypackages/pkgs/fluent-bit/default.nix
new file mode 100644
index 0000000..390223e
--- /dev/null
+++ b/flakes/mypackages/pkgs/fluent-bit/default.nix
@@ -0,0 +1,47 @@
1{ lib, stdenv, fetchFromGitHub, cmake, flex, bison, pkg-config
2, systemd, openssl, postgresql }:
3
4stdenv.mkDerivation rec {
5 pname = "fluent-bit";
6 version = "1.8.3";
7
8 src = fetchFromGitHub {
9 owner = "fluent";
10 repo = "fluent-bit";
11 rev = "v${version}";
12 sha256 = "004x135imja67babmmpkk1jpp5xwhfa8cwg1svaas2asq6cnv77d";
13 };
14
15 nativeBuildInputs = [ cmake flex bison pkg-config postgresql ];
16
17 buildInputs = [ openssl ]
18 ++ lib.optionals stdenv.isLinux [ systemd ];
19
20 cmakeFlags = [ "-DFLB_METRICS=ON" "-DFLB_HTTP_SERVER=ON" "-DFLB_SQLDB=ON" "-DFLB_OUT_PGSQL=ON" "-DFLB_IN_SYSTEMD=ON" ];
21
22 patches = lib.optionals stdenv.isDarwin [ ./fix-luajit-darwin.patch ];
23
24 NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isGNU [
25 # _FORTIFY_SOURCE requires compiling with optimization (-O)
26 "-O"
27 # Needed due to bundled mbedtls
28 "-Wno-error=format"
29 "-Wno-error=format-truncation"
30 ];
31
32
33 outputs = [ "out" "dev" ];
34
35 postPatch = ''
36 substituteInPlace src/CMakeLists.txt \
37 --replace /lib/systemd $out/lib/systemd
38 '';
39
40 meta = with lib; {
41 description = "Log forwarder and processor, part of Fluentd ecosystem";
42 homepage = "https://fluentbit.io";
43 maintainers = with maintainers; [ samrose fpletz ];
44 license = licenses.asl20;
45 platforms = platforms.unix;
46 };
47}
diff --git a/flakes/mypackages/pkgs/fluentd/Gemfile b/flakes/mypackages/pkgs/fluentd/Gemfile
new file mode 100644
index 0000000..71486df
--- /dev/null
+++ b/flakes/mypackages/pkgs/fluentd/Gemfile
@@ -0,0 +1,3 @@
1source "https://rubygems.org"
2
3gem 'fluentd'
diff --git a/flakes/mypackages/pkgs/fluentd/Gemfile.lock b/flakes/mypackages/pkgs/fluentd/Gemfile.lock
new file mode 100644
index 0000000..3f022cf
--- /dev/null
+++ b/flakes/mypackages/pkgs/fluentd/Gemfile.lock
@@ -0,0 +1,38 @@
1GEM
2 remote: https://rubygems.org/
3 specs:
4 concurrent-ruby (1.1.9)
5 cool.io (1.7.1)
6 fluentd (1.13.3)
7 bundler
8 cool.io (>= 1.4.5, < 2.0.0)
9 http_parser.rb (>= 0.5.1, < 0.8.0)
10 msgpack (>= 1.3.1, < 2.0.0)
11 serverengine (>= 2.2.2, < 3.0.0)
12 sigdump (~> 0.2.2)
13 strptime (>= 0.2.2, < 1.0.0)
14 tzinfo (>= 1.0, < 3.0)
15 tzinfo-data (~> 1.0)
16 webrick (>= 1.4.2, < 1.8.0)
17 yajl-ruby (~> 1.0)
18 http_parser.rb (0.7.0)
19 msgpack (1.4.2)
20 serverengine (2.2.4)
21 sigdump (~> 0.2.2)
22 sigdump (0.2.4)
23 strptime (0.2.5)
24 tzinfo (2.0.4)
25 concurrent-ruby (~> 1.0)
26 tzinfo-data (1.2021.1)
27 tzinfo (>= 1.0.0)
28 webrick (1.7.0)
29 yajl-ruby (1.4.1)
30
31PLATFORMS
32 x86_64-linux
33
34DEPENDENCIES
35 fluentd
36
37BUNDLED WITH
38 2.2.20
diff --git a/flakes/mypackages/pkgs/fluentd/default.nix b/flakes/mypackages/pkgs/fluentd/default.nix
new file mode 100644
index 0000000..f6a22f0
--- /dev/null
+++ b/flakes/mypackages/pkgs/fluentd/default.nix
@@ -0,0 +1,20 @@
1{ ruby, bundlerEnv, bundlerUpdateScript, lib }:
2
3bundlerEnv {
4 inherit ruby;
5
6 pname = "fluentd";
7 gemdir = ./.;
8
9 passthru.updateScript = bundlerUpdateScript "fluentd";
10
11 copyGemFiles = true;
12
13 meta = with lib; {
14 description = "A data collector";
15 homepage = "https://www.fluentd.org/";
16 license = licenses.asl20;
17 maintainers = with maintainers; [ offline nicknovitski ];
18 platforms = platforms.unix;
19 };
20}
diff --git a/flakes/mypackages/pkgs/fluentd/gemset.nix b/flakes/mypackages/pkgs/fluentd/gemset.nix
new file mode 100644
index 0000000..8ee42b6
--- /dev/null
+++ b/flakes/mypackages/pkgs/fluentd/gemset.nix
@@ -0,0 +1,126 @@
1{
2 concurrent-ruby = {
3 groups = ["default"];
4 platforms = [];
5 source = {
6 remotes = ["https://rubygems.org"];
7 sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
8 type = "gem";
9 };
10 version = "1.1.9";
11 };
12 "cool.io" = {
13 groups = ["default"];
14 platforms = [];
15 source = {
16 remotes = ["https://rubygems.org"];
17 sha256 = "0dfq4h168wzvs9cvn2mm8648ynkl936pgjva2p8ik34p6d620537";
18 type = "gem";
19 };
20 version = "1.7.1";
21 };
22 fluentd = {
23 dependencies = ["cool.io" "http_parser.rb" "msgpack" "serverengine" "sigdump" "strptime" "tzinfo" "tzinfo-data" "webrick" "yajl-ruby"];
24 groups = ["default"];
25 platforms = [];
26 source = {
27 remotes = ["https://rubygems.org"];
28 sha256 = "12k9b9903x5fi3lqb41h20qx8s0fwx7chjldbxmyi7j1x6xdm7cv";
29 type = "gem";
30 };
31 version = "1.13.3";
32 };
33 "http_parser.rb" = {
34 groups = ["default"];
35 platforms = [];
36 source = {
37 remotes = ["https://rubygems.org"];
38 sha256 = "1xha614fi6l04wryqjj1xmpalzlmhb6lb9qmlh8mmliycdhvcshp";
39 type = "gem";
40 };
41 version = "0.7.0";
42 };
43 msgpack = {
44 groups = ["default"];
45 platforms = [];
46 source = {
47 remotes = ["https://rubygems.org"];
48 sha256 = "06iajjyhx0rvpn4yr3h1hc4w4w3k59bdmfhxnjzzh76wsrdxxrc6";
49 type = "gem";
50 };
51 version = "1.4.2";
52 };
53 serverengine = {
54 dependencies = ["sigdump"];
55 groups = ["default"];
56 platforms = [];
57 source = {
58 remotes = ["https://rubygems.org"];
59 sha256 = "1gzhggx40a53mnv4f32xag4h6ai0s5m3w06s59b0h6ih7rqvwns9";
60 type = "gem";
61 };
62 version = "2.2.4";
63 };
64 sigdump = {
65 groups = ["default"];
66 platforms = [];
67 source = {
68 remotes = ["https://rubygems.org"];
69 sha256 = "1mqf06iw7rymv54y7rgbmfi6ppddgjjmxzi3hrw658n1amp1gwhb";
70 type = "gem";
71 };
72 version = "0.2.4";
73 };
74 strptime = {
75 groups = ["default"];
76 platforms = [];
77 source = {
78 remotes = ["https://rubygems.org"];
79 sha256 = "1ycs0xz58kymf7yp4h56f0nid2z7g3s18dj7pa3p790pfzzpgvcq";
80 type = "gem";
81 };
82 version = "0.2.5";
83 };
84 tzinfo = {
85 dependencies = ["concurrent-ruby"];
86 groups = ["default"];
87 platforms = [];
88 source = {
89 remotes = ["https://rubygems.org"];
90 sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
91 type = "gem";
92 };
93 version = "2.0.4";
94 };
95 tzinfo-data = {
96 dependencies = ["tzinfo"];
97 groups = ["default"];
98 platforms = [];
99 source = {
100 remotes = ["https://rubygems.org"];
101 sha256 = "0ik16lnsyr2739jzwl4r5sz8q639lqw8f9s68iszwhm2pcq8p4w2";
102 type = "gem";
103 };
104 version = "1.2021.1";
105 };
106 webrick = {
107 groups = ["default"];
108 platforms = [];
109 source = {
110 remotes = ["https://rubygems.org"];
111 sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
112 type = "gem";
113 };
114 version = "1.7.0";
115 };
116 yajl-ruby = {
117 groups = ["default"];
118 platforms = [];
119 source = {
120 remotes = ["https://rubygems.org"];
121 sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
122 type = "gem";
123 };
124 version = "1.4.1";
125 };
126} \ No newline at end of file
diff --git a/flakes/mypackages/pkgs/gearmand/default.nix b/flakes/mypackages/pkgs/gearmand/default.nix
new file mode 100644
index 0000000..14ef8c2
--- /dev/null
+++ b/flakes/mypackages/pkgs/gearmand/default.nix
@@ -0,0 +1,16 @@
1{ stdenv, fetchurl, boost, gperf, libevent, libmysqlclient, libuuid, sqlite, hiredis, postgresql, openssl }:
2stdenv.mkDerivation rec {
3 pname = "gearmand";
4 version = "1.1.20";
5 src = fetchurl {
6 url = "https://github.com/gearman/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
7 sha256 = "sha256-L2D6IH3NcwWV75ap3DyomVZnB8gXYQazxj7PR+3BR6Y=";
8 };
9 buildInputs = [ boost gperf libevent openssl libmysqlclient libuuid sqlite hiredis postgresql ];
10 configureFlags = [
11 "--with-boost=${boost.dev}"
12 "--with-boost-libdir=${boost}/lib"
13 "--with-openssl=${openssl.dev}"
14 "--enable-ssl"
15 ];
16}
diff --git a/flakes/mypackages/pkgs/genius/default.nix b/flakes/mypackages/pkgs/genius/default.nix
new file mode 100644
index 0000000..54a7957
--- /dev/null
+++ b/flakes/mypackages/pkgs/genius/default.nix
@@ -0,0 +1,19 @@
1{ stdenv, fetchurl, mpfr, glib, hicolor-icon-theme, gtk2, intltool, gnome-doc-utils, python38, gnome2, autoconf, automake, libtool, ncurses, readline, pkg-config, }:
2stdenv.mkDerivation rec {
3 name = "genius-${version}";
4 version = "1.0.24";
5 src = fetchurl {
6 url = "https://download.gnome.org/sources/genius/1.0/${name}.tar.xz";
7 sha256 = "772f95f6ae4716d39bb180cd50e8b6b9b074107bee0cd083b825e1e6e55916b6";
8 };
9 buildInputs = [
10 mpfr glib hicolor-icon-theme gtk2 intltool gnome-doc-utils python38 gnome2.gtksourceview
11 autoconf automake libtool ncurses readline pkg-config
12 ];
13 preConfigure = ''
14 autoreconf -fi
15 '';
16 preBuild = ''
17 sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
18 '';
19}
diff --git a/flakes/mypackages/pkgs/ical2html/default.nix b/flakes/mypackages/pkgs/ical2html/default.nix
new file mode 100644
index 0000000..62e0b95
--- /dev/null
+++ b/flakes/mypackages/pkgs/ical2html/default.nix
@@ -0,0 +1,11 @@
1{ stdenv, fetchurl, libical }:
2stdenv.mkDerivation rec {
3 pname = "ical2html";
4 version = "3.0";
5 src= fetchurl {
6 url = "https://www.w3.org/Tools/Ical2html/${pname}-${version}.tar.gz";
7 sha256 = "sha256-1QhE04cmohhPgZ3I8jz28Z7ZnSJkH2aPnRse5/pReEA=";
8 };
9 buildInputs = [ libical ];
10
11}
diff --git a/flakes/mypackages/pkgs/monitoring-plugins/default.nix b/flakes/mypackages/pkgs/monitoring-plugins/default.nix
new file mode 100644
index 0000000..b09d7a4
--- /dev/null
+++ b/flakes/mypackages/pkgs/monitoring-plugins/default.nix
@@ -0,0 +1,33 @@
1{ stdenv, iputils, fetchpatch, fetchurl, file, hostname, perl, openssl,
2 bind, openldap, procps, postfix,
3 wrapperDir ? "/run/wrappers/bin"
4}:
5stdenv.mkDerivation rec {
6 pname = "monitoring-plugins";
7 version = "2.2";
8 name = "${pname}-${version}";
9
10 src = fetchurl {
11 url = "https://www.monitoring-plugins.org/download/${name}.tar.gz";
12 sha256 = "0r9nvnk64nv7k8w352n99lw4p92pycxd9wlga9zyzjx9027m6si9";
13 };
14
15 patches = [
16 (fetchpatch {
17 name = "mariadb.patch";
18 url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/0001-mariadb.patch?h=packages/monitoring-plugins";
19 sha256 = "0jf6fqkyzag66rid92m7asnr2dp8rr8kn4zjvhqg0mqvf8imppky";
20 })
21 ];
22
23 # ping needs CAP_NET_RAW capability which is set only in the wrappers namespace
24 configurePhase = ''
25 ./configure --disable-static --disable-dependency-tracking \
26 --prefix=$out \
27 --with-ping-command="${wrapperDir}/ping -4 -n -U -w %d -c %d %s" \
28 --with-ping6-command="${wrapperDir}/ping -6 -n -U -w %d -c %d %s" \
29 --with-sudo-command="${wrapperDir}/sudo"
30 '';
31
32 buildInputs = [ perl file hostname iputils openssl openldap procps bind.dnsutils postfix ];
33}
diff --git a/flakes/mypackages/pkgs/mtop/default.nix b/flakes/mypackages/pkgs/mtop/default.nix
new file mode 100644
index 0000000..ca9be2c
--- /dev/null
+++ b/flakes/mypackages/pkgs/mtop/default.nix
@@ -0,0 +1,24 @@
1{ fetchurl, perlPackages, lib }:
2perlPackages.buildPerlPackage rec {
3 pname = "mtop";
4 version = "0.6.6";
5 src = fetchurl {
6 url = "http://downloads.sourceforge.net/project/mtop/mtop/v${version}/mtop-${version}.tar.gz";
7 sha256 = "0x0x5300b1j9i0xxk8rsrki0pspyzj2vylhzv8qg3l6j26aw0zrf";
8 };
9 outputs = ["out"];
10 buildInputs = with perlPackages; [ DBI DBDmysql Curses ];
11
12 postInstall = ''
13 cd "$out"
14 preConfigure || true
15 '';
16
17 meta = with lib; {
18 description = "MySQL top (monitor and examine slow queries)";
19 homepage = http://mtop.sourceforge.net/;
20 license = licenses.gpl3;
21 maintainers = with maintainers; [ { name = "Marc Prewitt"; email = "mprewitt@chelsea.net"; } ];
22 platforms = platforms.unix;
23 };
24}
diff --git a/flakes/mypackages/pkgs/mutt-ics/default.nix b/flakes/mypackages/pkgs/mutt-ics/default.nix
new file mode 100644
index 0000000..2d50475
--- /dev/null
+++ b/flakes/mypackages/pkgs/mutt-ics/default.nix
@@ -0,0 +1,15 @@
1{ python3Packages, fetchFromGitHub }:
2with python3Packages;
3buildPythonApplication (rec {
4 version = "d291187-master";
5 pname = "mutt-ics";
6 name = "${pname}-${version}";
7 src = fetchFromGitHub {
8 owner = "dmedvinsky";
9 repo = "mutt-ics";
10 rev = "d29118788f291f67d34fefa6eda9f95846a2fe34";
11 sha256 = "0kqzngsvzjq5gpf60jhfmb2xzjznvk172khf4dlcb72n3ak4rb92";
12 fetchSubmodules = true;
13 };
14 propagatedBuildInputs = [ icalendar ];
15})
diff --git a/flakes/mypackages/pkgs/muttprint/0.73-4.diff.gz b/flakes/mypackages/pkgs/muttprint/0.73-4.diff.gz
new file mode 100644
index 0000000..c4f3cef
--- /dev/null
+++ b/flakes/mypackages/pkgs/muttprint/0.73-4.diff.gz
Binary files differ
diff --git a/flakes/mypackages/pkgs/muttprint/default.nix b/flakes/mypackages/pkgs/muttprint/default.nix
new file mode 100644
index 0000000..0863a7b
--- /dev/null
+++ b/flakes/mypackages/pkgs/muttprint/default.nix
@@ -0,0 +1,44 @@
1{ stdenv, fetchurl, lib, psutils, dialog, texlive, makeWrapper, automake, autoconf, imagemagick, ghostscript, perl, perlPackages }:
2stdenv.mkDerivation rec {
3 name = "muttprint-${version}";
4 version = "0.73";
5 src = fetchurl {
6 url = "http://downloads.sf.net/muttprint/${name}.tar.gz";
7 sha256 = "1dny4niyibfgazwlzfcnb37jy6k140rs6baaj629z12rmahfdavw";
8 };
9 patches = [
10 ./0.73-4.diff.gz
11 ./regex.patch
12 ./two_edge.patch
13 ];
14 preConfigure = ''
15 aclocal
16 automake --add-missing --copy
17 autoconf
18 '';
19 preBuild = ''
20 cd pics
21 convert -flop BabyTuX.eps BabyTuX.eps
22 for i in BabyTuX_color.eps BabyTuX.eps Debian_color.eps \
23 Debian.eps Gentoo.eps Gentoo_color.eps ; do
24 convert $i $(basename $i .eps).png
25 done
26 convert penguin.eps penguin.jpg
27 cd ..
28 '';
29 postInstall = ''
30 perlFlags=
31 for i in $(IFS=:; echo $PERL5LIB); do
32 perlFlags="$perlFlags -I$i"
33 done
34
35 sed -i "$out/bin/muttprint" -e "s|^#\!\(.*[ /]perl.*\)$|#\!\1$perlFlags|"
36 sed -i "$out/bin/muttprint" -e "s|ENV{HOME}/.muttprintrc|ENV{XDG_CONFIG_HOME}/muttprint/muttprintrc|"
37
38 wrapProgram $out/bin/muttprint \
39 --prefix PATH : ${lib.makeBinPath [ psutils dialog
40 (texlive.combine { inherit (texlive) scheme-basic utopia fancyvrb lastpage marvosym ucs cm-super; }) ]}
41 '';
42 buildInputs = [ makeWrapper automake autoconf imagemagick ghostscript perl ] ++
43 (with perlPackages; [ TimeDate FileWhich TextIconv ]);
44}
diff --git a/flakes/mypackages/pkgs/muttprint/regex.patch b/flakes/mypackages/pkgs/muttprint/regex.patch
new file mode 100644
index 0000000..e99c4a2
--- /dev/null
+++ b/flakes/mypackages/pkgs/muttprint/regex.patch
@@ -0,0 +1,11 @@
1--- a/muttprint 2015-07-21 11:18:04.219578426 +1200
2+++ b/muttprint 2015-07-21 11:18:53.906243779 +1200
3@@ -1635,7 +1635,7 @@
4 open (AUX, "$auxfile") or fatalError "Could not open $auxfile:\n$!";
5
6 while (<AUX>) {
7- ($numberOfPages) = /\\newlabel{LastPage}{{}{(\d+)}}/;
8+ ($numberOfPages) = /\\newlabel\{LastPage}\{\{}\{(\d+)}}/;
9 }
10
11 close AUX or fatalError "Could not close $auxfile:\n$!";
diff --git a/flakes/mypackages/pkgs/muttprint/two_edge.patch b/flakes/mypackages/pkgs/muttprint/two_edge.patch
new file mode 100644
index 0000000..4a7290d
--- /dev/null
+++ b/flakes/mypackages/pkgs/muttprint/two_edge.patch
@@ -0,0 +1,19 @@
1--- a/muttprint 2016-05-05 13:48:50.515950744 +1200
2+++ b/muttprint 2016-05-05 13:52:10.722623902 +1200
3@@ -643,14 +643,14 @@
4 if ($Config{PAPERSAVE} eq "on") {
5 if ($useCups) {
6 $Config{PRINT_COMMAND} =~
7- s/\$CUPS_OPTIONS/ -o sides=two-sided-long-edge \$CUPS_OPTIONS/;
8+ s/\$CUPS_OPTIONS/ -o sides=two-sided-short-edge \$CUPS_OPTIONS/;
9 } else { # no cups
10 modifyPS("landscape");
11 }
12 } else { # no papersave
13 if ($useCups) {
14 $Config{PRINT_COMMAND} =~
15- s/\$CUPS_OPTIONS/ -o sides=two-sided-short-edge \$CUPS_OPTIONS/;
16+ s/\$CUPS_OPTIONS/ -o sides=two-sided-long-edge \$CUPS_OPTIONS/;
17 } else { # no cups
18 modifyPS("portrait");
19 }
diff --git a/flakes/mypackages/pkgs/naemon-livestatus/default.nix b/flakes/mypackages/pkgs/naemon-livestatus/default.nix
new file mode 100644
index 0000000..623230a
--- /dev/null
+++ b/flakes/mypackages/pkgs/naemon-livestatus/default.nix
@@ -0,0 +1,32 @@
1{ stdenv, fetchFromGitHub, autoconf, automake,
2 libtool, pkg-config, naemon,
3 varDir ? "/var/lib/naemon",
4 etcDir ? "/etc/naemon"
5}:
6stdenv.mkDerivation ({
7 pname = "naemon-livestatus";
8 version = "33dbcfe-master";
9 src = fetchFromGitHub {
10 owner = "naemon";
11 repo = "naemon-livestatus";
12 rev = "33dbcfe18e42158f25c27cff95a1e07b73be53b0";
13 sha256 = "16jk0c6pwr7ck0g6s12hj6czbhgdr7c7f74zzsp5279af86y8fd6";
14 fetchSubmodules = true;
15 };
16 preConfigure = ''
17 ./autogen.sh || true
18 '';
19
20 configureFlags = [
21 "--localstatedir=${varDir}"
22 "--sysconfdir=${etcDir}"
23 ];
24
25 preInstall = ''
26 substituteInPlace Makefile --replace \
27 '@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am' \
28 '@$(MAKE) $(AM_MAKEFLAGS) install-exec-am'
29 '';
30
31 buildInputs = [ autoconf automake libtool pkg-config naemon ];
32})
diff --git a/flakes/mypackages/pkgs/naemon/default.nix b/flakes/mypackages/pkgs/naemon/default.nix
new file mode 100644
index 0000000..2a29bdc
--- /dev/null
+++ b/flakes/mypackages/pkgs/naemon/default.nix
@@ -0,0 +1,44 @@
1{ stdenv, fetchFromGitHub, help2man, monitoring-plugins, autoconf, automake,
2 libtool, glib, pkg-config, gperf,
3 varDir ? "/var/lib/naemon",
4 etcDir ? "/etc/naemon",
5 cacheDir ? "/var/cache/naemon",
6 logDir ? "/var/log/naemon",
7 runDir ? "/run/naemon",
8 user ? "naemon",
9 group ? "naemon"
10}:
11stdenv.mkDerivation ({
12 pname = "naemon";
13 version = "d7ac1c8-master";
14 src = fetchFromGitHub {
15 owner = "naemon";
16 repo = "naemon-core";
17 rev = "d7ac1c824e01dbb1c4a6bd0550b324e7cf165d54";
18 sha256 = "003grwciplnqfn9jh2km2pm6xxp8fxvmwihg3vmch8f0vfwcmv1m";
19 fetchSubmodules = true;
20 };
21 passthru.status_engine_version = "1-1-0";
22 preConfigure = ''
23 ./autogen.sh || true
24 '';
25
26 configureFlags = [
27 "--localstatedir=${varDir}"
28 "--sysconfdir=${etcDir}"
29 "--with-pkgconfdir=${etcDir}"
30 "--with-pluginsdir=${monitoring-plugins}/libexec"
31 "--with-tempdir=${cacheDir}"
32 "--with-checkresultdir=${cacheDir}/checkresults"
33 "--with-logdir=${logDir}"
34 "--with-naemon-user=${user}"
35 "--with-naemon-group=${group}"
36 "--with-lockfile=${runDir}/naemon.pid"
37 ];
38
39 preInstall = ''
40 substituteInPlace Makefile --replace '$(MAKE) $(AM_MAKEFLAGS) install-exec-hook' ""
41 '';
42
43 buildInputs = [ autoconf automake help2man libtool glib pkg-config gperf ];
44})
diff --git a/flakes/mypackages/pkgs/nagios-cli/default.nix b/flakes/mypackages/pkgs/nagios-cli/default.nix
new file mode 100644
index 0000000..99ae843
--- /dev/null
+++ b/flakes/mypackages/pkgs/nagios-cli/default.nix
@@ -0,0 +1,12 @@
1{ python2Packages, fetchFromGitHub }:
2python2Packages.buildPythonApplication rec {
3 version = "edc51ea-master";
4 pname = "nagios-cli";
5 src = fetchFromGitHub {
6 owner = "tehmaze";
7 repo = "nagios-cli";
8 rev = "edc51eaccf1086bb4469ce45c5e5155f2d71a2f9";
9 sha256 = "1qw5fv4niz079zqwmfr3kzjv8cc31rbhi9whdbv9c32qdi3h7vsp";
10 fetchSubmodules = true;
11 };
12}
diff --git a/flakes/mypackages/pkgs/nagnu/default.nix b/flakes/mypackages/pkgs/nagnu/default.nix
new file mode 100644
index 0000000..c7a1162
--- /dev/null
+++ b/flakes/mypackages/pkgs/nagnu/default.nix
@@ -0,0 +1,21 @@
1{ stdenv, fetchFromGitHub, ncurses, curl }:
2stdenv.mkDerivation (rec {
3 pname = "nagnu";
4 version = "c7e65fc-master";
5 src = fetchFromGitHub {
6 owner = "frlen";
7 repo = "nagnu";
8 rev = "c7e65fc02f46a3756a4cc47953ea2f3e57a84728";
9 sha256 = "1i2jm8ibvqcc734daamnzc3hx8q0nsry1x12q0kr5yvcsdjjgyy3";
10 fetchSubmodules = true;
11 };
12 buildInputs = [ ncurses curl ];
13 installPhase = ''
14 mkdir -p $out/bin
15 cp nagnu $out/bin
16 mkdir -p $out/share/doc/nagnu
17 cp nagnu.conf.sample $out/share/doc/nagnu
18 mkdir -p $out/share/man/man8
19 cp docs/nagnu.8 $out/share/man/man8
20 '';
21})
diff --git a/flakes/mypackages/pkgs/nb/default.nix b/flakes/mypackages/pkgs/nb/default.nix
new file mode 100644
index 0000000..337c286
--- /dev/null
+++ b/flakes/mypackages/pkgs/nb/default.nix
@@ -0,0 +1,22 @@
1{ fetchFromGitHub, stdenv, makeWrapper, lib, file }:
2stdenv.mkDerivation {
3 pname = "nb";
4 version = "e0d4e24-master";
5 src = fetchFromGitHub {
6 owner = "xwmx";
7 repo = "nb";
8 rev = "e0d4e24201299916d736be6a9800793cec32927e";
9 sha256 = "0gpnlzxjlfn3bagw74lsrmfhxj2xzvk6sjj24wp9rjpk42d9mfml";
10 };
11 phases = "installPhase";
12 buildInputs = [ makeWrapper ];
13 installPhase = ''
14 mkdir -p $out/bin $out/share/zsh/vendor-completions $out/share/bash-completion/completions
15 cp $src/nb $out/bin/nb
16 chmod +x $out/bin/nb
17 patchShebangs $out/bin/nb
18 wrapProgram $out/bin/nb --prefix PATH : ${lib.makeBinPath [ file ]}
19 cp $src/etc/nb-completion.zsh $out/share/zsh/vendor-completions/_nb
20 cp $src/etc/nb-completion.bash $out/share/bash-completion/completions/nb
21 '';
22}
diff --git a/flakes/mypackages/pkgs/note/default.nix b/flakes/mypackages/pkgs/note/default.nix
new file mode 100644
index 0000000..b3b03ef
--- /dev/null
+++ b/flakes/mypackages/pkgs/note/default.nix
@@ -0,0 +1,19 @@
1{ lib, fetchurl, perlPackages }:
2perlPackages.buildPerlPackage rec {
3 pname = "note";
4 version = "1.3.26";
5 src = fetchurl {
6 url = "mirror://cpan/authors/id/T/TL/TLINDEN/${pname}-${version}.tar.gz";
7 sha256 = "1h645rnb5vpms48fcyzvp7cwwcbf9k5xq49w2bpniyzzgk2brjrq";
8 };
9 outputs = ["out" "man"];
10 propagatedBuildInputs = with perlPackages; [ YAML ];
11
12 meta = with lib; {
13 description = "A perl script for maintaining notes";
14 homepage = http://www.daemon.de/NOTE;
15 license = licenses.gpl3;
16 maintainers = with maintainers; [ { name = "T.v.Dein"; email = "tlinden@cpan.org"; } ];
17 platforms = platforms.unix;
18 };
19}
diff --git a/flakes/mypackages/pkgs/notmuch/notmuch-python/default.nix b/flakes/mypackages/pkgs/notmuch/notmuch-python/default.nix
new file mode 100644
index 0000000..d639d9a
--- /dev/null
+++ b/flakes/mypackages/pkgs/notmuch/notmuch-python/default.nix
@@ -0,0 +1,16 @@
1{ stdenv, notmuch, pythonPackages }:
2stdenv.mkDerivation rec {
3 name = "notmuch-${pythonPackages.python.name}-${version}";
4 version = notmuch.version;
5 outputs = [ "out" ];
6 buildInputs = with pythonPackages; [ sphinx python ];
7 src = notmuch.src;
8 phases = [ "unpackPhase" "buildPhase" "installPhase" "fixupPhase" ];
9 buildPhase = ''
10 cd bindings/python
11 python setup.py build
12 '';
13 installPhase = ''
14 python setup.py install --prefix=$out --optimize=1
15 '';
16}
diff --git a/flakes/mypackages/pkgs/notmuch/notmuch-vim/default.nix b/flakes/mypackages/pkgs/notmuch/notmuch-vim/default.nix
new file mode 100644
index 0000000..e79a253
--- /dev/null
+++ b/flakes/mypackages/pkgs/notmuch/notmuch-vim/default.nix
@@ -0,0 +1,11 @@
1{ stdenv, notmuch }:
2stdenv.mkDerivation rec {
3 name = "notmuch-vim-${version}";
4 version = notmuch.version;
5 outputs = [ "out" ];
6 src = notmuch.src;
7 phases = [ "unpackPhase" "installPhase" ];
8 installPhase = ''
9 make -C vim DESTDIR=$out prefix="/share/vim/vimfiles" install
10 '';
11}
diff --git a/flakes/mypackages/pkgs/perl-ical-parser-html/default.nix b/flakes/mypackages/pkgs/perl-ical-parser-html/default.nix
new file mode 100644
index 0000000..96e9abc
--- /dev/null
+++ b/flakes/mypackages/pkgs/perl-ical-parser-html/default.nix
@@ -0,0 +1,48 @@
1{ perlPackages, fetchurl }:
2let
3 TestXML = perlPackages.buildPerlPackage rec {
4 pname = "Test-XML";
5 version = "0.08";
6 src = fetchurl {
7 url = "mirror://cpan/authors/id/S/SE/SEMANTICO/Test-XML-0.08.tar.gz";
8 sha256 = "sha256-61TMI83shg062KyKaXy/A40N7JUimRLZdcMBiQyoPuI=";
9 };
10 propagatedBuildInputs = with perlPackages; [
11 ModuleBuild XMLSemanticDiff XMLParser
12 ];
13 };
14 iCalParserSAX = perlPackages.buildPerlPackage rec {
15 pname = "iCal-Parser-SAX";
16 version = "1.09";
17 src = fetchurl {
18 url = "mirror://cpan/authors/id/R/RF/RFRANKEL/iCal-Parser-SAX-1.09.tar.gz";
19 sha256 = "sha256-fouAjQ+MTUgwZ/j3dIarOK0rVBZcZy6aOJFor4pLql0=";
20 };
21 propagatedBuildInputs = with perlPackages; [
22 ModuleBuild DateTime IOString XMLSAXBase XMLSAXWriter iCalParser
23 LWPUserAgent
24 ];
25 buildInputs = [ TestXML ];
26 doCheck = false;
27 };
28in
29perlPackages.buildPerlPackage rec {
30 pname = "iCal-Parser-HTML";
31 version = "1.07";
32 src = fetchurl {
33 url = "mirror://cpan/authors/id/R/RF/RFRANKEL/${pname}-${version}.tar.gz";
34 sha256 = "sha256-cxRS2M6aVrCtAXHQae0Y6EtEfGnGx41UuB7z442NSrU=";
35 };
36 patchPhase = ''
37 sed -i -e "s/qw(week month year)/(qw(week month year))/" lib/iCal/Parser/HTML.pm
38 '';
39 doCheck = false;
40 postInstall = ''
41 mkdir -p $out/bin
42 cp scripts/ical2html $out/bin
43 chmod +x $out/bin/ical2html
44 '';
45 propagatedBuildInputs = with perlPackages; [
46 ModuleBuild XMLLibXML XMLLibXSLT iCalParser iCalParserSAX
47 ];
48}
diff --git a/flakes/mypackages/pkgs/pgpid/default.nix b/flakes/mypackages/pkgs/pgpid/default.nix
new file mode 100644
index 0000000..a1fb9c2
--- /dev/null
+++ b/flakes/mypackages/pkgs/pgpid/default.nix
@@ -0,0 +1,33 @@
1{ lib, stdenv, fetchFromGitHub, makeWrapper, bashInteractive, bash-libs, coreutils, file, gnugrep, texlive, pandoc, aspell, util-linux, findutils, gnused, gnupg, gawk, facedetect, graphicsmagick, qrencode, tesseract4, zbar, cups, vim }:
2stdenv.mkDerivation {
3 pname = "pgpid";
4 version = "master";
5 src = fetchFromGitHub {
6 owner = "foopgp";
7 repo = "pgpid";
8 rev = "26c2137951775652e9e774977639ecaea5845cf7";
9 sha256 = "sha256-noXDYWWxUryFnV99pyl0eV7hJLUkSy97Vqylx5dKN9g=";
10 };
11
12 buildInputs = [ makeWrapper ];
13 phases = [ "installPhase" ];
14 installPhase = ''
15 mkdir -p $out/bin $out/share/pgpid $out/share/doc/pgpid
16
17 cp $src/pgpid-gen $src/pgpid-qrscan $out/bin
18 cp -r $src/doc $out/share/doc/pgpid
19 cp -r $src/data $out/share/pgpid
20 cp -r $src/imgsamples $out/share/pgpid
21 for i in $out/bin/*; do
22 patchShebangs $i
23 sed -i -e "/^TESSDATADIR/d" -e "/^GEOLIST_CENTROID/d" $i
24 sed -i -e 's@"$(dirname "$BASH_SOURCE")"@${bash-libs}/share/bash-libs/include@' $i
25 wrapProgram $i --set PATH ${lib.makeBinPath [
26 facedetect graphicsmagick qrencode tesseract4 zbar cups gnugrep vim gnupg findutils
27 pandoc (texlive.combine { scheme-small = texlive.scheme-small; pdfcrop = texlive.pdfcrop; })
28 ]}:$(cat ${bash-libs}/nix-support/propagated-build-inputs) \
29 --set TESSDATADIR $out/share/pgpid/data \
30 --set GEOLIST_CENTROID $out/share/pgpid/data/geolist_centroid.txt
31 done
32 '';
33}
diff --git a/flakes/mypackages/pkgs/predixy/default.nix b/flakes/mypackages/pkgs/predixy/default.nix
new file mode 100644
index 0000000..259d7fd
--- /dev/null
+++ b/flakes/mypackages/pkgs/predixy/default.nix
@@ -0,0 +1,19 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation ({
3 pname = "predixy";
4 version = "dacf3fb-master";
5 src = fetchFromGitHub {
6 owner = "joyieldInc";
7 repo = "predixy";
8 rev = "dacf3fb30c2602dc044040df04e194d44b49c1be";
9 sha256 = "0sbvy0jg551lwkfq8qh0a49cl9mhfnkhi3cnk25l8pz4jcdrr9k9";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 mkdir -p $out/bin
14 cp src/predixy $out/bin
15 mkdir -p $out/share
16 cp -r doc $out/share
17 cp -r conf $out/share/doc
18 '';
19})
diff --git a/flakes/mypackages/pkgs/proftpd/default.nix b/flakes/mypackages/pkgs/proftpd/default.nix
new file mode 100644
index 0000000..8bdf531
--- /dev/null
+++ b/flakes/mypackages/pkgs/proftpd/default.nix
@@ -0,0 +1,22 @@
1{ stdenv, fetchurl, file, openssl, libsodium, ncurses, cyrus_sasl, openldap, pkg-config, libxcrypt }:
2
3stdenv.mkDerivation rec {
4 pname = "proftpd";
5 version = "1.3.8";
6 src = fetchurl {
7 url = "https://github.com/proftpd/proftpd/archive/refs/tags/v${version}.tar.gz";
8 sha256 = "sha256-9xOec3eiywWbi5sU12pt9fRA4xgcsVrokNQ7vK5XR0g=";
9 };
10 postPatch = ''
11 sed -i -e "s@/usr/bin/file@${file}/bin/file@" configure
12 '';
13 dontDisableStatic = 1;
14 configureFlags = [ "--enable-openssl" "--with-modules=mod_ldap:mod_sftp:mod_tls:mod_site_misc" "--with-includes=${libsodium.dev}/include" "--with-libraries=${libsodium}/lib" ];
15 preInstall = ''
16 installFlagsArray=(INSTALL_USER=$(id -u) INSTALL_GROUP=$(id -g))
17 '';
18 buildInputs = [ openssl libsodium ncurses cyrus_sasl openldap pkg-config libxcrypt ];
19 postInstall = ''
20 rmdir $out/var $out/libexec $out/lib/proftpd $out/share/locale
21 '';
22}
diff --git a/flakes/mypackages/pkgs/pure-ftpd/default.nix b/flakes/mypackages/pkgs/pure-ftpd/default.nix
new file mode 100644
index 0000000..55c698f
--- /dev/null
+++ b/flakes/mypackages/pkgs/pure-ftpd/default.nix
@@ -0,0 +1,30 @@
1{ ldapFtpId ? null
2, stdenv, lib, fetchurl, openssl, postgresql, openldap }:
3
4stdenv.mkDerivation rec {
5 name = "pure-ftpd-1.0.47";
6
7 src = fetchurl {
8 url = "https://download.pureftpd.org/pub/pure-ftpd/releases/${name}.tar.gz";
9 sha256 = "1b97ixva8m10vln8xrfwwwzi344bkgxqji26d0nrm1yzylbc6h27";
10 };
11
12 preConfigure = stdenv.lib.optionalString (!isNull ldapFtpId) ''
13 sed -i -e "s#FTPuid#${ldapFtpId}Uid#" src/log_ldap.h
14 sed -i -e "s#FTPgid#${ldapFtpId}Gid#" src/log_ldap.h
15 '';
16 postConfigure = ''
17 sed -i 's/define MAX_DATA_SIZE (40/define MAX_DATA_SIZE (70/' src/ftpd.h
18 '';
19 buildInputs = [ openssl postgresql openldap ];
20
21 configureFlags = [ "--with-everything" "--with-tls" "--with-pgsql" "--with-ldap" ];
22
23 meta = with lib; {
24 description = "A free, secure, production-quality and standard-conformant FTP server";
25 homepage = https://www.pureftpd.org;
26 license = licenses.isc; # with some parts covered by BSD3(?)
27 maintainers = [ maintainers.lethalman ];
28 platforms = platforms.linux;
29 };
30}
diff --git a/flakes/mypackages/pkgs/riotkit-do/default.nix b/flakes/mypackages/pkgs/riotkit-do/default.nix
new file mode 100644
index 0000000..3ddb1ab
--- /dev/null
+++ b/flakes/mypackages/pkgs/riotkit-do/default.nix
@@ -0,0 +1,60 @@
1{ python3Packages }:
2let
3 tabulate = python3Packages.buildPythonPackage rec {
4 version = "0.8.7";
5 pname = "tabulate";
6
7 src = python3Packages.fetchPypi {
8 inherit pname version;
9 sha256 = "sha256-2ycjog0EvNqFIhZcc+6nwwDtp04M6FLZAi4BWdeJUAc=";
10 };
11
12 checkInputs = with python3Packages; [ nose ];
13
14 doCheck = false;
15 };
16
17 python-dotenv = python3Packages.buildPythonPackage rec {
18 pname = "python-dotenv";
19 version = "0.13.0";
20
21 src = python3Packages.fetchPypi {
22 inherit pname version;
23 sha256 = "sha256-O5kJvJaw7cawFYbh7tBecRdO9OBMcdpXhjcM6+pTrXQ=";
24 };
25
26 propagatedBuildInputs = with python3Packages; [ click ];
27
28 checkInputs = with python3Packages; [
29 ipython
30 mock
31 pytestCheckHook
32 sh
33 ];
34
35 disabledTests = [
36 "cli"
37 ];
38
39 pythonImportsCheck = [ "dotenv" ];
40 };
41in
42python3Packages.buildPythonApplication rec {
43 pname = "rkd";
44 version = "2.4.0";
45 src = python3Packages.fetchPypi {
46 inherit pname version;
47 sha256 = "sha256-WC0FmUYGkV9PFvRtiFW6w6RtP+9Zf6kizl8jGiRb4HQ=";
48 };
49
50 propagatedBuildInputs = with python3Packages; [
51 pbr
52 jinja2
53 pyyaml
54 tabulate
55 psutil
56 pytest
57 python-dotenv
58 jsonschema
59 ];
60}
diff --git a/flakes/mypackages/pkgs/rrsync_sudo/default.nix b/flakes/mypackages/pkgs/rrsync_sudo/default.nix
new file mode 100644
index 0000000..7a47320
--- /dev/null
+++ b/flakes/mypackages/pkgs/rrsync_sudo/default.nix
@@ -0,0 +1,8 @@
1{ rrsync }:
2
3rrsync.overrideAttrs(old: {
4 patches = old.patches or [] ++ [ ./sudo.patch ];
5 postPatch = old.postPatch + ''
6 substituteInPlace support/rrsync --replace /usr/bin/sudo /run/wrappers/bin/sudo
7 '';
8})
diff --git a/flakes/mypackages/pkgs/rrsync_sudo/sudo.patch b/flakes/mypackages/pkgs/rrsync_sudo/sudo.patch
new file mode 100644
index 0000000..6de9cc9
--- /dev/null
+++ b/flakes/mypackages/pkgs/rrsync_sudo/sudo.patch
@@ -0,0 +1,20 @@
1--- a/support/rrsync 2015-09-14 01:23:54.000000000 +0200
2+++ b/support/rrsync 2020-02-08 13:55:14.302163313 +0100
3@@ -48,7 +48,7 @@
4
5 my $command = $ENV{SSH_ORIGINAL_COMMAND};
6 die "$0: Not invoked via sshd\n$Usage" unless defined $command;
7-die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command =~ s/^rsync\s+//;
8+die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command =~ s/^sudo rsync\s+//;
9 die "$0: --server option is not first\n" unless $command =~ /^--server\s/;
10 our $am_sender = $command =~ /^--server\s+--sender\s/; # Restrictive on purpose!
11 die "$0 sending to read-only server not allowed\n" if $only eq 'r' && !$am_sender;
12@@ -227,7 +227,7 @@
13 }
14
15 # Note: This assumes that the rsync protocol will not be maliciously hijacked.
16-exec(RSYNC, @opts, @args) or die "exec(rsync @opts @args) failed: $? $!";
17+exec("/usr/bin/sudo", RSYNC, @opts, @args) or die "exec(sudo rsync @opts @args) failed: $? $!";
18
19 sub check_arg
20 {
diff --git a/flakes/mypackages/pkgs/shaarli/default.nix b/flakes/mypackages/pkgs/shaarli/default.nix
new file mode 100644
index 0000000..23f9937
--- /dev/null
+++ b/flakes/mypackages/pkgs/shaarli/default.nix
@@ -0,0 +1,24 @@
1{ varDir ? "/var/lib/shaarli", stdenv, fetchurl }:
2
3stdenv.mkDerivation rec {
4 pname = "shaarli";
5 version = "0.10.2";
6 src = fetchurl {
7 url = "https://github.com/shaarli/Shaarli/releases/download/v${version}/shaarli-v${version}-full.tar.gz";
8 sha256 = "0h8sspj7siy3vgpi2i3gdrjcr5935fr4dfwq2zwd70sjx2sh9s78";
9 };
10 patchPhase = "";
11
12 outputs = [ "out" "doc" ];
13
14 patches = [ ./shaarli_ldap.patch ];
15 installPhase = ''
16 rm -r {cache,pagecache,tmp,data}/
17 mkdir -p $doc/share/doc
18 mv doc/ $doc/share/doc/shaarli
19 mkdir $out/
20 cp -R ./* $out
21 cp .htaccess $out/
22 ln -sf ${varDir}/{cache,pagecache,tmp,data} $out/
23 '';
24}
diff --git a/flakes/mypackages/pkgs/shaarli/shaarli_ldap.patch b/flakes/mypackages/pkgs/shaarli/shaarli_ldap.patch
new file mode 100644
index 0000000..e66a54f
--- /dev/null
+++ b/flakes/mypackages/pkgs/shaarli/shaarli_ldap.patch
@@ -0,0 +1,425 @@
1commit a19c24edc1057bd411821f9e3e7d1d309d38b1bb
2Author: Ismaël Bouya <ismael.bouya@normalesup.org>
3Date: Sun Feb 3 20:58:18 2019 +0100
4
5 Add ldap connection
6
7diff --git a/.htaccess b/.htaccess
8index 4c00427..5acd708 100644
9--- a/.htaccess
10+++ b/.htaccess
11@@ -6,10 +6,23 @@ RewriteEngine On
12 # Prevent accessing subdirectories not managed by SCM
13 RewriteRule ^(.git|doxygen|vendor) - [F]
14
15+RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
16+RewriteRule ^(.*) - [E=BASE:%1]
17+
18+RewriteCond %{ENV:REDIRECT_BASE} (.+)
19+RewriteRule .* - [E=BASE:%1]
20+
21 # Forward the "Authorization" HTTP header
22 RewriteCond %{HTTP:Authorization} ^(.*)
23 RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
24
25+RewriteCond %{REQUEST_FILENAME} !-f
26+RewriteCond %{REQUEST_FILENAME} !-d
27+RewriteRule ^((?!api/)[^/]*)/?(.*)$ $2?%{QUERY_STRING} [E=USERSPACE:$1]
28+
29+RewriteCond %{ENV:REDIRECT_USERSPACE} (.+)
30+RewriteRule .* - [E=USERSPACE:%1]
31+
32 # REST API
33 RewriteCond %{REQUEST_FILENAME} !-f
34 RewriteCond %{REQUEST_FILENAME} !-d
35diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php
36index 911873a..f21a1ef 100644
37--- a/application/ApplicationUtils.php
38+++ b/application/ApplicationUtils.php
39@@ -191,6 +191,9 @@ public static function checkResourcePermissions($conf)
40 $conf->get('resource.page_cache'),
41 $conf->get('resource.raintpl_tmp'),
42 ) as $path) {
43+ if (! is_dir($path)) {
44+ mkdir($path, 0755, true);
45+ }
46 if (! is_readable(realpath($path))) {
47 $errors[] = '"'.$path.'" '. t('directory is not readable');
48 }
49diff --git a/application/config/ConfigManager.php b/application/config/ConfigManager.php
50index 32aaea4..99efc15 100644
51--- a/application/config/ConfigManager.php
52+++ b/application/config/ConfigManager.php
53@@ -21,6 +21,11 @@ class ConfigManager
54
55 public static $DEFAULT_PLUGINS = array('qrcode');
56
57+ /**
58+ * @var string User space.
59+ */
60+ protected $userSpace;
61+
62 /**
63 * @var string Config folder.
64 */
65@@ -41,12 +46,36 @@ class ConfigManager
66 *
67 * @param string $configFile Configuration file path without extension.
68 */
69- public function __construct($configFile = 'data/config')
70+ public function __construct($configFile = null, $userSpace = null)
71 {
72- $this->configFile = $configFile;
73+ $this->userSpace = $this->findLDAPUser($userSpace);
74+ if ($configFile !== null) {
75+ $this->configFile = $configFile;
76+ } else {
77+ $this->configFile = ($this->userSpace === null) ? 'data/config' : 'data/' . $this->userSpace . '/config';
78+ }
79 $this->initialize();
80 }
81
82+ public function findLDAPUser($login, $password = null) {
83+ $connect = ldap_connect(getenv('SHAARLI_LDAP_HOST'));
84+ ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
85+ if (!$connect || !ldap_bind($connect, getenv('SHAARLI_LDAP_DN'), getenv('SHAARLI_LDAP_PASSWORD'))) {
86+ return false;
87+ }
88+
89+ $search_query = str_replace('%login%', ldap_escape($login), getenv('SHAARLI_LDAP_FILTER'));
90+
91+ $search = ldap_search($connect, getenv('SHAARLI_LDAP_BASE'), $search_query);
92+ $info = ldap_get_entries($connect, $search);
93+
94+ if (ldap_count_entries($connect, $search) == 1 && (is_null($password) || ldap_bind($connect, $info[0]["dn"], $password))) {
95+ return $login;
96+ } else {
97+ return null;
98+ }
99+ }
100+
101 /**
102 * Reset the ConfigManager instance.
103 */
104@@ -269,6 +298,16 @@ public function getConfigFileExt()
105 return $this->configFile . $this->configIO->getExtension();
106 }
107
108+ /**
109+ * Get the current userspace.
110+ *
111+ * @return mixed User space.
112+ */
113+ public function getUserSpace()
114+ {
115+ return $this->userSpace;
116+ }
117+
118 /**
119 * Recursive function which find asked setting in the loaded config.
120 *
121@@ -342,19 +381,31 @@ protected static function removeConfig($settings, &$conf)
122 */
123 protected function setDefaultValues()
124 {
125- $this->setEmpty('resource.data_dir', 'data');
126- $this->setEmpty('resource.config', 'data/config.php');
127- $this->setEmpty('resource.datastore', 'data/datastore.php');
128- $this->setEmpty('resource.ban_file', 'data/ipbans.php');
129- $this->setEmpty('resource.updates', 'data/updates.txt');
130- $this->setEmpty('resource.log', 'data/log.txt');
131- $this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt');
132- $this->setEmpty('resource.history', 'data/history.php');
133+ if ($this->userSpace === null) {
134+ $data = 'data';
135+ $tmp = 'tmp';
136+ $cache = 'cache';
137+ $pagecache = 'pagecache';
138+ } else {
139+ $data = 'data/' . ($this->userSpace);
140+ $tmp = 'tmp/' . ($this->userSpace);
141+ $cache = 'cache/' . ($this->userSpace);
142+ $pagecache = 'pagecache/' . ($this->userSpace);
143+ }
144+
145+ $this->setEmpty('resource.data_dir', $data);
146+ $this->setEmpty('resource.config', $data . '/config.php');
147+ $this->setEmpty('resource.datastore', $data . '/datastore.php');
148+ $this->setEmpty('resource.ban_file', $data . '/ipbans.php');
149+ $this->setEmpty('resource.updates', $data . '/updates.txt');
150+ $this->setEmpty('resource.log', $data . '/log.txt');
151+ $this->setEmpty('resource.update_check', $data . '/lastupdatecheck.txt');
152+ $this->setEmpty('resource.history', $data . '/history.php');
153 $this->setEmpty('resource.raintpl_tpl', 'tpl/');
154 $this->setEmpty('resource.theme', 'default');
155- $this->setEmpty('resource.raintpl_tmp', 'tmp/');
156- $this->setEmpty('resource.thumbnails_cache', 'cache');
157- $this->setEmpty('resource.page_cache', 'pagecache');
158+ $this->setEmpty('resource.raintpl_tmp', $tmp);
159+ $this->setEmpty('resource.thumbnails_cache', $cache);
160+ $this->setEmpty('resource.page_cache', $pagecache);
161
162 $this->setEmpty('security.ban_after', 4);
163 $this->setEmpty('security.ban_duration', 1800);
164diff --git a/application/security/LoginManager.php b/application/security/LoginManager.php
165index d6784d6..bdfaca7 100644
166--- a/application/security/LoginManager.php
167+++ b/application/security/LoginManager.php
168@@ -32,6 +32,9 @@ class LoginManager
169 /** @var string User sign-in token depending on remote IP and credentials */
170 protected $staySignedInToken = '';
171
172+ protected $lastErrorReason = '';
173+ protected $lastErrorIsBanishable = false;
174+
175 /**
176 * Constructor
177 *
178@@ -83,7 +86,7 @@ public function getStaySignedInToken()
179 */
180 public function checkLoginState($cookie, $clientIpId)
181 {
182- if (! $this->configManager->exists('credentials.login')) {
183+ if (! $this->configManager->exists('credentials.login') || (isset($_SESSION['username']) && $_SESSION['username'] && $this->configManager->get('credentials.login') !== $_SESSION['username'])) {
184 // Shaarli is not configured yet
185 $this->isLoggedIn = false;
186 return;
187@@ -133,20 +136,40 @@ public function isLoggedIn()
188 */
189 public function checkCredentials($remoteIp, $clientIpId, $login, $password)
190 {
191- $hash = sha1($password . $login . $this->configManager->get('credentials.salt'));
192+ $this->lastErrorIsBanishable = false;
193+
194+ if ($this->configManager->getUserSpace() !== null && $this->configManager->getUserSpace() !== $login) {
195+ logm($this->configManager->get('resource.log'),
196+ $remoteIp,
197+ 'Trying to login to wrong user space');
198+ $this->lastErrorReason = 'You’re trying to access the wrong account.';
199+ return false;
200+ }
201
202- if ($login != $this->configManager->get('credentials.login')
203- || $hash != $this->configManager->get('credentials.hash')
204- ) {
205+ logm($this->configManager->get('resource.log'),
206+ $remoteIp,
207+ 'Trying LDAP connection');
208+ $result = $this->configManager->findLDAPUser($login, $password);
209+ if ($result === false) {
210 logm(
211 $this->configManager->get('resource.log'),
212 $remoteIp,
213- 'Login failed for user ' . $login
214+ 'Impossible to connect to LDAP'
215 );
216+ $this->lastErrorReason = 'Server error.';
217+ return false;
218+ } else if (is_null($result)) {
219+ logm(
220+ $this->configManager->get('resource.log'),
221+ $remoteIp,
222+ 'Login failed for user ' . $login
223+ );
224+ $this->lastErrorIsBanishable = true;
225+ $this->lastErrorReason = 'Wrong login/password.';
226 return false;
227 }
228
229- $this->sessionManager->storeLoginInfo($clientIpId);
230+ $this->sessionManager->storeLoginInfo($clientIpId, $login);
231 logm(
232 $this->configManager->get('resource.log'),
233 $remoteIp,
234@@ -187,6 +210,10 @@ protected function writeBanFile()
235 */
236 public function handleFailedLogin($server)
237 {
238+ if (!$this->lastErrorIsBanishable) {
239+ return $this->lastErrorReason ?: 'Error during login.';
240+ };
241+
242 $ip = $server['REMOTE_ADDR'];
243 $trusted = $this->configManager->get('security.trusted_proxies', []);
244
245@@ -215,6 +242,7 @@ public function handleFailedLogin($server)
246 );
247 }
248 $this->writeBanFile();
249+ return $this->lastErrorReason ?: 'Error during login.';
250 }
251
252 /**
253diff --git a/application/security/SessionManager.php b/application/security/SessionManager.php
254index b8b8ab8..5eb4aac 100644
255--- a/application/security/SessionManager.php
256+++ b/application/security/SessionManager.php
257@@ -111,10 +111,10 @@ public static function checkId($sessionId)
258 *
259 * @param string $clientIpId Client IP address identifier
260 */
261- public function storeLoginInfo($clientIpId)
262+ public function storeLoginInfo($clientIpId, $login = null)
263 {
264 $this->session['ip'] = $clientIpId;
265- $this->session['username'] = $this->conf->get('credentials.login');
266+ $this->session['username'] = $login ?: $this->conf->get('credentials.login');
267 $this->extendTimeValidityBy(self::$SHORT_TIMEOUT);
268 }
269
270diff --git a/index.php b/index.php
271index 4b86a3e..58ae2dd 100644
272--- a/index.php
273+++ b/index.php
274@@ -121,7 +121,32 @@
275 $_COOKIE['shaarli'] = session_id();
276 }
277
278-$conf = new ConfigManager();
279+$folderBase = getenv("BASE");
280+
281+if (getenv("USERSPACE")) {
282+ if (isset($_GET["do"]) && $_GET["do"] == "login") {
283+ header("Location: $folderBase/?do=login");
284+ exit;
285+ }
286+ $userspace = preg_replace("/[^-_A-Za-z0-9]/", '', getenv("USERSPACE"));
287+} else if (isset($_SESSION["username"]) && $_SESSION["username"]) {
288+ header("Location: " . $folderBase . "/" . $_SESSION["username"] . "?");
289+ exit;
290+} else if (!isset($_GET["do"]) || $_GET["do"] != "login") {
291+ header("Location: $folderBase/?do=login");
292+ exit;
293+}
294+
295+if (!isset($userspace) && isset($_POST["login"])) {
296+ $userspace = preg_replace("/[^-_A-Za-z0-9]/", '', $_POST["login"]);
297+ error_log("debugImmae: setting userspace from POST: " . $userspace);
298+}
299+
300+if (isset($userspace)) {
301+ $conf = new ConfigManager(null, $userspace);
302+} else {
303+ $conf = new ConfigManager();
304+}
305 $sessionManager = new SessionManager($_SESSION, $conf);
306 $loginManager = new LoginManager($GLOBALS, $conf, $sessionManager);
307 $loginManager->generateStaySignedInToken($_SERVER['REMOTE_ADDR']);
308@@ -175,7 +200,7 @@
309 }
310
311 // Display the installation form if no existing config is found
312- install($conf, $sessionManager, $loginManager);
313+ install($conf, $sessionManager, $loginManager, $userspace);
314 }
315
316 $loginManager->checkLoginState($_COOKIE, $clientIpId);
317@@ -205,6 +230,7 @@ function isLoggedIn()
318 && $loginManager->checkCredentials($_SERVER['REMOTE_ADDR'], $clientIpId, $_POST['login'], $_POST['password'])
319 ) {
320 $loginManager->handleSuccessfulLogin($_SERVER);
321+ $userspace = $_POST['login'];
322
323 $cookiedir = '';
324 if (dirname($_SERVER['SCRIPT_NAME']) != '/') {
325@@ -241,25 +267,25 @@ function isLoggedIn()
326 $uri .= '&'.$param.'='.urlencode($_GET[$param]);
327 }
328 }
329- header('Location: '. $uri);
330+ header('Location: '. $userspace . $uri);
331 exit;
332 }
333
334 if (isset($_GET['edit_link'])) {
335- header('Location: ?edit_link='. escape($_GET['edit_link']));
336+ header('Location: ' . $userspace . '?edit_link='. escape($_GET['edit_link']));
337 exit;
338 }
339
340 if (isset($_POST['returnurl'])) {
341 // Prevent loops over login screen.
342 if (strpos($_POST['returnurl'], 'do=login') === false) {
343- header('Location: '. generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST']));
344+ header('Location: ' . generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST']));
345 exit;
346 }
347 }
348- header('Location: ?'); exit;
349+ header('Location: '. $userspace . '?'); exit;
350 } else {
351- $loginManager->handleFailedLogin($_SERVER);
352+ $errorReason = $loginManager->handleFailedLogin($_SERVER);
353 $redir = '&username='. urlencode($_POST['login']);
354 if (isset($_GET['post'])) {
355 $redir .= '&post=' . urlencode($_GET['post']);
356@@ -270,7 +296,7 @@ function isLoggedIn()
357 }
358 }
359 // Redirect to login screen.
360- echo '<script>alert("'. t("Wrong login/password.") .'");document.location=\'?do=login'.$redir.'\';</script>';
361+ echo '<script>alert("'. t($errorReason) .'");document.location=\'?do=login'.$redir.'\';</script>';
362 exit;
363 }
364 }
365@@ -1719,7 +1745,7 @@ function buildLinkList($PAGE, $LINKSDB, $conf, $pluginManager, $loginManager)
366 * @param SessionManager $sessionManager SessionManager instance
367 * @param LoginManager $loginManager LoginManager instance
368 */
369-function install($conf, $sessionManager, $loginManager) {
370+function install($conf, $sessionManager, $loginManager, $userspace) {
371 // On free.fr host, make sure the /sessions directory exists, otherwise login will not work.
372 if (endsWith($_SERVER['HTTP_HOST'],'.free.fr') && !is_dir($_SERVER['DOCUMENT_ROOT'].'/sessions')) mkdir($_SERVER['DOCUMENT_ROOT'].'/sessions',0705);
373
374@@ -1755,7 +1781,7 @@ function install($conf, $sessionManager, $loginManager) {
375 }
376
377
378- if (!empty($_POST['setlogin']) && !empty($_POST['setpassword']))
379+ if (true)
380 {
381 $tz = 'UTC';
382 if (!empty($_POST['continent']) && !empty($_POST['city'])
383@@ -1764,15 +1790,15 @@ function install($conf, $sessionManager, $loginManager) {
384 $tz = $_POST['continent'].'/'.$_POST['city'];
385 }
386 $conf->set('general.timezone', $tz);
387- $login = $_POST['setlogin'];
388- $conf->set('credentials.login', $login);
389+ $conf->set('credentials.login', $userspace);
390 $salt = sha1(uniqid('', true) .'_'. mt_rand());
391 $conf->set('credentials.salt', $salt);
392- $conf->set('credentials.hash', sha1($_POST['setpassword'] . $login . $salt));
393+ $hash = sha1(uniqid('', true) .'_'. mt_rand());
394+ $conf->set('credentials.hash', $hash);
395 if (!empty($_POST['title'])) {
396 $conf->set('general.title', escape($_POST['title']));
397 } else {
398- $conf->set('general.title', 'Shared links on '.escape(index_url($_SERVER)));
399+ $conf->set('general.title', ucwords(str_replace("_", " ", $userspace)));
400 }
401 $conf->set('translation.language', escape($_POST['language']));
402 $conf->set('updates.check_updates', !empty($_POST['updateCheck']));
403@@ -1841,7 +1867,12 @@ function install($conf, $sessionManager, $loginManager) {
404 $app = new \Slim\App($container);
405
406 // REST API routes
407-$app->group('/api/v1', function() {
408+if (isset($userspace)) {
409+ $mountpoint = '/' . $userspace . '/api/v1';
410+} else {
411+ $mountpoint = '/api/v1';
412+}
413+$app->group($mountpoint, function() {
414 $this->get('/info', '\Shaarli\Api\Controllers\Info:getInfo')->setName('getInfo');
415 $this->get('/links', '\Shaarli\Api\Controllers\Links:getLinks')->setName('getLinks');
416 $this->get('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:getLink')->setName('getLink');
417@@ -1860,7 +1891,7 @@ function install($conf, $sessionManager, $loginManager) {
418 $response = $app->run(true);
419 // Hack to make Slim and Shaarli router work together:
420 // If a Slim route isn't found and NOT API call, we call renderPage().
421-if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) {
422+if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], $mountpoint) === false) {
423 // We use UTF-8 for proper international characters handling.
424 header('Content-Type: text/html; charset=utf-8');
425 renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager);
diff --git a/flakes/mypackages/pkgs/signaldctl/default.nix b/flakes/mypackages/pkgs/signaldctl/default.nix
new file mode 100644
index 0000000..3ae85d8
--- /dev/null
+++ b/flakes/mypackages/pkgs/signaldctl/default.nix
@@ -0,0 +1,13 @@
1{ buildGoModule, fetchgit, lib }:
2
3buildGoModule {
4 pname = "signaldctl";
5 version = "main-3ca2d6f6";
6 src = fetchgit {
7 url = "https://gitlab.com/signald/signald-go.git";
8 branchName = "main";
9 rev = "3ca2d6f6c91d44f34fca3221c430d1c47fa31a5a";
10 sha256 = "0hh2jqfdsvclilqllyfxswpw6fk0ncyhbiy08mwfp3dnk8nlz5vk";
11 };
12 vendorSha256 = "0m3spzv79fgnrg0sxhi3nrpdrvmrznwdca6rrz8qxgqb7a58qcxv";
13}
diff --git a/flakes/mypackages/pkgs/slang_1/default.nix b/flakes/mypackages/pkgs/slang_1/default.nix
new file mode 100644
index 0000000..cd626e0
--- /dev/null
+++ b/flakes/mypackages/pkgs/slang_1/default.nix
@@ -0,0 +1,25 @@
1{ stdenv, fetchpatch, fetchurl }:
2stdenv.mkDerivation rec {
3 name = "slang-debian-patched-${version}";
4 version = "1.4.9";
5 src = fetchurl {
6 url = "ftp://space.mit.edu/pub/davis/slang/v1.4/slang-1.4.9.tar.gz";
7 sha256 = "1y2mg0whqh4b3acd0k17i4biz55bimxg8aaxhmwd165cvspxns9r";
8 };
9 debian_patches = fetchurl {
10 url = "http://archive.debian.org/debian-archive/debian-amd64/pool/main/s/slang/slang_1.4.9dbs-8.diff.gz";
11 sha256 = "0xdq14k5ynqfwpmis1rcggs7m4n921i3bs27icbmbhfg5gb2hap2";
12 };
13 patchPhase = ''
14 gunzip -c ${debian_patches} | patch -p1
15 for i in debian/patches/*; do
16 patch -p1 < $i
17 done
18 '';
19 preConfigure = ''
20 makeFlagsArray=(CFLAGS=" -g -O2 -fno-strength-reduce -DUTF8 -D_REENTRANT -D_XOPEN_SOURCE=500")
21 '';
22 postBuild = ''
23 sed -i "1i#ifndef UTF8\n#define UTF8\n#endif" src/slang.h
24 '';
25}
diff --git a/flakes/mypackages/pkgs/status_engine/host_perfdata.patch b/flakes/mypackages/pkgs/status_engine/host_perfdata.patch
new file mode 100644
index 0000000..0c8a20b
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/host_perfdata.patch
@@ -0,0 +1,47 @@
1diff --git a/src/statusengine.c b/src/statusengine.c
2index cc0b06e..2a18dec 100644
3--- a/src/statusengine.c
4+++ b/src/statusengine.c
5@@ -304,6 +304,7 @@ int enable_ocsp = 0;
6
7 int use_restart_data=1;
8 int use_service_perfdata=0;
9+int use_host_perfdata=0;
10
11 int statusengine_process_config_var(char *arg);
12 int statusengine_process_module_args(char *args);
13@@ -612,6 +613,9 @@ int statusengine_process_config_var(char *arg) {
14 } else if (!strcmp(var, "use_service_perfdata")) {
15 use_service_perfdata = atoi(val);
16 logswitch(NSLOG_INFO_MESSAGE, "start with enabled use_service_perfdata");
17+ } else if (!strcmp(var, "use_host_perfdata")) {
18+ use_host_perfdata = atoi(val);
19+ logswitch(NSLOG_INFO_MESSAGE, "start with enabled use_host_perfdata");
20 } else {
21 return ERROR;
22 }
23@@ -1067,6 +1071,24 @@ int statusengine_handle_data(int event_type, void *data){
24 json_object_put(my_object);
25 free(raw_command);
26
27+ if(use_host_perfdata){
28+ my_object = json_object_new_object();
29+ json_object_object_add(my_object, "type", json_object_new_int(hostcheck->type));
30+ json_object_object_add(my_object, "flags", json_object_new_int(hostcheck->flags));
31+ json_object_object_add(my_object, "attr", json_object_new_int(hostcheck->attr));
32+ json_object_object_add(my_object, "timestamp", json_object_new_int(hostcheck->timestamp.tv_sec));
33+
34+ json_object *hostcheck_object = json_object_new_object();
35+ HOSTCHECKFIELD_STRING(host_name);
36+ HOSTCHECKFIELD_STRING(perf_data);
37+ json_object_object_add(hostcheck_object, "start_time", json_object_new_int64(nag_hostcheck->start_time.tv_sec));
38+
39+ json_object_object_add(my_object, "hostcheck", hostcheck_object);
40+ const char* json_string = json_object_to_json_string(my_object);
41+ statusengine_send_job("statusngin_host_perfdata", (void *)json_string);
42+
43+ json_object_put(my_object);
44+ }
45 }
46 break;
47
diff --git a/flakes/mypackages/pkgs/status_engine/interface.nix b/flakes/mypackages/pkgs/status_engine/interface.nix
new file mode 100644
index 0000000..9c8ff5e
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/interface.nix
@@ -0,0 +1,24 @@
1{ stdenv, composerEnv, php73, fetchurl, callPackage, config_file ? "/var/lib/status_engine/interface.yml" }:
2let
3 composerEnv' = composerEnv.override { php = php73; };
4in
5composerEnv'.buildPackage (
6 import ./interface_php_packages.nix { composerEnv = composerEnv'; inherit fetchurl; } // rec {
7 pname = "interface";
8 version = "3.4.0";
9 name = "${pname}-${version}";
10 src = fetchurl {
11 url = "https://github.com/statusengine/${pname}/archive/${version}.tar.gz";
12 sha256 = "1l11cskv740xvqs9a2yj9zkvgvxvymaq5qap36g2r4hkqbfbbjj2";
13 };
14 unpackPhase = null;
15 postUnpack = ''
16 src=$(pwd)/$sourceRoot
17 '';
18 postInstall = ''
19 ln -s ${config_file} $out/etc/config.yml
20 '';
21 preInstall = ''
22 cp ${./interface_composer.lock} $out/composer.lock
23 '';
24 })
diff --git a/flakes/mypackages/pkgs/status_engine/interface_composer.lock b/flakes/mypackages/pkgs/status_engine/interface_composer.lock
new file mode 100644
index 0000000..8911d9f
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/interface_composer.lock
@@ -0,0 +1,1323 @@
1{
2 "_readme": [
3 "This file locks the dependencies of your project to a known state",
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 "This file is @generated automatically"
6 ],
7 "content-hash": "668fd19407022566bb6a70398e2f954e",
8 "packages": [
9 {
10 "name": "crate/crate-dbal",
11 "version": "2.2.0",
12 "source": {
13 "type": "git",
14 "url": "https://github.com/crate/crate-dbal.git",
15 "reference": "f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417"
16 },
17 "dist": {
18 "type": "zip",
19 "url": "https://api.github.com/repos/crate/crate-dbal/zipball/f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417",
20 "reference": "f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417",
21 "shasum": ""
22 },
23 "require": {
24 "crate/crate-pdo": "^1.0.0",
25 "doctrine/dbal": "^2.10.1",
26 "php": "^7.2"
27 },
28 "require-dev": {
29 "phpunit/phpunit": "^8.0",
30 "squizlabs/php_codesniffer": "~1.5.2"
31 },
32 "type": "library",
33 "autoload": {
34 "psr-0": {
35 "Crate\\DBAL": "src"
36 }
37 },
38 "notification-url": "https://packagist.org/downloads/",
39 "license": [
40 "Apache-2.0"
41 ],
42 "authors": [
43 {
44 "name": "Crate.io",
45 "email": "office@crate.io",
46 "homepage": "https://crate.io",
47 "role": "maintainer"
48 }
49 ],
50 "description": "Doctrine Database Abstraction Layer (DBAL) adapter for CrateDB",
51 "homepage": "https://github.com/crate/crate-dbal",
52 "keywords": [
53 "crate",
54 "database",
55 "dbal",
56 "doctrine"
57 ],
58 "time": "2020-01-08T08:31:16+00:00"
59 },
60 {
61 "name": "crate/crate-pdo",
62 "version": "1.0.1",
63 "source": {
64 "type": "git",
65 "url": "https://github.com/crate/crate-pdo.git",
66 "reference": "33332cef1a27844e473265e584223f142c37317f"
67 },
68 "dist": {
69 "type": "zip",
70 "url": "https://api.github.com/repos/crate/crate-pdo/zipball/33332cef1a27844e473265e584223f142c37317f",
71 "reference": "33332cef1a27844e473265e584223f142c37317f",
72 "shasum": ""
73 },
74 "require": {
75 "ext-pdo": "*",
76 "guzzlehttp/guzzle": "~6.0",
77 "php": "^7.2"
78 },
79 "require-dev": {
80 "phpstan/phpstan": "^0.9.2",
81 "phpunit/phpunit": "~7.0",
82 "squizlabs/php_codesniffer": "^2.8.1"
83 },
84 "type": "library",
85 "autoload": {
86 "psr-0": {
87 "Crate\\": "src"
88 }
89 },
90 "notification-url": "https://packagist.org/downloads/",
91 "license": [
92 "Apache-2.0"
93 ],
94 "authors": [
95 {
96 "name": "Crate.io",
97 "email": "office@crate.io",
98 "homepage": "https://crate.io",
99 "role": "maintainer"
100 }
101 ],
102 "description": "PDO adapter for CrateDB",
103 "homepage": "https://github.com/crate/crate-pdo",
104 "keywords": [
105 "crate",
106 "database",
107 "pdo"
108 ],
109 "time": "2019-04-09T07:48:20+00:00"
110 },
111 {
112 "name": "doctrine/cache",
113 "version": "1.10.1",
114 "source": {
115 "type": "git",
116 "url": "https://github.com/doctrine/cache.git",
117 "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3"
118 },
119 "dist": {
120 "type": "zip",
121 "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
122 "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
123 "shasum": ""
124 },
125 "require": {
126 "php": "~7.1 || ^8.0"
127 },
128 "conflict": {
129 "doctrine/common": ">2.2,<2.4"
130 },
131 "require-dev": {
132 "alcaeus/mongo-php-adapter": "^1.1",
133 "doctrine/coding-standard": "^6.0",
134 "mongodb/mongodb": "^1.1",
135 "phpunit/phpunit": "^7.0",
136 "predis/predis": "~1.0"
137 },
138 "suggest": {
139 "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
140 },
141 "type": "library",
142 "extra": {
143 "branch-alias": {
144 "dev-master": "1.9.x-dev"
145 }
146 },
147 "autoload": {
148 "psr-4": {
149 "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
150 }
151 },
152 "notification-url": "https://packagist.org/downloads/",
153 "license": [
154 "MIT"
155 ],
156 "authors": [
157 {
158 "name": "Guilherme Blanco",
159 "email": "guilhermeblanco@gmail.com"
160 },
161 {
162 "name": "Roman Borschel",
163 "email": "roman@code-factory.org"
164 },
165 {
166 "name": "Benjamin Eberlei",
167 "email": "kontakt@beberlei.de"
168 },
169 {
170 "name": "Jonathan Wage",
171 "email": "jonwage@gmail.com"
172 },
173 {
174 "name": "Johannes Schmitt",
175 "email": "schmittjoh@gmail.com"
176 }
177 ],
178 "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
179 "homepage": "https://www.doctrine-project.org/projects/cache.html",
180 "keywords": [
181 "abstraction",
182 "apcu",
183 "cache",
184 "caching",
185 "couchdb",
186 "memcached",
187 "php",
188 "redis",
189 "xcache"
190 ],
191 "funding": [
192 {
193 "url": "https://www.doctrine-project.org/sponsorship.html",
194 "type": "custom"
195 },
196 {
197 "url": "https://www.patreon.com/phpdoctrine",
198 "type": "patreon"
199 },
200 {
201 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
202 "type": "tidelift"
203 }
204 ],
205 "time": "2020-05-27T16:24:54+00:00"
206 },
207 {
208 "name": "doctrine/dbal",
209 "version": "2.10.2",
210 "source": {
211 "type": "git",
212 "url": "https://github.com/doctrine/dbal.git",
213 "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8"
214 },
215 "dist": {
216 "type": "zip",
217 "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8",
218 "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8",
219 "shasum": ""
220 },
221 "require": {
222 "doctrine/cache": "^1.0",
223 "doctrine/event-manager": "^1.0",
224 "ext-pdo": "*",
225 "php": "^7.2"
226 },
227 "require-dev": {
228 "doctrine/coding-standard": "^6.0",
229 "jetbrains/phpstorm-stubs": "^2019.1",
230 "nikic/php-parser": "^4.4",
231 "phpstan/phpstan": "^0.12",
232 "phpunit/phpunit": "^8.4.1",
233 "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
234 "vimeo/psalm": "^3.11"
235 },
236 "suggest": {
237 "symfony/console": "For helpful console commands such as SQL execution and import of files."
238 },
239 "bin": [
240 "bin/doctrine-dbal"
241 ],
242 "type": "library",
243 "extra": {
244 "branch-alias": {
245 "dev-master": "2.10.x-dev",
246 "dev-develop": "3.0.x-dev"
247 }
248 },
249 "autoload": {
250 "psr-4": {
251 "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
252 }
253 },
254 "notification-url": "https://packagist.org/downloads/",
255 "license": [
256 "MIT"
257 ],
258 "authors": [
259 {
260 "name": "Guilherme Blanco",
261 "email": "guilhermeblanco@gmail.com"
262 },
263 {
264 "name": "Roman Borschel",
265 "email": "roman@code-factory.org"
266 },
267 {
268 "name": "Benjamin Eberlei",
269 "email": "kontakt@beberlei.de"
270 },
271 {
272 "name": "Jonathan Wage",
273 "email": "jonwage@gmail.com"
274 }
275 ],
276 "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
277 "homepage": "https://www.doctrine-project.org/projects/dbal.html",
278 "keywords": [
279 "abstraction",
280 "database",
281 "db2",
282 "dbal",
283 "mariadb",
284 "mssql",
285 "mysql",
286 "oci8",
287 "oracle",
288 "pdo",
289 "pgsql",
290 "postgresql",
291 "queryobject",
292 "sasql",
293 "sql",
294 "sqlanywhere",
295 "sqlite",
296 "sqlserver",
297 "sqlsrv"
298 ],
299 "funding": [
300 {
301 "url": "https://www.doctrine-project.org/sponsorship.html",
302 "type": "custom"
303 },
304 {
305 "url": "https://www.patreon.com/phpdoctrine",
306 "type": "patreon"
307 },
308 {
309 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
310 "type": "tidelift"
311 }
312 ],
313 "time": "2020-04-20T17:19:26+00:00"
314 },
315 {
316 "name": "doctrine/event-manager",
317 "version": "1.1.0",
318 "source": {
319 "type": "git",
320 "url": "https://github.com/doctrine/event-manager.git",
321 "reference": "629572819973f13486371cb611386eb17851e85c"
322 },
323 "dist": {
324 "type": "zip",
325 "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c",
326 "reference": "629572819973f13486371cb611386eb17851e85c",
327 "shasum": ""
328 },
329 "require": {
330 "php": "^7.1"
331 },
332 "conflict": {
333 "doctrine/common": "<2.9@dev"
334 },
335 "require-dev": {
336 "doctrine/coding-standard": "^6.0",
337 "phpunit/phpunit": "^7.0"
338 },
339 "type": "library",
340 "extra": {
341 "branch-alias": {
342 "dev-master": "1.0.x-dev"
343 }
344 },
345 "autoload": {
346 "psr-4": {
347 "Doctrine\\Common\\": "lib/Doctrine/Common"
348 }
349 },
350 "notification-url": "https://packagist.org/downloads/",
351 "license": [
352 "MIT"
353 ],
354 "authors": [
355 {
356 "name": "Guilherme Blanco",
357 "email": "guilhermeblanco@gmail.com"
358 },
359 {
360 "name": "Roman Borschel",
361 "email": "roman@code-factory.org"
362 },
363 {
364 "name": "Benjamin Eberlei",
365 "email": "kontakt@beberlei.de"
366 },
367 {
368 "name": "Jonathan Wage",
369 "email": "jonwage@gmail.com"
370 },
371 {
372 "name": "Johannes Schmitt",
373 "email": "schmittjoh@gmail.com"
374 },
375 {
376 "name": "Marco Pivetta",
377 "email": "ocramius@gmail.com"
378 }
379 ],
380 "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
381 "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
382 "keywords": [
383 "event",
384 "event dispatcher",
385 "event manager",
386 "event system",
387 "events"
388 ],
389 "time": "2019-11-10T09:48:07+00:00"
390 },
391 {
392 "name": "guzzlehttp/guzzle",
393 "version": "6.5.4",
394 "source": {
395 "type": "git",
396 "url": "https://github.com/guzzle/guzzle.git",
397 "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
398 },
399 "dist": {
400 "type": "zip",
401 "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
402 "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
403 "shasum": ""
404 },
405 "require": {
406 "ext-json": "*",
407 "guzzlehttp/promises": "^1.0",
408 "guzzlehttp/psr7": "^1.6.1",
409 "php": ">=5.5",
410 "symfony/polyfill-intl-idn": "1.17.0"
411 },
412 "require-dev": {
413 "ext-curl": "*",
414 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
415 "psr/log": "^1.1"
416 },
417 "suggest": {
418 "psr/log": "Required for using the Log middleware"
419 },
420 "type": "library",
421 "extra": {
422 "branch-alias": {
423 "dev-master": "6.5-dev"
424 }
425 },
426 "autoload": {
427 "psr-4": {
428 "GuzzleHttp\\": "src/"
429 },
430 "files": [
431 "src/functions_include.php"
432 ]
433 },
434 "notification-url": "https://packagist.org/downloads/",
435 "license": [
436 "MIT"
437 ],
438 "authors": [
439 {
440 "name": "Michael Dowling",
441 "email": "mtdowling@gmail.com",
442 "homepage": "https://github.com/mtdowling"
443 }
444 ],
445 "description": "Guzzle is a PHP HTTP client library",
446 "homepage": "http://guzzlephp.org/",
447 "keywords": [
448 "client",
449 "curl",
450 "framework",
451 "http",
452 "http client",
453 "rest",
454 "web service"
455 ],
456 "time": "2020-05-25T19:35:05+00:00"
457 },
458 {
459 "name": "guzzlehttp/promises",
460 "version": "v1.3.1",
461 "source": {
462 "type": "git",
463 "url": "https://github.com/guzzle/promises.git",
464 "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
465 },
466 "dist": {
467 "type": "zip",
468 "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
469 "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
470 "shasum": ""
471 },
472 "require": {
473 "php": ">=5.5.0"
474 },
475 "require-dev": {
476 "phpunit/phpunit": "^4.0"
477 },
478 "type": "library",
479 "extra": {
480 "branch-alias": {
481 "dev-master": "1.4-dev"
482 }
483 },
484 "autoload": {
485 "psr-4": {
486 "GuzzleHttp\\Promise\\": "src/"
487 },
488 "files": [
489 "src/functions_include.php"
490 ]
491 },
492 "notification-url": "https://packagist.org/downloads/",
493 "license": [
494 "MIT"
495 ],
496 "authors": [
497 {
498 "name": "Michael Dowling",
499 "email": "mtdowling@gmail.com",
500 "homepage": "https://github.com/mtdowling"
501 }
502 ],
503 "description": "Guzzle promises library",
504 "keywords": [
505 "promise"
506 ],
507 "time": "2016-12-20T10:07:11+00:00"
508 },
509 {
510 "name": "guzzlehttp/psr7",
511 "version": "1.6.1",
512 "source": {
513 "type": "git",
514 "url": "https://github.com/guzzle/psr7.git",
515 "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
516 },
517 "dist": {
518 "type": "zip",
519 "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
520 "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
521 "shasum": ""
522 },
523 "require": {
524 "php": ">=5.4.0",
525 "psr/http-message": "~1.0",
526 "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
527 },
528 "provide": {
529 "psr/http-message-implementation": "1.0"
530 },
531 "require-dev": {
532 "ext-zlib": "*",
533 "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
534 },
535 "suggest": {
536 "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
537 },
538 "type": "library",
539 "extra": {
540 "branch-alias": {
541 "dev-master": "1.6-dev"
542 }
543 },
544 "autoload": {
545 "psr-4": {
546 "GuzzleHttp\\Psr7\\": "src/"
547 },
548 "files": [
549 "src/functions_include.php"
550 ]
551 },
552 "notification-url": "https://packagist.org/downloads/",
553 "license": [
554 "MIT"
555 ],
556 "authors": [
557 {
558 "name": "Michael Dowling",
559 "email": "mtdowling@gmail.com",
560 "homepage": "https://github.com/mtdowling"
561 },
562 {
563 "name": "Tobias Schultze",
564 "homepage": "https://github.com/Tobion"
565 }
566 ],
567 "description": "PSR-7 message implementation that also provides common utility methods",
568 "keywords": [
569 "http",
570 "message",
571 "psr-7",
572 "request",
573 "response",
574 "stream",
575 "uri",
576 "url"
577 ],
578 "time": "2019-07-01T23:21:34+00:00"
579 },
580 {
581 "name": "nikic/fast-route",
582 "version": "v1.3.0",
583 "source": {
584 "type": "git",
585 "url": "https://github.com/nikic/FastRoute.git",
586 "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
587 },
588 "dist": {
589 "type": "zip",
590 "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
591 "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
592 "shasum": ""
593 },
594 "require": {
595 "php": ">=5.4.0"
596 },
597 "require-dev": {
598 "phpunit/phpunit": "^4.8.35|~5.7"
599 },
600 "type": "library",
601 "autoload": {
602 "psr-4": {
603 "FastRoute\\": "src/"
604 },
605 "files": [
606 "src/functions.php"
607 ]
608 },
609 "notification-url": "https://packagist.org/downloads/",
610 "license": [
611 "BSD-3-Clause"
612 ],
613 "authors": [
614 {
615 "name": "Nikita Popov",
616 "email": "nikic@php.net"
617 }
618 ],
619 "description": "Fast request router for PHP",
620 "keywords": [
621 "router",
622 "routing"
623 ],
624 "time": "2018-02-13T20:26:39+00:00"
625 },
626 {
627 "name": "paragonie/random_compat",
628 "version": "v9.99.99",
629 "source": {
630 "type": "git",
631 "url": "https://github.com/paragonie/random_compat.git",
632 "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
633 },
634 "dist": {
635 "type": "zip",
636 "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
637 "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
638 "shasum": ""
639 },
640 "require": {
641 "php": "^7"
642 },
643 "require-dev": {
644 "phpunit/phpunit": "4.*|5.*",
645 "vimeo/psalm": "^1"
646 },
647 "suggest": {
648 "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
649 },
650 "type": "library",
651 "notification-url": "https://packagist.org/downloads/",
652 "license": [
653 "MIT"
654 ],
655 "authors": [
656 {
657 "name": "Paragon Initiative Enterprises",
658 "email": "security@paragonie.com",
659 "homepage": "https://paragonie.com"
660 }
661 ],
662 "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
663 "keywords": [
664 "csprng",
665 "polyfill",
666 "pseudorandom",
667 "random"
668 ],
669 "time": "2018-07-02T15:55:56+00:00"
670 },
671 {
672 "name": "pimple/pimple",
673 "version": "v3.3.0",
674 "source": {
675 "type": "git",
676 "url": "https://github.com/silexphp/Pimple.git",
677 "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930"
678 },
679 "dist": {
680 "type": "zip",
681 "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930",
682 "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930",
683 "shasum": ""
684 },
685 "require": {
686 "php": "^7.2.5",
687 "psr/container": "^1.0"
688 },
689 "require-dev": {
690 "symfony/phpunit-bridge": "^3.4|^4.4|^5.0"
691 },
692 "type": "library",
693 "extra": {
694 "branch-alias": {
695 "dev-master": "3.3.x-dev"
696 }
697 },
698 "autoload": {
699 "psr-0": {
700 "Pimple": "src/"
701 }
702 },
703 "notification-url": "https://packagist.org/downloads/",
704 "license": [
705 "MIT"
706 ],
707 "authors": [
708 {
709 "name": "Fabien Potencier",
710 "email": "fabien@symfony.com"
711 }
712 ],
713 "description": "Pimple, a simple Dependency Injection Container",
714 "homepage": "https://pimple.symfony.com",
715 "keywords": [
716 "container",
717 "dependency injection"
718 ],
719 "time": "2020-03-03T09:12:48+00:00"
720 },
721 {
722 "name": "psr/container",
723 "version": "1.0.0",
724 "source": {
725 "type": "git",
726 "url": "https://github.com/php-fig/container.git",
727 "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
728 },
729 "dist": {
730 "type": "zip",
731 "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
732 "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
733 "shasum": ""
734 },
735 "require": {
736 "php": ">=5.3.0"
737 },
738 "type": "library",
739 "extra": {
740 "branch-alias": {
741 "dev-master": "1.0.x-dev"
742 }
743 },
744 "autoload": {
745 "psr-4": {
746 "Psr\\Container\\": "src/"
747 }
748 },
749 "notification-url": "https://packagist.org/downloads/",
750 "license": [
751 "MIT"
752 ],
753 "authors": [
754 {
755 "name": "PHP-FIG",
756 "homepage": "http://www.php-fig.org/"
757 }
758 ],
759 "description": "Common Container Interface (PHP FIG PSR-11)",
760 "homepage": "https://github.com/php-fig/container",
761 "keywords": [
762 "PSR-11",
763 "container",
764 "container-interface",
765 "container-interop",
766 "psr"
767 ],
768 "time": "2017-02-14T16:28:37+00:00"
769 },
770 {
771 "name": "psr/http-message",
772 "version": "1.0.1",
773 "source": {
774 "type": "git",
775 "url": "https://github.com/php-fig/http-message.git",
776 "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
777 },
778 "dist": {
779 "type": "zip",
780 "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
781 "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
782 "shasum": ""
783 },
784 "require": {
785 "php": ">=5.3.0"
786 },
787 "type": "library",
788 "extra": {
789 "branch-alias": {
790 "dev-master": "1.0.x-dev"
791 }
792 },
793 "autoload": {
794 "psr-4": {
795 "Psr\\Http\\Message\\": "src/"
796 }
797 },
798 "notification-url": "https://packagist.org/downloads/",
799 "license": [
800 "MIT"
801 ],
802 "authors": [
803 {
804 "name": "PHP-FIG",
805 "homepage": "http://www.php-fig.org/"
806 }
807 ],
808 "description": "Common interface for HTTP messages",
809 "homepage": "https://github.com/php-fig/http-message",
810 "keywords": [
811 "http",
812 "http-message",
813 "psr",
814 "psr-7",
815 "request",
816 "response"
817 ],
818 "time": "2016-08-06T14:39:51+00:00"
819 },
820 {
821 "name": "ralouphie/getallheaders",
822 "version": "3.0.3",
823 "source": {
824 "type": "git",
825 "url": "https://github.com/ralouphie/getallheaders.git",
826 "reference": "120b605dfeb996808c31b6477290a714d356e822"
827 },
828 "dist": {
829 "type": "zip",
830 "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
831 "reference": "120b605dfeb996808c31b6477290a714d356e822",
832 "shasum": ""
833 },
834 "require": {
835 "php": ">=5.6"
836 },
837 "require-dev": {
838 "php-coveralls/php-coveralls": "^2.1",
839 "phpunit/phpunit": "^5 || ^6.5"
840 },
841 "type": "library",
842 "autoload": {
843 "files": [
844 "src/getallheaders.php"
845 ]
846 },
847 "notification-url": "https://packagist.org/downloads/",
848 "license": [
849 "MIT"
850 ],
851 "authors": [
852 {
853 "name": "Ralph Khattar",
854 "email": "ralph.khattar@gmail.com"
855 }
856 ],
857 "description": "A polyfill for getallheaders.",
858 "time": "2019-03-08T08:55:37+00:00"
859 },
860 {
861 "name": "slim/csrf",
862 "version": "0.8.3",
863 "source": {
864 "type": "git",
865 "url": "https://github.com/slimphp/Slim-Csrf.git",
866 "reference": "5f2bcf5d89adf86dc0455a32bea84d912ab466a7"
867 },
868 "dist": {
869 "type": "zip",
870 "url": "https://api.github.com/repos/slimphp/Slim-Csrf/zipball/5f2bcf5d89adf86dc0455a32bea84d912ab466a7",
871 "reference": "5f2bcf5d89adf86dc0455a32bea84d912ab466a7",
872 "shasum": ""
873 },
874 "require": {
875 "paragonie/random_compat": "^1.1|^2.0|^9.99",
876 "php": ">=5.5.0",
877 "psr/http-message": "^1.0"
878 },
879 "require-dev": {
880 "phpunit/phpunit": "^4.0",
881 "slim/slim": "~3.0"
882 },
883 "type": "library",
884 "autoload": {
885 "psr-4": {
886 "Slim\\Csrf\\": "src"
887 }
888 },
889 "notification-url": "https://packagist.org/downloads/",
890 "license": [
891 "MIT"
892 ],
893 "authors": [
894 {
895 "name": "Josh Lockhart",
896 "email": "hello@joshlockhart.com",
897 "homepage": "http://joshlockhart.com"
898 }
899 ],
900 "description": "Slim Framework 3 CSRF protection middleware",
901 "homepage": "http://slimframework.com",
902 "keywords": [
903 "csrf",
904 "framework",
905 "middleware",
906 "slim"
907 ],
908 "time": "2018-08-22T16:12:18+00:00"
909 },
910 {
911 "name": "slim/slim",
912 "version": "3.12.3",
913 "source": {
914 "type": "git",
915 "url": "https://github.com/slimphp/Slim.git",
916 "reference": "1c9318a84ffb890900901136d620b4f03a59da38"
917 },
918 "dist": {
919 "type": "zip",
920 "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38",
921 "reference": "1c9318a84ffb890900901136d620b4f03a59da38",
922 "shasum": ""
923 },
924 "require": {
925 "ext-json": "*",
926 "ext-libxml": "*",
927 "ext-simplexml": "*",
928 "nikic/fast-route": "^1.0",
929 "php": ">=5.5.0",
930 "pimple/pimple": "^3.0",
931 "psr/container": "^1.0",
932 "psr/http-message": "^1.0"
933 },
934 "provide": {
935 "psr/http-message-implementation": "1.0"
936 },
937 "require-dev": {
938 "phpunit/phpunit": "^4.0",
939 "squizlabs/php_codesniffer": "^2.5"
940 },
941 "type": "library",
942 "autoload": {
943 "psr-4": {
944 "Slim\\": "Slim"
945 }
946 },
947 "notification-url": "https://packagist.org/downloads/",
948 "license": [
949 "MIT"
950 ],
951 "authors": [
952 {
953 "name": "Josh Lockhart",
954 "email": "hello@joshlockhart.com",
955 "homepage": "https://joshlockhart.com"
956 },
957 {
958 "name": "Andrew Smith",
959 "email": "a.smith@silentworks.co.uk",
960 "homepage": "http://silentworks.co.uk"
961 },
962 {
963 "name": "Rob Allen",
964 "email": "rob@akrabat.com",
965 "homepage": "http://akrabat.com"
966 },
967 {
968 "name": "Gabriel Manricks",
969 "email": "gmanricks@me.com",
970 "homepage": "http://gabrielmanricks.com"
971 }
972 ],
973 "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
974 "homepage": "https://slimframework.com",
975 "keywords": [
976 "api",
977 "framework",
978 "micro",
979 "router"
980 ],
981 "time": "2019-11-28T17:40:33+00:00"
982 },
983 {
984 "name": "symfony/console",
985 "version": "v2.8.0",
986 "source": {
987 "type": "git",
988 "url": "https://github.com/symfony/console.git",
989 "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41"
990 },
991 "dist": {
992 "type": "zip",
993 "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
994 "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
995 "shasum": ""
996 },
997 "require": {
998 "php": ">=5.3.9",
999 "symfony/polyfill-mbstring": "~1.0"
1000 },
1001 "require-dev": {
1002 "psr/log": "~1.0",
1003 "symfony/event-dispatcher": "~2.1|~3.0.0",
1004 "symfony/process": "~2.1|~3.0.0"
1005 },
1006 "suggest": {
1007 "psr/log": "For using the console logger",
1008 "symfony/event-dispatcher": "",
1009 "symfony/process": ""
1010 },
1011 "type": "library",
1012 "extra": {
1013 "branch-alias": {
1014 "dev-master": "2.8-dev"
1015 }
1016 },
1017 "autoload": {
1018 "psr-4": {
1019 "Symfony\\Component\\Console\\": ""
1020 },
1021 "exclude-from-classmap": [
1022 "/Tests/"
1023 ]
1024 },
1025 "notification-url": "https://packagist.org/downloads/",
1026 "license": [
1027 "MIT"
1028 ],
1029 "authors": [
1030 {
1031 "name": "Fabien Potencier",
1032 "email": "fabien@symfony.com"
1033 },
1034 {
1035 "name": "Symfony Community",
1036 "homepage": "https://symfony.com/contributors"
1037 }
1038 ],
1039 "description": "Symfony Console Component",
1040 "homepage": "https://symfony.com",
1041 "time": "2015-11-30T12:35:10+00:00"
1042 },
1043 {
1044 "name": "symfony/polyfill-intl-idn",
1045 "version": "v1.17.0",
1046 "source": {
1047 "type": "git",
1048 "url": "https://github.com/symfony/polyfill-intl-idn.git",
1049 "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
1050 },
1051 "dist": {
1052 "type": "zip",
1053 "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
1054 "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
1055 "shasum": ""
1056 },
1057 "require": {
1058 "php": ">=5.3.3",
1059 "symfony/polyfill-mbstring": "^1.3",
1060 "symfony/polyfill-php72": "^1.10"
1061 },
1062 "suggest": {
1063 "ext-intl": "For best performance"
1064 },
1065 "type": "library",
1066 "extra": {
1067 "branch-alias": {
1068 "dev-master": "1.17-dev"
1069 }
1070 },
1071 "autoload": {
1072 "psr-4": {
1073 "Symfony\\Polyfill\\Intl\\Idn\\": ""
1074 },
1075 "files": [
1076 "bootstrap.php"
1077 ]
1078 },
1079 "notification-url": "https://packagist.org/downloads/",
1080 "license": [
1081 "MIT"
1082 ],
1083 "authors": [
1084 {
1085 "name": "Laurent Bassin",
1086 "email": "laurent@bassin.info"
1087 },
1088 {
1089 "name": "Symfony Community",
1090 "homepage": "https://symfony.com/contributors"
1091 }
1092 ],
1093 "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
1094 "homepage": "https://symfony.com",
1095 "keywords": [
1096 "compatibility",
1097 "idn",
1098 "intl",
1099 "polyfill",
1100 "portable",
1101 "shim"
1102 ],
1103 "funding": [
1104 {
1105 "url": "https://symfony.com/sponsor",
1106 "type": "custom"
1107 },
1108 {
1109 "url": "https://github.com/fabpot",
1110 "type": "github"
1111 },
1112 {
1113 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1114 "type": "tidelift"
1115 }
1116 ],
1117 "time": "2020-05-12T16:47:27+00:00"
1118 },
1119 {
1120 "name": "symfony/polyfill-mbstring",
1121 "version": "v1.17.0",
1122 "source": {
1123 "type": "git",
1124 "url": "https://github.com/symfony/polyfill-mbstring.git",
1125 "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
1126 },
1127 "dist": {
1128 "type": "zip",
1129 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
1130 "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
1131 "shasum": ""
1132 },
1133 "require": {
1134 "php": ">=5.3.3"
1135 },
1136 "suggest": {
1137 "ext-mbstring": "For best performance"
1138 },
1139 "type": "library",
1140 "extra": {
1141 "branch-alias": {
1142 "dev-master": "1.17-dev"
1143 }
1144 },
1145 "autoload": {
1146 "psr-4": {
1147 "Symfony\\Polyfill\\Mbstring\\": ""
1148 },
1149 "files": [
1150 "bootstrap.php"
1151 ]
1152 },
1153 "notification-url": "https://packagist.org/downloads/",
1154 "license": [
1155 "MIT"
1156 ],
1157 "authors": [
1158 {
1159 "name": "Nicolas Grekas",
1160 "email": "p@tchwork.com"
1161 },
1162 {
1163 "name": "Symfony Community",
1164 "homepage": "https://symfony.com/contributors"
1165 }
1166 ],
1167 "description": "Symfony polyfill for the Mbstring extension",
1168 "homepage": "https://symfony.com",
1169 "keywords": [
1170 "compatibility",
1171 "mbstring",
1172 "polyfill",
1173 "portable",
1174 "shim"
1175 ],
1176 "funding": [
1177 {
1178 "url": "https://symfony.com/sponsor",
1179 "type": "custom"
1180 },
1181 {
1182 "url": "https://github.com/fabpot",
1183 "type": "github"
1184 },
1185 {
1186 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1187 "type": "tidelift"
1188 }
1189 ],
1190 "time": "2020-05-12T16:47:27+00:00"
1191 },
1192 {
1193 "name": "symfony/polyfill-php72",
1194 "version": "v1.17.0",
1195 "source": {
1196 "type": "git",
1197 "url": "https://github.com/symfony/polyfill-php72.git",
1198 "reference": "f048e612a3905f34931127360bdd2def19a5e582"
1199 },
1200 "dist": {
1201 "type": "zip",
1202 "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
1203 "reference": "f048e612a3905f34931127360bdd2def19a5e582",
1204 "shasum": ""
1205 },
1206 "require": {
1207 "php": ">=5.3.3"
1208 },
1209 "type": "library",
1210 "extra": {
1211 "branch-alias": {
1212 "dev-master": "1.17-dev"
1213 }
1214 },
1215 "autoload": {
1216 "psr-4": {
1217 "Symfony\\Polyfill\\Php72\\": ""
1218 },
1219 "files": [
1220 "bootstrap.php"
1221 ]
1222 },
1223 "notification-url": "https://packagist.org/downloads/",
1224 "license": [
1225 "MIT"
1226 ],
1227 "authors": [
1228 {
1229 "name": "Nicolas Grekas",
1230 "email": "p@tchwork.com"
1231 },
1232 {
1233 "name": "Symfony Community",
1234 "homepage": "https://symfony.com/contributors"
1235 }
1236 ],
1237 "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
1238 "homepage": "https://symfony.com",
1239 "keywords": [
1240 "compatibility",
1241 "polyfill",
1242 "portable",
1243 "shim"
1244 ],
1245 "funding": [
1246 {
1247 "url": "https://symfony.com/sponsor",
1248 "type": "custom"
1249 },
1250 {
1251 "url": "https://github.com/fabpot",
1252 "type": "github"
1253 },
1254 {
1255 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1256 "type": "tidelift"
1257 }
1258 ],
1259 "time": "2020-05-12T16:47:27+00:00"
1260 },
1261 {
1262 "name": "symfony/yaml",
1263 "version": "v2.8.0",
1264 "source": {
1265 "type": "git",
1266 "url": "https://github.com/symfony/yaml.git",
1267 "reference": "f79824187de95064a2f5038904c4d7f0227fedb5"
1268 },
1269 "dist": {
1270 "type": "zip",
1271 "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5",
1272 "reference": "f79824187de95064a2f5038904c4d7f0227fedb5",
1273 "shasum": ""
1274 },
1275 "require": {
1276 "php": ">=5.3.9"
1277 },
1278 "type": "library",
1279 "extra": {
1280 "branch-alias": {
1281 "dev-master": "2.8-dev"
1282 }
1283 },
1284 "autoload": {
1285 "psr-4": {
1286 "Symfony\\Component\\Yaml\\": ""
1287 },
1288 "exclude-from-classmap": [
1289 "/Tests/"
1290 ]
1291 },
1292 "notification-url": "https://packagist.org/downloads/",
1293 "license": [
1294 "MIT"
1295 ],
1296 "authors": [
1297 {
1298 "name": "Fabien Potencier",
1299 "email": "fabien@symfony.com"
1300 },
1301 {
1302 "name": "Symfony Community",
1303 "homepage": "https://symfony.com/contributors"
1304 }
1305 ],
1306 "description": "Symfony Yaml Component",
1307 "homepage": "https://symfony.com",
1308 "time": "2015-11-30T12:35:10+00:00"
1309 }
1310 ],
1311 "packages-dev": [],
1312 "aliases": [],
1313 "minimum-stability": "stable",
1314 "stability-flags": [],
1315 "prefer-stable": false,
1316 "prefer-lowest": false,
1317 "platform": {
1318 "php": ">=5.5.9",
1319 "ext-ldap": "*"
1320 },
1321 "platform-dev": [],
1322 "plugin-api-version": "1.1.0"
1323}
diff --git a/flakes/mypackages/pkgs/status_engine/interface_php_packages.nix b/flakes/mypackages/pkgs/status_engine/interface_php_packages.nix
new file mode 100644
index 0000000..d81e83c
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/interface_php_packages.nix
@@ -0,0 +1,217 @@
1# Generated with composer2nix and adapted to return only the list of
2# packages
3{ composerEnv, fetchurl }:
4{
5 packages = {
6 "crate/crate-dbal" = {
7 targetDir = "";
8 src = composerEnv.buildZipPackage {
9 name = "crate-crate-dbal-f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417";
10 src = fetchurl {
11 url = https://api.github.com/repos/crate/crate-dbal/zipball/f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417;
12 sha256 = "0778m29av1nj6596b7x6xz6frd41nrswn20r327lpdfw7y6b19ni";
13 };
14 };
15 };
16 "crate/crate-pdo" = {
17 targetDir = "";
18 src = composerEnv.buildZipPackage {
19 name = "crate-crate-pdo-33332cef1a27844e473265e584223f142c37317f";
20 src = fetchurl {
21 url = https://api.github.com/repos/crate/crate-pdo/zipball/33332cef1a27844e473265e584223f142c37317f;
22 sha256 = "11w30hyr0lfw800aakl0ii8pwdv7vzpbjklw0z96hzsky788hfa7";
23 };
24 };
25 };
26 "doctrine/cache" = {
27 targetDir = "";
28 src = composerEnv.buildZipPackage {
29 name = "doctrine-cache-35a4a70cd94e09e2259dfae7488afc6b474ecbd3";
30 src = fetchurl {
31 url = https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3;
32 sha256 = "1fk0c8vhjgl7j4b2vd4k7sshdrqysqwcp9mlxbapf8x7nmpa6i9b";
33 };
34 };
35 };
36 "doctrine/dbal" = {
37 targetDir = "";
38 src = composerEnv.buildZipPackage {
39 name = "doctrine-dbal-aab745e7b6b2de3b47019da81e7225e14dcfdac8";
40 src = fetchurl {
41 url = https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8;
42 sha256 = "04c6r4p1b0iknjk95hpc4fsyxg8s2x1skfmnx2g11z64jvldzs62";
43 };
44 };
45 };
46 "doctrine/event-manager" = {
47 targetDir = "";
48 src = composerEnv.buildZipPackage {
49 name = "doctrine-event-manager-629572819973f13486371cb611386eb17851e85c";
50 src = fetchurl {
51 url = https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c;
52 sha256 = "02zglsk2zfnpabs83an7zg18h2k31h00vzk6qpawvmy35r1vmrfn";
53 };
54 };
55 };
56 "guzzlehttp/guzzle" = {
57 targetDir = "";
58 src = composerEnv.buildZipPackage {
59 name = "guzzlehttp-guzzle-a4a1b6930528a8f7ee03518e6442ec7a44155d9d";
60 src = fetchurl {
61 url = https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d;
62 sha256 = "0midln6ji6b990vkc0syn631nf6r94lv5600dcc26lcivz8c4gk3";
63 };
64 };
65 };
66 "guzzlehttp/promises" = {
67 targetDir = "";
68 src = composerEnv.buildZipPackage {
69 name = "guzzlehttp-promises-a59da6cf61d80060647ff4d3eb2c03a2bc694646";
70 src = fetchurl {
71 url = https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646;
72 sha256 = "1kpl91fzalcgkcs16lpakvzcnbkry3id4ynx6xhq477p4fipdciz";
73 };
74 };
75 };
76 "guzzlehttp/psr7" = {
77 targetDir = "";
78 src = composerEnv.buildZipPackage {
79 name = "guzzlehttp-psr7-239400de7a173fe9901b9ac7c06497751f00727a";
80 src = fetchurl {
81 url = https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a;
82 sha256 = "0mfq93x7ayix6l3v5jkk40a9hnmrxaqr9vk1r26q39d1s6292ma7";
83 };
84 };
85 };
86 "nikic/fast-route" = {
87 targetDir = "";
88 src = composerEnv.buildZipPackage {
89 name = "nikic-fast-route-181d480e08d9476e61381e04a71b34dc0432e812";
90 src = fetchurl {
91 url = https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812;
92 sha256 = "0sjqivm0gp6d6nal58n4r5wzyi21r4hdzn4v31ydgjgni7877p4i";
93 };
94 };
95 };
96 "paragonie/random_compat" = {
97 targetDir = "";
98 src = composerEnv.buildZipPackage {
99 name = "paragonie-random_compat-84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95";
100 src = fetchurl {
101 url = https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95;
102 sha256 = "03nsccdvcb79l64b7lsmx0n8ldf5z3v8niqr7bpp6wg401qp9p09";
103 };
104 };
105 };
106 "pimple/pimple" = {
107 targetDir = "";
108 src = composerEnv.buildZipPackage {
109 name = "pimple-pimple-e55d12f9d6a0e7f9c85992b73df1267f46279930";
110 src = fetchurl {
111 url = https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930;
112 sha256 = "0xmx8jc9shh2a63wg6574g6qc63w3nvr7w4062d97sbgnn62r6hw";
113 };
114 };
115 };
116 "psr/container" = {
117 targetDir = "";
118 src = composerEnv.buildZipPackage {
119 name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f";
120 src = fetchurl {
121 url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f;
122 sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j";
123 };
124 };
125 };
126 "psr/http-message" = {
127 targetDir = "";
128 src = composerEnv.buildZipPackage {
129 name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363";
130 src = fetchurl {
131 url = https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363;
132 sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45";
133 };
134 };
135 };
136 "ralouphie/getallheaders" = {
137 targetDir = "";
138 src = composerEnv.buildZipPackage {
139 name = "ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822";
140 src = fetchurl {
141 url = https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822;
142 sha256 = "1bv7ndkkankrqlr2b4kw7qp3fl0dxi6bp26bnim6dnlhavd6a0gg";
143 };
144 };
145 };
146 "slim/csrf" = {
147 targetDir = "";
148 src = composerEnv.buildZipPackage {
149 name = "slim-csrf-5f2bcf5d89adf86dc0455a32bea84d912ab466a7";
150 src = fetchurl {
151 url = https://api.github.com/repos/slimphp/Slim-Csrf/zipball/5f2bcf5d89adf86dc0455a32bea84d912ab466a7;
152 sha256 = "1n8q8cgc2y60z7waqw9xyq9pl9dvww85rbdcnap55d5a55api8j5";
153 };
154 };
155 };
156 "slim/slim" = {
157 targetDir = "";
158 src = composerEnv.buildZipPackage {
159 name = "slim-slim-1c9318a84ffb890900901136d620b4f03a59da38";
160 src = fetchurl {
161 url = https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38;
162 sha256 = "08s7y7apz609vg745wr61nn0ji029zvnd0435fn3kmn57f8lgq7x";
163 };
164 };
165 };
166 "symfony/console" = {
167 targetDir = "";
168 src = composerEnv.buildZipPackage {
169 name = "symfony-console-d232bfc100dfd32b18ccbcab4bcc8f28697b7e41";
170 src = fetchurl {
171 url = https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41;
172 sha256 = "16kgs7x60y3vj0bbmljj80hq1x8fb6w1g0fd1j2hc1cbphgj8x67";
173 };
174 };
175 };
176 "symfony/polyfill-intl-idn" = {
177 targetDir = "";
178 src = composerEnv.buildZipPackage {
179 name = "symfony-polyfill-intl-idn-3bff59ea7047e925be6b7f2059d60af31bb46d6a";
180 src = fetchurl {
181 url = https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a;
182 sha256 = "0c26v3xpchyiqckp663n7i3hgswbzy56r0jdwjizrsgqq731h6fp";
183 };
184 };
185 };
186 "symfony/polyfill-mbstring" = {
187 targetDir = "";
188 src = composerEnv.buildZipPackage {
189 name = "symfony-polyfill-mbstring-fa79b11539418b02fc5e1897267673ba2c19419c";
190 src = fetchurl {
191 url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c;
192 sha256 = "17m46mkkcv7fsxf71si0cq8xdf6b1k272mc5bfwgl00h8s9bk0rs";
193 };
194 };
195 };
196 "symfony/polyfill-php72" = {
197 targetDir = "";
198 src = composerEnv.buildZipPackage {
199 name = "symfony-polyfill-php72-f048e612a3905f34931127360bdd2def19a5e582";
200 src = fetchurl {
201 url = https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582;
202 sha256 = "1lkjxh17nfaglh7v2m3zw2fy6b2w8nmxr7jb1gqqpvg74yqqz83f";
203 };
204 };
205 };
206 "symfony/yaml" = {
207 targetDir = "";
208 src = composerEnv.buildZipPackage {
209 name = "symfony-yaml-f79824187de95064a2f5038904c4d7f0227fedb5";
210 src = fetchurl {
211 url = https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5;
212 sha256 = "1pwx4bckfjz0afz62q02vl0i4wmg3c6f963jrhlx247b1z6isram";
213 };
214 };
215 };
216 };
217}
diff --git a/flakes/mypackages/pkgs/status_engine/module.nix b/flakes/mypackages/pkgs/status_engine/module.nix
new file mode 100644
index 0000000..d3ac03e
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/module.nix
@@ -0,0 +1,19 @@
1{ stdenv, fetchFromGitHub, gearmand, json_c, libuuid, libevent, pkgconfig, glib }:
2stdenv.mkDerivation ({
3 pname = "statusengine-module";
4 version = "d461e95-master";
5 src = fetchFromGitHub {
6 owner = "statusengine";
7 repo = "module";
8 rev = "d461e95a11fffaac604d11ac42d237b5e13071bc";
9 sha256 = "1awmq9rck9xy82pambnd2wh66ndif8x8jpk4qbbghs9f2sd48x1n";
10 fetchSubmodules = true;
11 };
12 patches = [ ./host_perfdata.patch ];
13 buildInputs = [ gearmand json_c libuuid libevent pkgconfig glib ];
14 makeFlags = "all";
15 installPhase = ''
16 mkdir -p $out/lib/status-engine
17 cp -a src/bin/* $out/lib/status-engine
18 '';
19})
diff --git a/flakes/mypackages/pkgs/status_engine/worker.nix b/flakes/mypackages/pkgs/status_engine/worker.nix
new file mode 100644
index 0000000..d8425e1
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/worker.nix
@@ -0,0 +1,37 @@
1{ stdenv, fetchFromGitHub, composerEnv, fetchurl, gearmand, callPackage, php81, config_file ? "/var/lib/status_engine/ui.yml" }:
2let
3 gearman = php81.buildPecl rec {
4 # git describe
5 version = "2.1.0-12-g8fb88d5";
6 pname = "gearman";
7 src = fetchFromGitHub {
8 owner = "php";
9 repo = "pecl-networking-gearman";
10 rev = "8fb88d5a97111a7e8f0dc67553c387b49f047e53";
11 sha256 = "sha256-VPJX29JfNjh0mHlYY+iYKBHSJGUINbWHvojyYBSkSho=";
12 };
13 configureFlags = [ "--with-gearman=${gearmand}" ];
14 nativeBuildInputs = [ gearmand ];
15 };
16 php = php81.withExtensions({ enabled, all }: enabled ++ (with all; [gearman redis mbstring bcmath iconv]));
17in
18(composerEnv.override { inherit php; }).buildPackage (
19 import ./worker_php_packages.nix { inherit composerEnv fetchurl; } // rec {
20 name = "${pname}-${version}";
21 pname = "worker";
22 version = "master";
23 src = fetchFromGitHub {
24 owner = "statusengine";
25 repo = "worker";
26 rev = "e20d6b5c83c6b3c6a2030c9506542fa59dcbb551";
27 sha256 = "sha256-dcC+SLEqMUubp4JQFSuKNpd6U4VYvGR38Vn1jf6ZvTU=";
28 fetchSubmodules = true;
29 };
30 passthru.php = php;
31 postInstall = ''
32 ln -s ${config_file} $out/etc/config.yml
33 '';
34 preInstall = ''
35 cp ${./worker_composer.lock} $out/composer.lock
36 '';
37})
diff --git a/flakes/mypackages/pkgs/status_engine/worker_composer.lock b/flakes/mypackages/pkgs/status_engine/worker_composer.lock
new file mode 100644
index 0000000..bba0d2d
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/worker_composer.lock
@@ -0,0 +1,2072 @@
1{
2 "_readme": [
3 "This file locks the dependencies of your project to a known state",
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 "This file is @generated automatically"
6 ],
7 "content-hash": "f61ef94b19969eb2446f52577078d701",
8 "packages": [
9 {
10 "name": "composer/package-versions-deprecated",
11 "version": "1.11.99.5",
12 "source": {
13 "type": "git",
14 "url": "https://github.com/composer/package-versions-deprecated.git",
15 "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d"
16 },
17 "dist": {
18 "type": "zip",
19 "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d",
20 "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d",
21 "shasum": ""
22 },
23 "require": {
24 "composer-plugin-api": "^1.1.0 || ^2.0",
25 "php": "^7 || ^8"
26 },
27 "replace": {
28 "ocramius/package-versions": "1.11.99"
29 },
30 "require-dev": {
31 "composer/composer": "^1.9.3 || ^2.0@dev",
32 "ext-zip": "^1.13",
33 "phpunit/phpunit": "^6.5 || ^7"
34 },
35 "type": "composer-plugin",
36 "extra": {
37 "class": "PackageVersions\\Installer",
38 "branch-alias": {
39 "dev-master": "1.x-dev"
40 }
41 },
42 "autoload": {
43 "psr-4": {
44 "PackageVersions\\": "src/PackageVersions"
45 }
46 },
47 "notification-url": "https://packagist.org/downloads/",
48 "license": [
49 "MIT"
50 ],
51 "authors": [
52 {
53 "name": "Marco Pivetta",
54 "email": "ocramius@gmail.com"
55 },
56 {
57 "name": "Jordi Boggiano",
58 "email": "j.boggiano@seld.be"
59 }
60 ],
61 "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
62 "support": {
63 "issues": "https://github.com/composer/package-versions-deprecated/issues",
64 "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
65 },
66 "funding": [
67 {
68 "url": "https://packagist.com",
69 "type": "custom"
70 },
71 {
72 "url": "https://github.com/composer",
73 "type": "github"
74 },
75 {
76 "url": "https://tidelift.com/funding/github/packagist/composer/composer",
77 "type": "tidelift"
78 }
79 ],
80 "time": "2022-01-17T14:14:24+00:00"
81 },
82 {
83 "name": "doctrine/cache",
84 "version": "2.2.0",
85 "source": {
86 "type": "git",
87 "url": "https://github.com/doctrine/cache.git",
88 "reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
89 },
90 "dist": {
91 "type": "zip",
92 "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
93 "reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
94 "shasum": ""
95 },
96 "require": {
97 "php": "~7.1 || ^8.0"
98 },
99 "conflict": {
100 "doctrine/common": ">2.2,<2.4"
101 },
102 "require-dev": {
103 "cache/integration-tests": "dev-master",
104 "doctrine/coding-standard": "^9",
105 "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
106 "psr/cache": "^1.0 || ^2.0 || ^3.0",
107 "symfony/cache": "^4.4 || ^5.4 || ^6",
108 "symfony/var-exporter": "^4.4 || ^5.4 || ^6"
109 },
110 "type": "library",
111 "autoload": {
112 "psr-4": {
113 "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
114 }
115 },
116 "notification-url": "https://packagist.org/downloads/",
117 "license": [
118 "MIT"
119 ],
120 "authors": [
121 {
122 "name": "Guilherme Blanco",
123 "email": "guilhermeblanco@gmail.com"
124 },
125 {
126 "name": "Roman Borschel",
127 "email": "roman@code-factory.org"
128 },
129 {
130 "name": "Benjamin Eberlei",
131 "email": "kontakt@beberlei.de"
132 },
133 {
134 "name": "Jonathan Wage",
135 "email": "jonwage@gmail.com"
136 },
137 {
138 "name": "Johannes Schmitt",
139 "email": "schmittjoh@gmail.com"
140 }
141 ],
142 "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
143 "homepage": "https://www.doctrine-project.org/projects/cache.html",
144 "keywords": [
145 "abstraction",
146 "apcu",
147 "cache",
148 "caching",
149 "couchdb",
150 "memcached",
151 "php",
152 "redis",
153 "xcache"
154 ],
155 "support": {
156 "issues": "https://github.com/doctrine/cache/issues",
157 "source": "https://github.com/doctrine/cache/tree/2.2.0"
158 },
159 "funding": [
160 {
161 "url": "https://www.doctrine-project.org/sponsorship.html",
162 "type": "custom"
163 },
164 {
165 "url": "https://www.patreon.com/phpdoctrine",
166 "type": "patreon"
167 },
168 {
169 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
170 "type": "tidelift"
171 }
172 ],
173 "time": "2022-05-20T20:07:39+00:00"
174 },
175 {
176 "name": "doctrine/dbal",
177 "version": "2.13.9",
178 "source": {
179 "type": "git",
180 "url": "https://github.com/doctrine/dbal.git",
181 "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8"
182 },
183 "dist": {
184 "type": "zip",
185 "url": "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8",
186 "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8",
187 "shasum": ""
188 },
189 "require": {
190 "doctrine/cache": "^1.0|^2.0",
191 "doctrine/deprecations": "^0.5.3|^1",
192 "doctrine/event-manager": "^1.0",
193 "ext-pdo": "*",
194 "php": "^7.1 || ^8"
195 },
196 "require-dev": {
197 "doctrine/coding-standard": "9.0.0",
198 "jetbrains/phpstorm-stubs": "2021.1",
199 "phpstan/phpstan": "1.4.6",
200 "phpunit/phpunit": "^7.5.20|^8.5|9.5.16",
201 "psalm/plugin-phpunit": "0.16.1",
202 "squizlabs/php_codesniffer": "3.6.2",
203 "symfony/cache": "^4.4",
204 "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
205 "vimeo/psalm": "4.22.0"
206 },
207 "suggest": {
208 "symfony/console": "For helpful console commands such as SQL execution and import of files."
209 },
210 "bin": [
211 "bin/doctrine-dbal"
212 ],
213 "type": "library",
214 "autoload": {
215 "psr-4": {
216 "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
217 }
218 },
219 "notification-url": "https://packagist.org/downloads/",
220 "license": [
221 "MIT"
222 ],
223 "authors": [
224 {
225 "name": "Guilherme Blanco",
226 "email": "guilhermeblanco@gmail.com"
227 },
228 {
229 "name": "Roman Borschel",
230 "email": "roman@code-factory.org"
231 },
232 {
233 "name": "Benjamin Eberlei",
234 "email": "kontakt@beberlei.de"
235 },
236 {
237 "name": "Jonathan Wage",
238 "email": "jonwage@gmail.com"
239 }
240 ],
241 "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
242 "homepage": "https://www.doctrine-project.org/projects/dbal.html",
243 "keywords": [
244 "abstraction",
245 "database",
246 "db2",
247 "dbal",
248 "mariadb",
249 "mssql",
250 "mysql",
251 "oci8",
252 "oracle",
253 "pdo",
254 "pgsql",
255 "postgresql",
256 "queryobject",
257 "sasql",
258 "sql",
259 "sqlanywhere",
260 "sqlite",
261 "sqlserver",
262 "sqlsrv"
263 ],
264 "support": {
265 "issues": "https://github.com/doctrine/dbal/issues",
266 "source": "https://github.com/doctrine/dbal/tree/2.13.9"
267 },
268 "funding": [
269 {
270 "url": "https://www.doctrine-project.org/sponsorship.html",
271 "type": "custom"
272 },
273 {
274 "url": "https://www.patreon.com/phpdoctrine",
275 "type": "patreon"
276 },
277 {
278 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
279 "type": "tidelift"
280 }
281 ],
282 "time": "2022-05-02T20:28:55+00:00"
283 },
284 {
285 "name": "doctrine/deprecations",
286 "version": "v1.1.1",
287 "source": {
288 "type": "git",
289 "url": "https://github.com/doctrine/deprecations.git",
290 "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3"
291 },
292 "dist": {
293 "type": "zip",
294 "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
295 "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
296 "shasum": ""
297 },
298 "require": {
299 "php": "^7.1 || ^8.0"
300 },
301 "require-dev": {
302 "doctrine/coding-standard": "^9",
303 "phpstan/phpstan": "1.4.10 || 1.10.15",
304 "phpstan/phpstan-phpunit": "^1.0",
305 "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
306 "psalm/plugin-phpunit": "0.18.4",
307 "psr/log": "^1 || ^2 || ^3",
308 "vimeo/psalm": "4.30.0 || 5.12.0"
309 },
310 "suggest": {
311 "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
312 },
313 "type": "library",
314 "autoload": {
315 "psr-4": {
316 "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
317 }
318 },
319 "notification-url": "https://packagist.org/downloads/",
320 "license": [
321 "MIT"
322 ],
323 "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
324 "homepage": "https://www.doctrine-project.org/",
325 "support": {
326 "issues": "https://github.com/doctrine/deprecations/issues",
327 "source": "https://github.com/doctrine/deprecations/tree/v1.1.1"
328 },
329 "time": "2023-06-03T09:27:29+00:00"
330 },
331 {
332 "name": "doctrine/event-manager",
333 "version": "1.2.0",
334 "source": {
335 "type": "git",
336 "url": "https://github.com/doctrine/event-manager.git",
337 "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520"
338 },
339 "dist": {
340 "type": "zip",
341 "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520",
342 "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520",
343 "shasum": ""
344 },
345 "require": {
346 "doctrine/deprecations": "^0.5.3 || ^1",
347 "php": "^7.1 || ^8.0"
348 },
349 "conflict": {
350 "doctrine/common": "<2.9"
351 },
352 "require-dev": {
353 "doctrine/coding-standard": "^9 || ^10",
354 "phpstan/phpstan": "~1.4.10 || ^1.8.8",
355 "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
356 "vimeo/psalm": "^4.24"
357 },
358 "type": "library",
359 "autoload": {
360 "psr-4": {
361 "Doctrine\\Common\\": "src"
362 }
363 },
364 "notification-url": "https://packagist.org/downloads/",
365 "license": [
366 "MIT"
367 ],
368 "authors": [
369 {
370 "name": "Guilherme Blanco",
371 "email": "guilhermeblanco@gmail.com"
372 },
373 {
374 "name": "Roman Borschel",
375 "email": "roman@code-factory.org"
376 },
377 {
378 "name": "Benjamin Eberlei",
379 "email": "kontakt@beberlei.de"
380 },
381 {
382 "name": "Jonathan Wage",
383 "email": "jonwage@gmail.com"
384 },
385 {
386 "name": "Johannes Schmitt",
387 "email": "schmittjoh@gmail.com"
388 },
389 {
390 "name": "Marco Pivetta",
391 "email": "ocramius@gmail.com"
392 }
393 ],
394 "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
395 "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
396 "keywords": [
397 "event",
398 "event dispatcher",
399 "event manager",
400 "event system",
401 "events"
402 ],
403 "support": {
404 "issues": "https://github.com/doctrine/event-manager/issues",
405 "source": "https://github.com/doctrine/event-manager/tree/1.2.0"
406 },
407 "funding": [
408 {
409 "url": "https://www.doctrine-project.org/sponsorship.html",
410 "type": "custom"
411 },
412 {
413 "url": "https://www.patreon.com/phpdoctrine",
414 "type": "patreon"
415 },
416 {
417 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
418 "type": "tidelift"
419 }
420 ],
421 "time": "2022-10-12T20:51:15+00:00"
422 },
423 {
424 "name": "doctrine/migrations",
425 "version": "2.3.5",
426 "source": {
427 "type": "git",
428 "url": "https://github.com/doctrine/migrations.git",
429 "reference": "28d92a34348fee5daeb80879e56461b2e862fc05"
430 },
431 "dist": {
432 "type": "zip",
433 "url": "https://api.github.com/repos/doctrine/migrations/zipball/28d92a34348fee5daeb80879e56461b2e862fc05",
434 "reference": "28d92a34348fee5daeb80879e56461b2e862fc05",
435 "shasum": ""
436 },
437 "require": {
438 "composer/package-versions-deprecated": "^1.8",
439 "doctrine/dbal": "^2.9",
440 "friendsofphp/proxy-manager-lts": "^1.0",
441 "php": "^7.1 || ^8.0",
442 "symfony/console": "^3.4||^4.4.16||^5.0",
443 "symfony/stopwatch": "^3.4||^4.0||^5.0"
444 },
445 "require-dev": {
446 "doctrine/coding-standard": "^8.2",
447 "doctrine/orm": "^2.6",
448 "ext-pdo_sqlite": "*",
449 "jdorn/sql-formatter": "^1.1",
450 "mikey179/vfsstream": "^1.6",
451 "phpstan/phpstan": "^0.12",
452 "phpstan/phpstan-deprecation-rules": "^0.12",
453 "phpstan/phpstan-phpunit": "^0.12",
454 "phpstan/phpstan-strict-rules": "^0.12",
455 "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4",
456 "symfony/cache": "^4.4. || ^5.3",
457 "symfony/process": "^3.4||^4.0||^5.0",
458 "symfony/yaml": "^3.4||^4.0||^5.0"
459 },
460 "suggest": {
461 "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.",
462 "symfony/yaml": "Allows the use of yaml for migration configuration files."
463 },
464 "bin": [
465 "bin/doctrine-migrations"
466 ],
467 "type": "library",
468 "autoload": {
469 "psr-4": {
470 "Doctrine\\Migrations\\": "lib/Doctrine/Migrations"
471 }
472 },
473 "notification-url": "https://packagist.org/downloads/",
474 "license": [
475 "MIT"
476 ],
477 "authors": [
478 {
479 "name": "Benjamin Eberlei",
480 "email": "kontakt@beberlei.de"
481 },
482 {
483 "name": "Jonathan Wage",
484 "email": "jonwage@gmail.com"
485 },
486 {
487 "name": "Michael Simonson",
488 "email": "contact@mikesimonson.com"
489 }
490 ],
491 "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.",
492 "homepage": "https://www.doctrine-project.org/projects/migrations.html",
493 "keywords": [
494 "database",
495 "dbal",
496 "migrations",
497 "php"
498 ],
499 "support": {
500 "issues": "https://github.com/doctrine/migrations/issues",
501 "source": "https://github.com/doctrine/migrations/tree/2.3.5"
502 },
503 "funding": [
504 {
505 "url": "https://www.doctrine-project.org/sponsorship.html",
506 "type": "custom"
507 },
508 {
509 "url": "https://www.patreon.com/phpdoctrine",
510 "type": "patreon"
511 },
512 {
513 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations",
514 "type": "tidelift"
515 }
516 ],
517 "time": "2021-10-19T19:55:20+00:00"
518 },
519 {
520 "name": "friendsofphp/proxy-manager-lts",
521 "version": "v1.0.16",
522 "source": {
523 "type": "git",
524 "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git",
525 "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c"
526 },
527 "dist": {
528 "type": "zip",
529 "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/ecadbdc9052e4ad08c60c8a02268712e50427f7c",
530 "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c",
531 "shasum": ""
532 },
533 "require": {
534 "laminas/laminas-code": "~3.4.1|^4.0",
535 "php": ">=7.1",
536 "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0"
537 },
538 "conflict": {
539 "laminas/laminas-stdlib": "<3.2.1",
540 "zendframework/zend-stdlib": "<3.2.1"
541 },
542 "replace": {
543 "ocramius/proxy-manager": "^2.1"
544 },
545 "require-dev": {
546 "ext-phar": "*",
547 "symfony/phpunit-bridge": "^5.4|^6.0|^7.0"
548 },
549 "type": "library",
550 "extra": {
551 "thanks": {
552 "name": "ocramius/proxy-manager",
553 "url": "https://github.com/Ocramius/ProxyManager"
554 }
555 },
556 "autoload": {
557 "psr-4": {
558 "ProxyManager\\": "src/ProxyManager"
559 }
560 },
561 "notification-url": "https://packagist.org/downloads/",
562 "license": [
563 "MIT"
564 ],
565 "authors": [
566 {
567 "name": "Marco Pivetta",
568 "email": "ocramius@gmail.com",
569 "homepage": "https://ocramius.github.io/"
570 },
571 {
572 "name": "Nicolas Grekas",
573 "email": "p@tchwork.com"
574 }
575 ],
576 "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager",
577 "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts",
578 "keywords": [
579 "aop",
580 "lazy loading",
581 "proxy",
582 "proxy pattern",
583 "service proxies"
584 ],
585 "support": {
586 "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues",
587 "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.16"
588 },
589 "funding": [
590 {
591 "url": "https://github.com/Ocramius",
592 "type": "github"
593 },
594 {
595 "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager",
596 "type": "tidelift"
597 }
598 ],
599 "time": "2023-05-24T07:17:17+00:00"
600 },
601 {
602 "name": "laminas/laminas-code",
603 "version": "4.7.1",
604 "source": {
605 "type": "git",
606 "url": "https://github.com/laminas/laminas-code.git",
607 "reference": "91aabc066d5620428120800c0eafc0411e441a62"
608 },
609 "dist": {
610 "type": "zip",
611 "url": "https://api.github.com/repos/laminas/laminas-code/zipball/91aabc066d5620428120800c0eafc0411e441a62",
612 "reference": "91aabc066d5620428120800c0eafc0411e441a62",
613 "shasum": ""
614 },
615 "require": {
616 "php": ">=7.4, <8.2"
617 },
618 "require-dev": {
619 "doctrine/annotations": "^1.13.2",
620 "ext-phar": "*",
621 "laminas/laminas-coding-standard": "^2.3.0",
622 "laminas/laminas-stdlib": "^3.6.1",
623 "phpunit/phpunit": "^9.5.10",
624 "psalm/plugin-phpunit": "^0.17.0",
625 "vimeo/psalm": "^4.13.1"
626 },
627 "suggest": {
628 "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
629 "laminas/laminas-stdlib": "Laminas\\Stdlib component"
630 },
631 "type": "library",
632 "autoload": {
633 "files": [
634 "polyfill/ReflectionEnumPolyfill.php"
635 ],
636 "psr-4": {
637 "Laminas\\Code\\": "src/"
638 }
639 },
640 "notification-url": "https://packagist.org/downloads/",
641 "license": [
642 "BSD-3-Clause"
643 ],
644 "description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
645 "homepage": "https://laminas.dev",
646 "keywords": [
647 "code",
648 "laminas",
649 "laminasframework"
650 ],
651 "support": {
652 "chat": "https://laminas.dev/chat",
653 "docs": "https://docs.laminas.dev/laminas-code/",
654 "forum": "https://discourse.laminas.dev",
655 "issues": "https://github.com/laminas/laminas-code/issues",
656 "rss": "https://github.com/laminas/laminas-code/releases.atom",
657 "source": "https://github.com/laminas/laminas-code"
658 },
659 "funding": [
660 {
661 "url": "https://funding.communitybridge.org/projects/laminas-project",
662 "type": "community_bridge"
663 }
664 ],
665 "time": "2022-11-21T01:32:31+00:00"
666 },
667 {
668 "name": "paragonie/constant_time_encoding",
669 "version": "v2.6.3",
670 "source": {
671 "type": "git",
672 "url": "https://github.com/paragonie/constant_time_encoding.git",
673 "reference": "58c3f47f650c94ec05a151692652a868995d2938"
674 },
675 "dist": {
676 "type": "zip",
677 "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
678 "reference": "58c3f47f650c94ec05a151692652a868995d2938",
679 "shasum": ""
680 },
681 "require": {
682 "php": "^7|^8"
683 },
684 "require-dev": {
685 "phpunit/phpunit": "^6|^7|^8|^9",
686 "vimeo/psalm": "^1|^2|^3|^4"
687 },
688 "type": "library",
689 "autoload": {
690 "psr-4": {
691 "ParagonIE\\ConstantTime\\": "src/"
692 }
693 },
694 "notification-url": "https://packagist.org/downloads/",
695 "license": [
696 "MIT"
697 ],
698 "authors": [
699 {
700 "name": "Paragon Initiative Enterprises",
701 "email": "security@paragonie.com",
702 "homepage": "https://paragonie.com",
703 "role": "Maintainer"
704 },
705 {
706 "name": "Steve 'Sc00bz' Thomas",
707 "email": "steve@tobtu.com",
708 "homepage": "https://www.tobtu.com",
709 "role": "Original Developer"
710 }
711 ],
712 "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
713 "keywords": [
714 "base16",
715 "base32",
716 "base32_decode",
717 "base32_encode",
718 "base64",
719 "base64_decode",
720 "base64_encode",
721 "bin2hex",
722 "encoding",
723 "hex",
724 "hex2bin",
725 "rfc4648"
726 ],
727 "support": {
728 "email": "info@paragonie.com",
729 "issues": "https://github.com/paragonie/constant_time_encoding/issues",
730 "source": "https://github.com/paragonie/constant_time_encoding"
731 },
732 "time": "2022-06-14T06:56:20+00:00"
733 },
734 {
735 "name": "paragonie/random_compat",
736 "version": "v9.99.100",
737 "source": {
738 "type": "git",
739 "url": "https://github.com/paragonie/random_compat.git",
740 "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
741 },
742 "dist": {
743 "type": "zip",
744 "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
745 "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
746 "shasum": ""
747 },
748 "require": {
749 "php": ">= 7"
750 },
751 "require-dev": {
752 "phpunit/phpunit": "4.*|5.*",
753 "vimeo/psalm": "^1"
754 },
755 "suggest": {
756 "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
757 },
758 "type": "library",
759 "notification-url": "https://packagist.org/downloads/",
760 "license": [
761 "MIT"
762 ],
763 "authors": [
764 {
765 "name": "Paragon Initiative Enterprises",
766 "email": "security@paragonie.com",
767 "homepage": "https://paragonie.com"
768 }
769 ],
770 "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
771 "keywords": [
772 "csprng",
773 "polyfill",
774 "pseudorandom",
775 "random"
776 ],
777 "support": {
778 "email": "info@paragonie.com",
779 "issues": "https://github.com/paragonie/random_compat/issues",
780 "source": "https://github.com/paragonie/random_compat"
781 },
782 "time": "2020-10-15T08:29:30+00:00"
783 },
784 {
785 "name": "php-amqplib/php-amqplib",
786 "version": "v3.5.4",
787 "source": {
788 "type": "git",
789 "url": "https://github.com/php-amqplib/php-amqplib.git",
790 "reference": "1aecbd182b35eb039667c50d7d92d71f105be779"
791 },
792 "dist": {
793 "type": "zip",
794 "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/1aecbd182b35eb039667c50d7d92d71f105be779",
795 "reference": "1aecbd182b35eb039667c50d7d92d71f105be779",
796 "shasum": ""
797 },
798 "require": {
799 "ext-mbstring": "*",
800 "ext-sockets": "*",
801 "php": "^7.1||^8.0",
802 "phpseclib/phpseclib": "^2.0|^3.0"
803 },
804 "conflict": {
805 "php": "7.4.0 - 7.4.1"
806 },
807 "replace": {
808 "videlalvaro/php-amqplib": "self.version"
809 },
810 "require-dev": {
811 "ext-curl": "*",
812 "nategood/httpful": "^0.2.20",
813 "phpunit/phpunit": "^7.5|^9.5",
814 "squizlabs/php_codesniffer": "^3.6"
815 },
816 "type": "library",
817 "extra": {
818 "branch-alias": {
819 "dev-master": "3.0-dev"
820 }
821 },
822 "autoload": {
823 "psr-4": {
824 "PhpAmqpLib\\": "PhpAmqpLib/"
825 }
826 },
827 "notification-url": "https://packagist.org/downloads/",
828 "license": [
829 "LGPL-2.1-or-later"
830 ],
831 "authors": [
832 {
833 "name": "Alvaro Videla",
834 "role": "Original Maintainer"
835 },
836 {
837 "name": "Raúl Araya",
838 "email": "nubeiro@gmail.com",
839 "role": "Maintainer"
840 },
841 {
842 "name": "Luke Bakken",
843 "email": "luke@bakken.io",
844 "role": "Maintainer"
845 },
846 {
847 "name": "Ramūnas Dronga",
848 "email": "github@ramuno.lt",
849 "role": "Maintainer"
850 }
851 ],
852 "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
853 "homepage": "https://github.com/php-amqplib/php-amqplib/",
854 "keywords": [
855 "message",
856 "queue",
857 "rabbitmq"
858 ],
859 "support": {
860 "issues": "https://github.com/php-amqplib/php-amqplib/issues",
861 "source": "https://github.com/php-amqplib/php-amqplib/tree/v3.5.4"
862 },
863 "time": "2023-07-01T11:25:08+00:00"
864 },
865 {
866 "name": "phpseclib/phpseclib",
867 "version": "3.0.21",
868 "source": {
869 "type": "git",
870 "url": "https://github.com/phpseclib/phpseclib.git",
871 "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1"
872 },
873 "dist": {
874 "type": "zip",
875 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
876 "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
877 "shasum": ""
878 },
879 "require": {
880 "paragonie/constant_time_encoding": "^1|^2",
881 "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
882 "php": ">=5.6.1"
883 },
884 "require-dev": {
885 "phpunit/phpunit": "*"
886 },
887 "suggest": {
888 "ext-dom": "Install the DOM extension to load XML formatted public keys.",
889 "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
890 "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
891 "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
892 "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
893 },
894 "type": "library",
895 "autoload": {
896 "files": [
897 "phpseclib/bootstrap.php"
898 ],
899 "psr-4": {
900 "phpseclib3\\": "phpseclib/"
901 }
902 },
903 "notification-url": "https://packagist.org/downloads/",
904 "license": [
905 "MIT"
906 ],
907 "authors": [
908 {
909 "name": "Jim Wigginton",
910 "email": "terrafrost@php.net",
911 "role": "Lead Developer"
912 },
913 {
914 "name": "Patrick Monnerat",
915 "email": "pm@datasphere.ch",
916 "role": "Developer"
917 },
918 {
919 "name": "Andreas Fischer",
920 "email": "bantu@phpbb.com",
921 "role": "Developer"
922 },
923 {
924 "name": "Hans-Jürgen Petrich",
925 "email": "petrich@tronic-media.com",
926 "role": "Developer"
927 },
928 {
929 "name": "Graham Campbell",
930 "email": "graham@alt-three.com",
931 "role": "Developer"
932 }
933 ],
934 "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
935 "homepage": "http://phpseclib.sourceforge.net",
936 "keywords": [
937 "BigInteger",
938 "aes",
939 "asn.1",
940 "asn1",
941 "blowfish",
942 "crypto",
943 "cryptography",
944 "encryption",
945 "rsa",
946 "security",
947 "sftp",
948 "signature",
949 "signing",
950 "ssh",
951 "twofish",
952 "x.509",
953 "x509"
954 ],
955 "support": {
956 "issues": "https://github.com/phpseclib/phpseclib/issues",
957 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.21"
958 },
959 "funding": [
960 {
961 "url": "https://github.com/terrafrost",
962 "type": "github"
963 },
964 {
965 "url": "https://www.patreon.com/phpseclib",
966 "type": "patreon"
967 },
968 {
969 "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
970 "type": "tidelift"
971 }
972 ],
973 "time": "2023-07-09T15:24:48+00:00"
974 },
975 {
976 "name": "psr/container",
977 "version": "2.0.2",
978 "source": {
979 "type": "git",
980 "url": "https://github.com/php-fig/container.git",
981 "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
982 },
983 "dist": {
984 "type": "zip",
985 "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
986 "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
987 "shasum": ""
988 },
989 "require": {
990 "php": ">=7.4.0"
991 },
992 "type": "library",
993 "extra": {
994 "branch-alias": {
995 "dev-master": "2.0.x-dev"
996 }
997 },
998 "autoload": {
999 "psr-4": {
1000 "Psr\\Container\\": "src/"
1001 }
1002 },
1003 "notification-url": "https://packagist.org/downloads/",
1004 "license": [
1005 "MIT"
1006 ],
1007 "authors": [
1008 {
1009 "name": "PHP-FIG",
1010 "homepage": "https://www.php-fig.org/"
1011 }
1012 ],
1013 "description": "Common Container Interface (PHP FIG PSR-11)",
1014 "homepage": "https://github.com/php-fig/container",
1015 "keywords": [
1016 "PSR-11",
1017 "container",
1018 "container-interface",
1019 "container-interop",
1020 "psr"
1021 ],
1022 "support": {
1023 "issues": "https://github.com/php-fig/container/issues",
1024 "source": "https://github.com/php-fig/container/tree/2.0.2"
1025 },
1026 "time": "2021-11-05T16:47:00+00:00"
1027 },
1028 {
1029 "name": "symfony/console",
1030 "version": "v5.4.26",
1031 "source": {
1032 "type": "git",
1033 "url": "https://github.com/symfony/console.git",
1034 "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273"
1035 },
1036 "dist": {
1037 "type": "zip",
1038 "url": "https://api.github.com/repos/symfony/console/zipball/b504a3d266ad2bb632f196c0936ef2af5ff6e273",
1039 "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273",
1040 "shasum": ""
1041 },
1042 "require": {
1043 "php": ">=7.2.5",
1044 "symfony/deprecation-contracts": "^2.1|^3",
1045 "symfony/polyfill-mbstring": "~1.0",
1046 "symfony/polyfill-php73": "^1.9",
1047 "symfony/polyfill-php80": "^1.16",
1048 "symfony/service-contracts": "^1.1|^2|^3",
1049 "symfony/string": "^5.1|^6.0"
1050 },
1051 "conflict": {
1052 "psr/log": ">=3",
1053 "symfony/dependency-injection": "<4.4",
1054 "symfony/dotenv": "<5.1",
1055 "symfony/event-dispatcher": "<4.4",
1056 "symfony/lock": "<4.4",
1057 "symfony/process": "<4.4"
1058 },
1059 "provide": {
1060 "psr/log-implementation": "1.0|2.0"
1061 },
1062 "require-dev": {
1063 "psr/log": "^1|^2",
1064 "symfony/config": "^4.4|^5.0|^6.0",
1065 "symfony/dependency-injection": "^4.4|^5.0|^6.0",
1066 "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
1067 "symfony/lock": "^4.4|^5.0|^6.0",
1068 "symfony/process": "^4.4|^5.0|^6.0",
1069 "symfony/var-dumper": "^4.4|^5.0|^6.0"
1070 },
1071 "suggest": {
1072 "psr/log": "For using the console logger",
1073 "symfony/event-dispatcher": "",
1074 "symfony/lock": "",
1075 "symfony/process": ""
1076 },
1077 "type": "library",
1078 "autoload": {
1079 "psr-4": {
1080 "Symfony\\Component\\Console\\": ""
1081 },
1082 "exclude-from-classmap": [
1083 "/Tests/"
1084 ]
1085 },
1086 "notification-url": "https://packagist.org/downloads/",
1087 "license": [
1088 "MIT"
1089 ],
1090 "authors": [
1091 {
1092 "name": "Fabien Potencier",
1093 "email": "fabien@symfony.com"
1094 },
1095 {
1096 "name": "Symfony Community",
1097 "homepage": "https://symfony.com/contributors"
1098 }
1099 ],
1100 "description": "Eases the creation of beautiful and testable command line interfaces",
1101 "homepage": "https://symfony.com",
1102 "keywords": [
1103 "cli",
1104 "command-line",
1105 "console",
1106 "terminal"
1107 ],
1108 "support": {
1109 "source": "https://github.com/symfony/console/tree/v5.4.26"
1110 },
1111 "funding": [
1112 {
1113 "url": "https://symfony.com/sponsor",
1114 "type": "custom"
1115 },
1116 {
1117 "url": "https://github.com/fabpot",
1118 "type": "github"
1119 },
1120 {
1121 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1122 "type": "tidelift"
1123 }
1124 ],
1125 "time": "2023-07-19T20:11:33+00:00"
1126 },
1127 {
1128 "name": "symfony/deprecation-contracts",
1129 "version": "v3.0.2",
1130 "source": {
1131 "type": "git",
1132 "url": "https://github.com/symfony/deprecation-contracts.git",
1133 "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
1134 },
1135 "dist": {
1136 "type": "zip",
1137 "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
1138 "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
1139 "shasum": ""
1140 },
1141 "require": {
1142 "php": ">=8.0.2"
1143 },
1144 "type": "library",
1145 "extra": {
1146 "branch-alias": {
1147 "dev-main": "3.0-dev"
1148 },
1149 "thanks": {
1150 "name": "symfony/contracts",
1151 "url": "https://github.com/symfony/contracts"
1152 }
1153 },
1154 "autoload": {
1155 "files": [
1156 "function.php"
1157 ]
1158 },
1159 "notification-url": "https://packagist.org/downloads/",
1160 "license": [
1161 "MIT"
1162 ],
1163 "authors": [
1164 {
1165 "name": "Nicolas Grekas",
1166 "email": "p@tchwork.com"
1167 },
1168 {
1169 "name": "Symfony Community",
1170 "homepage": "https://symfony.com/contributors"
1171 }
1172 ],
1173 "description": "A generic function and convention to trigger deprecation notices",
1174 "homepage": "https://symfony.com",
1175 "support": {
1176 "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2"
1177 },
1178 "funding": [
1179 {
1180 "url": "https://symfony.com/sponsor",
1181 "type": "custom"
1182 },
1183 {
1184 "url": "https://github.com/fabpot",
1185 "type": "github"
1186 },
1187 {
1188 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1189 "type": "tidelift"
1190 }
1191 ],
1192 "time": "2022-01-02T09:55:41+00:00"
1193 },
1194 {
1195 "name": "symfony/filesystem",
1196 "version": "v6.0.19",
1197 "source": {
1198 "type": "git",
1199 "url": "https://github.com/symfony/filesystem.git",
1200 "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214"
1201 },
1202 "dist": {
1203 "type": "zip",
1204 "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
1205 "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
1206 "shasum": ""
1207 },
1208 "require": {
1209 "php": ">=8.0.2",
1210 "symfony/polyfill-ctype": "~1.8",
1211 "symfony/polyfill-mbstring": "~1.8"
1212 },
1213 "type": "library",
1214 "autoload": {
1215 "psr-4": {
1216 "Symfony\\Component\\Filesystem\\": ""
1217 },
1218 "exclude-from-classmap": [
1219 "/Tests/"
1220 ]
1221 },
1222 "notification-url": "https://packagist.org/downloads/",
1223 "license": [
1224 "MIT"
1225 ],
1226 "authors": [
1227 {
1228 "name": "Fabien Potencier",
1229 "email": "fabien@symfony.com"
1230 },
1231 {
1232 "name": "Symfony Community",
1233 "homepage": "https://symfony.com/contributors"
1234 }
1235 ],
1236 "description": "Provides basic utilities for the filesystem",
1237 "homepage": "https://symfony.com",
1238 "support": {
1239 "source": "https://github.com/symfony/filesystem/tree/v6.0.19"
1240 },
1241 "funding": [
1242 {
1243 "url": "https://symfony.com/sponsor",
1244 "type": "custom"
1245 },
1246 {
1247 "url": "https://github.com/fabpot",
1248 "type": "github"
1249 },
1250 {
1251 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1252 "type": "tidelift"
1253 }
1254 ],
1255 "time": "2023-01-20T17:44:14+00:00"
1256 },
1257 {
1258 "name": "symfony/polyfill-ctype",
1259 "version": "v1.27.0",
1260 "source": {
1261 "type": "git",
1262 "url": "https://github.com/symfony/polyfill-ctype.git",
1263 "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
1264 },
1265 "dist": {
1266 "type": "zip",
1267 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
1268 "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
1269 "shasum": ""
1270 },
1271 "require": {
1272 "php": ">=7.1"
1273 },
1274 "provide": {
1275 "ext-ctype": "*"
1276 },
1277 "suggest": {
1278 "ext-ctype": "For best performance"
1279 },
1280 "type": "library",
1281 "extra": {
1282 "branch-alias": {
1283 "dev-main": "1.27-dev"
1284 },
1285 "thanks": {
1286 "name": "symfony/polyfill",
1287 "url": "https://github.com/symfony/polyfill"
1288 }
1289 },
1290 "autoload": {
1291 "files": [
1292 "bootstrap.php"
1293 ],
1294 "psr-4": {
1295 "Symfony\\Polyfill\\Ctype\\": ""
1296 }
1297 },
1298 "notification-url": "https://packagist.org/downloads/",
1299 "license": [
1300 "MIT"
1301 ],
1302 "authors": [
1303 {
1304 "name": "Gert de Pagter",
1305 "email": "BackEndTea@gmail.com"
1306 },
1307 {
1308 "name": "Symfony Community",
1309 "homepage": "https://symfony.com/contributors"
1310 }
1311 ],
1312 "description": "Symfony polyfill for ctype functions",
1313 "homepage": "https://symfony.com",
1314 "keywords": [
1315 "compatibility",
1316 "ctype",
1317 "polyfill",
1318 "portable"
1319 ],
1320 "support": {
1321 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
1322 },
1323 "funding": [
1324 {
1325 "url": "https://symfony.com/sponsor",
1326 "type": "custom"
1327 },
1328 {
1329 "url": "https://github.com/fabpot",
1330 "type": "github"
1331 },
1332 {
1333 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1334 "type": "tidelift"
1335 }
1336 ],
1337 "time": "2022-11-03T14:55:06+00:00"
1338 },
1339 {
1340 "name": "symfony/polyfill-intl-grapheme",
1341 "version": "v1.27.0",
1342 "source": {
1343 "type": "git",
1344 "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
1345 "reference": "511a08c03c1960e08a883f4cffcacd219b758354"
1346 },
1347 "dist": {
1348 "type": "zip",
1349 "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
1350 "reference": "511a08c03c1960e08a883f4cffcacd219b758354",
1351 "shasum": ""
1352 },
1353 "require": {
1354 "php": ">=7.1"
1355 },
1356 "suggest": {
1357 "ext-intl": "For best performance"
1358 },
1359 "type": "library",
1360 "extra": {
1361 "branch-alias": {
1362 "dev-main": "1.27-dev"
1363 },
1364 "thanks": {
1365 "name": "symfony/polyfill",
1366 "url": "https://github.com/symfony/polyfill"
1367 }
1368 },
1369 "autoload": {
1370 "files": [
1371 "bootstrap.php"
1372 ],
1373 "psr-4": {
1374 "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
1375 }
1376 },
1377 "notification-url": "https://packagist.org/downloads/",
1378 "license": [
1379 "MIT"
1380 ],
1381 "authors": [
1382 {
1383 "name": "Nicolas Grekas",
1384 "email": "p@tchwork.com"
1385 },
1386 {
1387 "name": "Symfony Community",
1388 "homepage": "https://symfony.com/contributors"
1389 }
1390 ],
1391 "description": "Symfony polyfill for intl's grapheme_* functions",
1392 "homepage": "https://symfony.com",
1393 "keywords": [
1394 "compatibility",
1395 "grapheme",
1396 "intl",
1397 "polyfill",
1398 "portable",
1399 "shim"
1400 ],
1401 "support": {
1402 "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
1403 },
1404 "funding": [
1405 {
1406 "url": "https://symfony.com/sponsor",
1407 "type": "custom"
1408 },
1409 {
1410 "url": "https://github.com/fabpot",
1411 "type": "github"
1412 },
1413 {
1414 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1415 "type": "tidelift"
1416 }
1417 ],
1418 "time": "2022-11-03T14:55:06+00:00"
1419 },
1420 {
1421 "name": "symfony/polyfill-intl-normalizer",
1422 "version": "v1.27.0",
1423 "source": {
1424 "type": "git",
1425 "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
1426 "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
1427 },
1428 "dist": {
1429 "type": "zip",
1430 "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
1431 "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
1432 "shasum": ""
1433 },
1434 "require": {
1435 "php": ">=7.1"
1436 },
1437 "suggest": {
1438 "ext-intl": "For best performance"
1439 },
1440 "type": "library",
1441 "extra": {
1442 "branch-alias": {
1443 "dev-main": "1.27-dev"
1444 },
1445 "thanks": {
1446 "name": "symfony/polyfill",
1447 "url": "https://github.com/symfony/polyfill"
1448 }
1449 },
1450 "autoload": {
1451 "files": [
1452 "bootstrap.php"
1453 ],
1454 "psr-4": {
1455 "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
1456 },
1457 "classmap": [
1458 "Resources/stubs"
1459 ]
1460 },
1461 "notification-url": "https://packagist.org/downloads/",
1462 "license": [
1463 "MIT"
1464 ],
1465 "authors": [
1466 {
1467 "name": "Nicolas Grekas",
1468 "email": "p@tchwork.com"
1469 },
1470 {
1471 "name": "Symfony Community",
1472 "homepage": "https://symfony.com/contributors"
1473 }
1474 ],
1475 "description": "Symfony polyfill for intl's Normalizer class and related functions",
1476 "homepage": "https://symfony.com",
1477 "keywords": [
1478 "compatibility",
1479 "intl",
1480 "normalizer",
1481 "polyfill",
1482 "portable",
1483 "shim"
1484 ],
1485 "support": {
1486 "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
1487 },
1488 "funding": [
1489 {
1490 "url": "https://symfony.com/sponsor",
1491 "type": "custom"
1492 },
1493 {
1494 "url": "https://github.com/fabpot",
1495 "type": "github"
1496 },
1497 {
1498 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1499 "type": "tidelift"
1500 }
1501 ],
1502 "time": "2022-11-03T14:55:06+00:00"
1503 },
1504 {
1505 "name": "symfony/polyfill-mbstring",
1506 "version": "v1.27.0",
1507 "source": {
1508 "type": "git",
1509 "url": "https://github.com/symfony/polyfill-mbstring.git",
1510 "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
1511 },
1512 "dist": {
1513 "type": "zip",
1514 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
1515 "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
1516 "shasum": ""
1517 },
1518 "require": {
1519 "php": ">=7.1"
1520 },
1521 "provide": {
1522 "ext-mbstring": "*"
1523 },
1524 "suggest": {
1525 "ext-mbstring": "For best performance"
1526 },
1527 "type": "library",
1528 "extra": {
1529 "branch-alias": {
1530 "dev-main": "1.27-dev"
1531 },
1532 "thanks": {
1533 "name": "symfony/polyfill",
1534 "url": "https://github.com/symfony/polyfill"
1535 }
1536 },
1537 "autoload": {
1538 "files": [
1539 "bootstrap.php"
1540 ],
1541 "psr-4": {
1542 "Symfony\\Polyfill\\Mbstring\\": ""
1543 }
1544 },
1545 "notification-url": "https://packagist.org/downloads/",
1546 "license": [
1547 "MIT"
1548 ],
1549 "authors": [
1550 {
1551 "name": "Nicolas Grekas",
1552 "email": "p@tchwork.com"
1553 },
1554 {
1555 "name": "Symfony Community",
1556 "homepage": "https://symfony.com/contributors"
1557 }
1558 ],
1559 "description": "Symfony polyfill for the Mbstring extension",
1560 "homepage": "https://symfony.com",
1561 "keywords": [
1562 "compatibility",
1563 "mbstring",
1564 "polyfill",
1565 "portable",
1566 "shim"
1567 ],
1568 "support": {
1569 "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
1570 },
1571 "funding": [
1572 {
1573 "url": "https://symfony.com/sponsor",
1574 "type": "custom"
1575 },
1576 {
1577 "url": "https://github.com/fabpot",
1578 "type": "github"
1579 },
1580 {
1581 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1582 "type": "tidelift"
1583 }
1584 ],
1585 "time": "2022-11-03T14:55:06+00:00"
1586 },
1587 {
1588 "name": "symfony/polyfill-php73",
1589 "version": "v1.27.0",
1590 "source": {
1591 "type": "git",
1592 "url": "https://github.com/symfony/polyfill-php73.git",
1593 "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
1594 },
1595 "dist": {
1596 "type": "zip",
1597 "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
1598 "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
1599 "shasum": ""
1600 },
1601 "require": {
1602 "php": ">=7.1"
1603 },
1604 "type": "library",
1605 "extra": {
1606 "branch-alias": {
1607 "dev-main": "1.27-dev"
1608 },
1609 "thanks": {
1610 "name": "symfony/polyfill",
1611 "url": "https://github.com/symfony/polyfill"
1612 }
1613 },
1614 "autoload": {
1615 "files": [
1616 "bootstrap.php"
1617 ],
1618 "psr-4": {
1619 "Symfony\\Polyfill\\Php73\\": ""
1620 },
1621 "classmap": [
1622 "Resources/stubs"
1623 ]
1624 },
1625 "notification-url": "https://packagist.org/downloads/",
1626 "license": [
1627 "MIT"
1628 ],
1629 "authors": [
1630 {
1631 "name": "Nicolas Grekas",
1632 "email": "p@tchwork.com"
1633 },
1634 {
1635 "name": "Symfony Community",
1636 "homepage": "https://symfony.com/contributors"
1637 }
1638 ],
1639 "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
1640 "homepage": "https://symfony.com",
1641 "keywords": [
1642 "compatibility",
1643 "polyfill",
1644 "portable",
1645 "shim"
1646 ],
1647 "support": {
1648 "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
1649 },
1650 "funding": [
1651 {
1652 "url": "https://symfony.com/sponsor",
1653 "type": "custom"
1654 },
1655 {
1656 "url": "https://github.com/fabpot",
1657 "type": "github"
1658 },
1659 {
1660 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1661 "type": "tidelift"
1662 }
1663 ],
1664 "time": "2022-11-03T14:55:06+00:00"
1665 },
1666 {
1667 "name": "symfony/polyfill-php80",
1668 "version": "v1.27.0",
1669 "source": {
1670 "type": "git",
1671 "url": "https://github.com/symfony/polyfill-php80.git",
1672 "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
1673 },
1674 "dist": {
1675 "type": "zip",
1676 "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
1677 "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
1678 "shasum": ""
1679 },
1680 "require": {
1681 "php": ">=7.1"
1682 },
1683 "type": "library",
1684 "extra": {
1685 "branch-alias": {
1686 "dev-main": "1.27-dev"
1687 },
1688 "thanks": {
1689 "name": "symfony/polyfill",
1690 "url": "https://github.com/symfony/polyfill"
1691 }
1692 },
1693 "autoload": {
1694 "files": [
1695 "bootstrap.php"
1696 ],
1697 "psr-4": {
1698 "Symfony\\Polyfill\\Php80\\": ""
1699 },
1700 "classmap": [
1701 "Resources/stubs"
1702 ]
1703 },
1704 "notification-url": "https://packagist.org/downloads/",
1705 "license": [
1706 "MIT"
1707 ],
1708 "authors": [
1709 {
1710 "name": "Ion Bazan",
1711 "email": "ion.bazan@gmail.com"
1712 },
1713 {
1714 "name": "Nicolas Grekas",
1715 "email": "p@tchwork.com"
1716 },
1717 {
1718 "name": "Symfony Community",
1719 "homepage": "https://symfony.com/contributors"
1720 }
1721 ],
1722 "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
1723 "homepage": "https://symfony.com",
1724 "keywords": [
1725 "compatibility",
1726 "polyfill",
1727 "portable",
1728 "shim"
1729 ],
1730 "support": {
1731 "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
1732 },
1733 "funding": [
1734 {
1735 "url": "https://symfony.com/sponsor",
1736 "type": "custom"
1737 },
1738 {
1739 "url": "https://github.com/fabpot",
1740 "type": "github"
1741 },
1742 {
1743 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1744 "type": "tidelift"
1745 }
1746 ],
1747 "time": "2022-11-03T14:55:06+00:00"
1748 },
1749 {
1750 "name": "symfony/service-contracts",
1751 "version": "v3.0.2",
1752 "source": {
1753 "type": "git",
1754 "url": "https://github.com/symfony/service-contracts.git",
1755 "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66"
1756 },
1757 "dist": {
1758 "type": "zip",
1759 "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
1760 "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
1761 "shasum": ""
1762 },
1763 "require": {
1764 "php": ">=8.0.2",
1765 "psr/container": "^2.0"
1766 },
1767 "conflict": {
1768 "ext-psr": "<1.1|>=2"
1769 },
1770 "suggest": {
1771 "symfony/service-implementation": ""
1772 },
1773 "type": "library",
1774 "extra": {
1775 "branch-alias": {
1776 "dev-main": "3.0-dev"
1777 },
1778 "thanks": {
1779 "name": "symfony/contracts",
1780 "url": "https://github.com/symfony/contracts"
1781 }
1782 },
1783 "autoload": {
1784 "psr-4": {
1785 "Symfony\\Contracts\\Service\\": ""
1786 }
1787 },
1788 "notification-url": "https://packagist.org/downloads/",
1789 "license": [
1790 "MIT"
1791 ],
1792 "authors": [
1793 {
1794 "name": "Nicolas Grekas",
1795 "email": "p@tchwork.com"
1796 },
1797 {
1798 "name": "Symfony Community",
1799 "homepage": "https://symfony.com/contributors"
1800 }
1801 ],
1802 "description": "Generic abstractions related to writing services",
1803 "homepage": "https://symfony.com",
1804 "keywords": [
1805 "abstractions",
1806 "contracts",
1807 "decoupling",
1808 "interfaces",
1809 "interoperability",
1810 "standards"
1811 ],
1812 "support": {
1813 "source": "https://github.com/symfony/service-contracts/tree/v3.0.2"
1814 },
1815 "funding": [
1816 {
1817 "url": "https://symfony.com/sponsor",
1818 "type": "custom"
1819 },
1820 {
1821 "url": "https://github.com/fabpot",
1822 "type": "github"
1823 },
1824 {
1825 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1826 "type": "tidelift"
1827 }
1828 ],
1829 "time": "2022-05-30T19:17:58+00:00"
1830 },
1831 {
1832 "name": "symfony/stopwatch",
1833 "version": "v5.4.21",
1834 "source": {
1835 "type": "git",
1836 "url": "https://github.com/symfony/stopwatch.git",
1837 "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee"
1838 },
1839 "dist": {
1840 "type": "zip",
1841 "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f83692cd869a6f2391691d40a01e8acb89e76fee",
1842 "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee",
1843 "shasum": ""
1844 },
1845 "require": {
1846 "php": ">=7.2.5",
1847 "symfony/service-contracts": "^1|^2|^3"
1848 },
1849 "type": "library",
1850 "autoload": {
1851 "psr-4": {
1852 "Symfony\\Component\\Stopwatch\\": ""
1853 },
1854 "exclude-from-classmap": [
1855 "/Tests/"
1856 ]
1857 },
1858 "notification-url": "https://packagist.org/downloads/",
1859 "license": [
1860 "MIT"
1861 ],
1862 "authors": [
1863 {
1864 "name": "Fabien Potencier",
1865 "email": "fabien@symfony.com"
1866 },
1867 {
1868 "name": "Symfony Community",
1869 "homepage": "https://symfony.com/contributors"
1870 }
1871 ],
1872 "description": "Provides a way to profile code",
1873 "homepage": "https://symfony.com",
1874 "support": {
1875 "source": "https://github.com/symfony/stopwatch/tree/v5.4.21"
1876 },
1877 "funding": [
1878 {
1879 "url": "https://symfony.com/sponsor",
1880 "type": "custom"
1881 },
1882 {
1883 "url": "https://github.com/fabpot",
1884 "type": "github"
1885 },
1886 {
1887 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1888 "type": "tidelift"
1889 }
1890 ],
1891 "time": "2023-02-14T08:03:56+00:00"
1892 },
1893 {
1894 "name": "symfony/string",
1895 "version": "v6.0.19",
1896 "source": {
1897 "type": "git",
1898 "url": "https://github.com/symfony/string.git",
1899 "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a"
1900 },
1901 "dist": {
1902 "type": "zip",
1903 "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a",
1904 "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a",
1905 "shasum": ""
1906 },
1907 "require": {
1908 "php": ">=8.0.2",
1909 "symfony/polyfill-ctype": "~1.8",
1910 "symfony/polyfill-intl-grapheme": "~1.0",
1911 "symfony/polyfill-intl-normalizer": "~1.0",
1912 "symfony/polyfill-mbstring": "~1.0"
1913 },
1914 "conflict": {
1915 "symfony/translation-contracts": "<2.0"
1916 },
1917 "require-dev": {
1918 "symfony/error-handler": "^5.4|^6.0",
1919 "symfony/http-client": "^5.4|^6.0",
1920 "symfony/translation-contracts": "^2.0|^3.0",
1921 "symfony/var-exporter": "^5.4|^6.0"
1922 },
1923 "type": "library",
1924 "autoload": {
1925 "files": [
1926 "Resources/functions.php"
1927 ],
1928 "psr-4": {
1929 "Symfony\\Component\\String\\": ""
1930 },
1931 "exclude-from-classmap": [
1932 "/Tests/"
1933 ]
1934 },
1935 "notification-url": "https://packagist.org/downloads/",
1936 "license": [
1937 "MIT"
1938 ],
1939 "authors": [
1940 {
1941 "name": "Nicolas Grekas",
1942 "email": "p@tchwork.com"
1943 },
1944 {
1945 "name": "Symfony Community",
1946 "homepage": "https://symfony.com/contributors"
1947 }
1948 ],
1949 "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
1950 "homepage": "https://symfony.com",
1951 "keywords": [
1952 "grapheme",
1953 "i18n",
1954 "string",
1955 "unicode",
1956 "utf-8",
1957 "utf8"
1958 ],
1959 "support": {
1960 "source": "https://github.com/symfony/string/tree/v6.0.19"
1961 },
1962 "funding": [
1963 {
1964 "url": "https://symfony.com/sponsor",
1965 "type": "custom"
1966 },
1967 {
1968 "url": "https://github.com/fabpot",
1969 "type": "github"
1970 },
1971 {
1972 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1973 "type": "tidelift"
1974 }
1975 ],
1976 "time": "2023-01-01T08:36:10+00:00"
1977 },
1978 {
1979 "name": "symfony/yaml",
1980 "version": "v5.4.23",
1981 "source": {
1982 "type": "git",
1983 "url": "https://github.com/symfony/yaml.git",
1984 "reference": "4cd2e3ea301aadd76a4172756296fe552fb45b0b"
1985 },
1986 "dist": {
1987 "type": "zip",
1988 "url": "https://api.github.com/repos/symfony/yaml/zipball/4cd2e3ea301aadd76a4172756296fe552fb45b0b",
1989 "reference": "4cd2e3ea301aadd76a4172756296fe552fb45b0b",
1990 "shasum": ""
1991 },
1992 "require": {
1993 "php": ">=7.2.5",
1994 "symfony/deprecation-contracts": "^2.1|^3",
1995 "symfony/polyfill-ctype": "^1.8"
1996 },
1997 "conflict": {
1998 "symfony/console": "<5.3"
1999 },
2000 "require-dev": {
2001 "symfony/console": "^5.3|^6.0"
2002 },
2003 "suggest": {
2004 "symfony/console": "For validating YAML files using the lint command"
2005 },
2006 "bin": [
2007 "Resources/bin/yaml-lint"
2008 ],
2009 "type": "library",
2010 "autoload": {
2011 "psr-4": {
2012 "Symfony\\Component\\Yaml\\": ""
2013 },
2014 "exclude-from-classmap": [
2015 "/Tests/"
2016 ]
2017 },
2018 "notification-url": "https://packagist.org/downloads/",
2019 "license": [
2020 "MIT"
2021 ],
2022 "authors": [
2023 {
2024 "name": "Fabien Potencier",
2025 "email": "fabien@symfony.com"
2026 },
2027 {
2028 "name": "Symfony Community",
2029 "homepage": "https://symfony.com/contributors"
2030 }
2031 ],
2032 "description": "Loads and dumps YAML files",
2033 "homepage": "https://symfony.com",
2034 "support": {
2035 "source": "https://github.com/symfony/yaml/tree/v5.4.23"
2036 },
2037 "funding": [
2038 {
2039 "url": "https://symfony.com/sponsor",
2040 "type": "custom"
2041 },
2042 {
2043 "url": "https://github.com/fabpot",
2044 "type": "github"
2045 },
2046 {
2047 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2048 "type": "tidelift"
2049 }
2050 ],
2051 "time": "2023-04-23T19:33:36+00:00"
2052 }
2053 ],
2054 "packages-dev": [],
2055 "aliases": [],
2056 "minimum-stability": "stable",
2057 "stability-flags": [],
2058 "prefer-stable": false,
2059 "prefer-lowest": false,
2060 "platform": {
2061 "php": ">=7.2.0",
2062 "ext-redis": "*",
2063 "ext-gearman": "*",
2064 "ext-mbstring": "*",
2065 "ext-bcmath": "*",
2066 "ext-json": "*",
2067 "ext-iconv": "*",
2068 "ext-pdo": "*"
2069 },
2070 "platform-dev": [],
2071 "plugin-api-version": "2.2.0"
2072}
diff --git a/flakes/mypackages/pkgs/status_engine/worker_php_packages.nix b/flakes/mypackages/pkgs/status_engine/worker_php_packages.nix
new file mode 100644
index 0000000..47291d2
--- /dev/null
+++ b/flakes/mypackages/pkgs/status_engine/worker_php_packages.nix
@@ -0,0 +1,266 @@
1{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false}:
2{
3 packages =
4 {
5 "composer/package-versions-deprecated" = {
6 targetDir = "";
7 src = composerEnv.buildZipPackage {
8 name = "composer-package-versions-deprecated-b4f54f74ef3453349c24a845d22392cd31e65f1d";
9 src = fetchurl {
10 url = "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d";
11 sha256 = "1hrjxvk8i14pw9gi7j3qc0gljjy74hwdkv8zwsrg5brgyzhqfwam";
12 };
13 };
14 };
15 "doctrine/cache" = {
16 targetDir = "";
17 src = composerEnv.buildZipPackage {
18 name = "doctrine-cache-1ca8f21980e770095a31456042471a57bc4c68fb";
19 src = fetchurl {
20 url = "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb";
21 sha256 = "1p8ia9g3mqz71bv4x8q1ng1fgcidmyksbsli1fjbialpgjk9k1ss";
22 };
23 };
24 };
25 "doctrine/dbal" = {
26 targetDir = "";
27 src = composerEnv.buildZipPackage {
28 name = "doctrine-dbal-c480849ca3ad6706a39c970cdfe6888fa8a058b8";
29 src = fetchurl {
30 url = "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8";
31 sha256 = "15j98h80li6m1aj53p8ddy0lkbkanc5kdy6xrikpdd6zhmsfgq9k";
32 };
33 };
34 };
35 "doctrine/deprecations" = {
36 targetDir = "";
37 src = composerEnv.buildZipPackage {
38 name = "doctrine-deprecations-612a3ee5ab0d5dd97b7cf3874a6efe24325efac3";
39 src = fetchurl {
40 url = "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3";
41 sha256 = "078w4k0xdywyb44caz5grbcbxsi87iy13g7a270rs9g5f0p245fi";
42 };
43 };
44 };
45 "doctrine/event-manager" = {
46 targetDir = "";
47 src = composerEnv.buildZipPackage {
48 name = "doctrine-event-manager-95aa4cb529f1e96576f3fda9f5705ada4056a520";
49 src = fetchurl {
50 url = "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520";
51 sha256 = "0xi2s28jmmvrndg1yd0r5s10d9a0q6j2dxdbazvcbws9waf0yrvj";
52 };
53 };
54 };
55 "doctrine/migrations" = {
56 targetDir = "";
57 src = composerEnv.buildZipPackage {
58 name = "doctrine-migrations-28d92a34348fee5daeb80879e56461b2e862fc05";
59 src = fetchurl {
60 url = "https://api.github.com/repos/doctrine/migrations/zipball/28d92a34348fee5daeb80879e56461b2e862fc05";
61 sha256 = "0j5snc96r03vcjlb3k94cx871f69xaq53bza8mm8xs4jk85gr5jg";
62 };
63 };
64 };
65 "friendsofphp/proxy-manager-lts" = {
66 targetDir = "";
67 src = composerEnv.buildZipPackage {
68 name = "friendsofphp-proxy-manager-lts-ecadbdc9052e4ad08c60c8a02268712e50427f7c";
69 src = fetchurl {
70 url = "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/ecadbdc9052e4ad08c60c8a02268712e50427f7c";
71 sha256 = "15ch54cm3rvjyvsvqs9ixfn3vnydfxa0knd4g6myapsryirrskvi";
72 };
73 };
74 };
75 "laminas/laminas-code" = {
76 targetDir = "";
77 src = composerEnv.buildZipPackage {
78 name = "laminas-laminas-code-91aabc066d5620428120800c0eafc0411e441a62";
79 src = fetchurl {
80 url = "https://api.github.com/repos/laminas/laminas-code/zipball/91aabc066d5620428120800c0eafc0411e441a62";
81 sha256 = "01wsb6ph5h8ga9rnlr0lxd3qwn897ccxqxpbz540lfgz7a1prpb0";
82 };
83 };
84 };
85 "paragonie/constant_time_encoding" = {
86 targetDir = "";
87 src = composerEnv.buildZipPackage {
88 name = "paragonie-constant_time_encoding-58c3f47f650c94ec05a151692652a868995d2938";
89 src = fetchurl {
90 url = "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938";
91 sha256 = "0i9km0lzvc7df9758fm1p3y0679pzvr5m9x3mrz0d2hxlppsm764";
92 };
93 };
94 };
95 "paragonie/random_compat" = {
96 targetDir = "";
97 src = composerEnv.buildZipPackage {
98 name = "paragonie-random_compat-996434e5492cb4c3edcb9168db6fbb1359ef965a";
99 src = fetchurl {
100 url = "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a";
101 sha256 = "0ky7lal59dihf969r1k3pb96ql8zzdc5062jdbg69j6rj0scgkyx";
102 };
103 };
104 };
105 "php-amqplib/php-amqplib" = {
106 targetDir = "";
107 src = composerEnv.buildZipPackage {
108 name = "php-amqplib-php-amqplib-1aecbd182b35eb039667c50d7d92d71f105be779";
109 src = fetchurl {
110 url = "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/1aecbd182b35eb039667c50d7d92d71f105be779";
111 sha256 = "0wwzlf2yhjrc523n0y7qh23pxgn4f2qhkbr0jnxzq9j6mm75hnjm";
112 };
113 };
114 };
115 "phpseclib/phpseclib" = {
116 targetDir = "";
117 src = composerEnv.buildZipPackage {
118 name = "phpseclib-phpseclib-4580645d3fc05c189024eb3b834c6c1e4f0f30a1";
119 src = fetchurl {
120 url = "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1";
121 sha256 = "0v3c7n9h99pw4f03bfxjsgni7wpq7xr47nw2hf2hq8yjndw19n3p";
122 };
123 };
124 };
125 "psr/container" = {
126 targetDir = "";
127 src = composerEnv.buildZipPackage {
128 name = "psr-container-c71ecc56dfe541dbd90c5360474fbc405f8d5963";
129 src = fetchurl {
130 url = "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963";
131 sha256 = "1mvan38yb65hwk68hl0p7jymwzr4zfnaxmwjbw7nj3rsknvga49i";
132 };
133 };
134 };
135 "symfony/console" = {
136 targetDir = "";
137 src = composerEnv.buildZipPackage {
138 name = "symfony-console-b504a3d266ad2bb632f196c0936ef2af5ff6e273";
139 src = fetchurl {
140 url = "https://api.github.com/repos/symfony/console/zipball/b504a3d266ad2bb632f196c0936ef2af5ff6e273";
141 sha256 = "0na3lpgzvrsxngyzv2w90k3ykw1y5j4p6v965v3sal03y6rr2w2i";
142 };
143 };
144 };
145 "symfony/deprecation-contracts" = {
146 targetDir = "";
147 src = composerEnv.buildZipPackage {
148 name = "symfony-deprecation-contracts-26954b3d62a6c5fd0ea8a2a00c0353a14978d05c";
149 src = fetchurl {
150 url = "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c";
151 sha256 = "1wlaj9ngbyjmgr92gjyf7lsmjfswyh8vpbzq5rdzaxjb6bcsj3dp";
152 };
153 };
154 };
155 "symfony/filesystem" = {
156 targetDir = "";
157 src = composerEnv.buildZipPackage {
158 name = "symfony-filesystem-3d49eec03fda1f0fc19b7349fbbe55ebc1004214";
159 src = fetchurl {
160 url = "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214";
161 sha256 = "0dhnyj6m9n6359z5c0xh4pz38n89i9x5c9r1s2dlgxz0daysbbyy";
162 };
163 };
164 };
165 "symfony/polyfill-ctype" = {
166 targetDir = "";
167 src = composerEnv.buildZipPackage {
168 name = "symfony-polyfill-ctype-5bbc823adecdae860bb64756d639ecfec17b050a";
169 src = fetchurl {
170 url = "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a";
171 sha256 = "0vyv70z1yi2is727d1mkb961w5r1pb1v3wy1pvdp30h8ffy15wk6";
172 };
173 };
174 };
175 "symfony/polyfill-intl-grapheme" = {
176 targetDir = "";
177 src = composerEnv.buildZipPackage {
178 name = "symfony-polyfill-intl-grapheme-511a08c03c1960e08a883f4cffcacd219b758354";
179 src = fetchurl {
180 url = "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354";
181 sha256 = "0ifsgsyxf0z0nkynqvr5259dm5dsmbgdpvyi5zfvy8935mi0ki0i";
182 };
183 };
184 };
185 "symfony/polyfill-intl-normalizer" = {
186 targetDir = "";
187 src = composerEnv.buildZipPackage {
188 name = "symfony-polyfill-intl-normalizer-19bd1e4fcd5b91116f14d8533c57831ed00571b6";
189 src = fetchurl {
190 url = "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6";
191 sha256 = "1d80jph5ykiw6ydv8fwd43s0aglh24qc1yrzds2f3aqanpbk1gr2";
192 };
193 };
194 };
195 "symfony/polyfill-mbstring" = {
196 targetDir = "";
197 src = composerEnv.buildZipPackage {
198 name = "symfony-polyfill-mbstring-8ad114f6b39e2c98a8b0e3bd907732c207c2b534";
199 src = fetchurl {
200 url = "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534";
201 sha256 = "1ym84qp609i50lv4vkd4yz99y19kaxd5kmpdnh66mxx1a4a104mi";
202 };
203 };
204 };
205 "symfony/polyfill-php73" = {
206 targetDir = "";
207 src = composerEnv.buildZipPackage {
208 name = "symfony-polyfill-php73-9e8ecb5f92152187c4799efd3c96b78ccab18ff9";
209 src = fetchurl {
210 url = "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9";
211 sha256 = "1p0jr92x323pl4frjbhmziyk5g1zig1g30i1v1p0wfli2sq8h5mb";
212 };
213 };
214 };
215 "symfony/polyfill-php80" = {
216 targetDir = "";
217 src = composerEnv.buildZipPackage {
218 name = "symfony-polyfill-php80-7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936";
219 src = fetchurl {
220 url = "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936";
221 sha256 = "16yydk7rsknlasrpn47n4b4js8svvp4rxzw99dkav52wr3cqmcwd";
222 };
223 };
224 };
225 "symfony/service-contracts" = {
226 targetDir = "";
227 src = composerEnv.buildZipPackage {
228 name = "symfony-service-contracts-d78d39c1599bd1188b8e26bb341da52c3c6d8a66";
229 src = fetchurl {
230 url = "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66";
231 sha256 = "1cgbn2yx2fyrc3c1d85vdriiwwifr1sdg868f3rhq9bh78f03z99";
232 };
233 };
234 };
235 "symfony/stopwatch" = {
236 targetDir = "";
237 src = composerEnv.buildZipPackage {
238 name = "symfony-stopwatch-f83692cd869a6f2391691d40a01e8acb89e76fee";
239 src = fetchurl {
240 url = "https://api.github.com/repos/symfony/stopwatch/zipball/f83692cd869a6f2391691d40a01e8acb89e76fee";
241 sha256 = "1qh49p2jfca5kpcmlcbjx5izgqqvjd91385zy5mipyslsdik2lwg";
242 };
243 };
244 };
245 "symfony/string" = {
246 targetDir = "";
247 src = composerEnv.buildZipPackage {
248 name = "symfony-string-d9e72497367c23e08bf94176d2be45b00a9d232a";
249 src = fetchurl {
250 url = "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a";
251 sha256 = "0k4vvcjfdp2dni8gzq4rn8d6n0ivd38sfna70lgsh8vlc8rrlhpf";
252 };
253 };
254 };
255 "symfony/yaml" = {
256 targetDir = "";
257 src = composerEnv.buildZipPackage {
258 name = "symfony-yaml-4cd2e3ea301aadd76a4172756296fe552fb45b0b";
259 src = fetchurl {
260 url = "https://api.github.com/repos/symfony/yaml/zipball/4cd2e3ea301aadd76a4172756296fe552fb45b0b";
261 sha256 = "18yirwiqbh11fwlpqypm0wlc0lnx7prgk68xrn607zcg6cxnfhiz";
262 };
263 };
264 };
265 };
266}
diff --git a/flakes/mypackages/pkgs/telegram-history-dump/default.nix b/flakes/mypackages/pkgs/telegram-history-dump/default.nix
new file mode 100644
index 0000000..492e265
--- /dev/null
+++ b/flakes/mypackages/pkgs/telegram-history-dump/default.nix
@@ -0,0 +1,18 @@
1{ stdenv, ruby, fetchFromGitHub }:
2stdenv.mkDerivation ({
3 pname = "telegram-history-dump";
4 version = "468ea91-master";
5 src = fetchFromGitHub {
6 owner = "tvdstaaij";
7 repo = "telegram-history-dump";
8 rev = "468ea91e543529b54bc2c5ea28b1ea17f362fd3e";
9 sha256 = "1wmwiqacfa56bmwx50njnb15cg0fy6rbdrmrjd4xfbh8bs6yp0gh";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 mkdir -p $out/lib $out/bin
14 cp -a $src $out/lib/telegram-history-dump
15 ln -s $out/lib/telegram-history-dump/telegram-history-dump.rb $out/bin/telegram-history-dump
16 '';
17 buildInputs = [ ruby ];
18})
diff --git a/flakes/mypackages/pkgs/telegramircd/default.nix b/flakes/mypackages/pkgs/telegramircd/default.nix
new file mode 100644
index 0000000..d9196a2
--- /dev/null
+++ b/flakes/mypackages/pkgs/telegramircd/default.nix
@@ -0,0 +1,22 @@
1{ openssl, telethon, python3Packages, fetchFromGitHub }:
2with python3Packages;
3buildPythonApplication rec {
4 format = "other";
5 pname = "telegramircd";
6 version = "master";
7 propagatedBuildInputs = [ telethon aiohttp ConfigArgParse openssl ];
8 src = fetchFromGitHub {
9 owner = "MaskRay";
10 repo = "telegramircd";
11 rev = "40a0c7cf60492bde3f44d43f06f62e3792480139";
12 sha256 = "123fjhgxq2fzn0ar8274jv7jjbxnlpidrj5333kbch7rpcipks0y";
13 fetchSubmodules = true;
14 };
15 LD_LIBRARY_PATH = "${openssl.out}/lib";
16 installPhase = ''
17 install -D $src/telegramircd.py $out/bin/telegramircd
18 wrapProgram "$out/bin/telegramircd" \
19 --prefix LD_LIBRARY_PATH : "${openssl.out}/lib"
20 install -Dm644 "$src/config" -t "$out/etc/telegramircd/"
21 '';
22}
diff --git a/flakes/mypackages/pkgs/telethon_sync/default.nix b/flakes/mypackages/pkgs/telethon_sync/default.nix
new file mode 100644
index 0000000..a03e1c3
--- /dev/null
+++ b/flakes/mypackages/pkgs/telethon_sync/default.nix
@@ -0,0 +1,24 @@
1{ lib, python3Packages, fetchgit }:
2with python3Packages;
3buildPythonPackage rec {
4 pname = "Telethon-sync";
5 version = "1.1.1";
6
7 src = fetchgit {
8 url = "https://github.com/LonamiWebs/Telethon";
9 branchName = "sync-stale";
10 rev = "6a785a01aa56cfd21c8c5beb9d722c68d664ba5e";
11 sha256 = "0g7gnln5kbh1gy6sfb3jg6knmi33n6sgzy2rni2x6af84lza0lgc";
12 };
13
14 propagatedBuildInputs = [
15 rsa pyaes async_generator
16 ];
17 doCheck = false;
18
19 meta = with lib; {
20 homepage = https://github.com/LonamiWebs/Telethon;
21 description = "Full-featured Telegram client library for Python 3";
22 license = licenses.mit;
23 };
24}
diff --git a/flakes/mypackages/pkgs/terminal-velocity/default.nix b/flakes/mypackages/pkgs/terminal-velocity/default.nix
new file mode 100644
index 0000000..3ccfcd3
--- /dev/null
+++ b/flakes/mypackages/pkgs/terminal-velocity/default.nix
@@ -0,0 +1,37 @@
1{ python37Packages }:
2with python37Packages;
3buildPythonApplication rec {
4 pname = "terminal-velocity-git";
5 version = "0.2.0";
6 src = fetchPypi {
7 inherit pname version;
8 sha256 = "13yrkcmvh5h5fwnai61sbmqkrjyisz08n62pq0ada2lyyqf7g6b9";
9 };
10
11 patches = [
12 ./sort_found_notes.patch
13 ./python3_support.patch
14 # FIXME: update this patch when version changes
15 ./fix_build.patch
16 ];
17
18 preCheck = ''
19 # Needed for urwid test
20 export LC_ALL=en_US.UTF-8
21 '';
22 propagatedBuildInputs = [
23 chardet
24 urwid
25 (sh.overridePythonAttrs { doCheck = false; })
26 pyyaml
27 ];
28 buildInputs = [
29 m2r
30 (restructuredtext_lint.overridePythonAttrs { doCheck = false; })
31 pygments
32 ];
33
34 postInstall = ''
35 rm $out/bin/terminal_velocity
36 '';
37}
diff --git a/flakes/mypackages/pkgs/terminal-velocity/fix_build.patch b/flakes/mypackages/pkgs/terminal-velocity/fix_build.patch
new file mode 100644
index 0000000..b08e0c4
--- /dev/null
+++ b/flakes/mypackages/pkgs/terminal-velocity/fix_build.patch
@@ -0,0 +1,21 @@
1commit a64bf3d58f6ba7f5fa72fe5b89a3973cac0c1a99
2Author: Ismaël Bouya <ismael.bouya@normalesup.org>
3Date: Sat Mar 9 20:13:52 2019 +0100
4
5 Remove mister_bump dependency
6
7diff --git a/setup.py b/setup.py
8index 84a99e9..a783dff 100644
9--- a/setup.py
10+++ b/setup.py
11@@ -1,7 +1,9 @@
12 from setuptools import setup
13 from m2r import parse_from_file
14 import restructuredtext_lint
15-from mister_bump import bump
16+
17+def bump():
18+ return "0.2.0"
19
20 # Parser README.md into reStructuredText format
21 rst_readme = parse_from_file('README.md')
diff --git a/flakes/mypackages/pkgs/terminal-velocity/python3_support.patch b/flakes/mypackages/pkgs/terminal-velocity/python3_support.patch
new file mode 100644
index 0000000..bd4aec7
--- /dev/null
+++ b/flakes/mypackages/pkgs/terminal-velocity/python3_support.patch
@@ -0,0 +1,215 @@
1commit 6ca19964b9e8a7866fd7e21a3dac9ccd35f0d434
2Author: Ismaël Bouya <ismael.bouya@normalesup.org>
3Date: Sat Mar 9 20:13:18 2019 +0100
4
5 Add python3 support
6
7diff --git a/terminal_velocity/notebook.py b/terminal_velocity/notebook.py
8index b6226dc..11f76de 100644
9--- a/terminal_velocity/notebook.py
10+++ b/terminal_velocity/notebook.py
11@@ -60,51 +60,6 @@ import sys
12 import chardet
13
14
15-def unicode_or_bust(raw_text):
16- """Return the given raw text data decoded to unicode.
17-
18- If the text cannot be decoded, return None.
19-
20- """
21- encodings = ["utf-8"]
22- for encoding in (sys.getfilesystemencoding(), sys.getdefaultencoding()):
23- # I would use a set for this, but they don't maintain order.
24- if encoding not in encodings:
25- encodings.append(encoding)
26-
27- for encoding in encodings:
28- if encoding: # getfilesystemencoding() may return None
29- try:
30- decoded = unicode(raw_text, encoding=encoding)
31- return decoded
32- except UnicodeDecodeError:
33- pass
34-
35- # If none of those guesses worked, let chardet have a go.
36- encoding = chardet.detect(raw_text)["encoding"]
37- if encoding and encoding not in encodings:
38- try:
39- decoded = unicode(raw_text, encoding=encoding)
40- logger.debug("File decoded with chardet, encoding was {0}".format(
41- encoding))
42- return decoded
43- except UnicodeDecodeError:
44- pass
45- except LookupError:
46- pass
47-
48- # I've heard that decoding with cp1252 never fails, so try that last.
49- try:
50- decoded = unicode(raw_text, encoding="cp1252")
51- logger.debug("File decoded with encoding cp1252")
52- return decoded
53- except UnicodeDecodeError:
54- pass
55-
56- # If nothing worked then give up.
57- return None
58-
59-
60 class Error(Exception):
61 """Base class for exceptions in this module."""
62 pass
63@@ -192,12 +147,12 @@ class PlainTextNote(object):
64 # subdirs) if they don't exist.
65 directory = os.path.split(self.abspath)[0]
66 if not os.path.isdir(directory):
67- logger.debug(u"'{0} doesn't exist, creating it".format(directory))
68+ logger.debug("'{0} doesn't exist, creating it".format(directory))
69 try:
70 os.makedirs(directory)
71 except os.error as e:
72 raise NewNoteError(
73- u"{0} could not be created: {1}".format(directory, e))
74+ "{0} could not be created: {1}".format(directory, e))
75
76 # Create an empty file if the file doesn't exist.
77 open(self.abspath, 'a')
78@@ -217,11 +172,11 @@ class PlainTextNote(object):
79
80 @property
81 def contents(self):
82- contents = unicode_or_bust(open(self.abspath, "r").read())
83+ contents = open(self.abspath, "rb").read().decode(errors='ignore')
84 if contents is None:
85 logger.error(
86- u"Could not decode file contents: {0}".format(self.abspath))
87- return u""
88+ "Could not decode file contents: {0}".format(self.abspath))
89+ return ""
90 else:
91 return contents
92
93@@ -322,12 +277,12 @@ class PlainTextNoteBook(object):
94
95 # Create notebook_dir if it doesn't exist.
96 if not os.path.isdir(self.path):
97- logger.debug(u"'{0} doesn't exist, creating it".format(self.path))
98+ logger.debug("'{0} doesn't exist, creating it".format(self.path))
99 try:
100 os.makedirs(self.path)
101 except os.error as e:
102 raise NewNoteBookError(
103- u"{0} could not be created: {1}".format(self.path, e))
104+ "{0} could not be created: {1}".format(self.path, e))
105 else:
106 # TODO: Check that self.path is a directory, if not raise.
107 pass
108@@ -358,13 +313,12 @@ class PlainTextNoteBook(object):
109 abspath = os.path.join(root, filename)
110 relpath = os.path.relpath(abspath, self.path)
111 relpath, ext = os.path.splitext(relpath)
112- unicode_relpath = unicode_or_bust(relpath)
113 if relpath is None:
114 # The filename could not be decoded.
115 logger.error(
116 "Could not decode filename: {0}".format(relpath))
117 else:
118- self.add_new(title=unicode_relpath, extension=ext)
119+ self.add_new(title=relpath, extension=ext)
120
121 @property
122 def path(self):
123@@ -418,7 +372,7 @@ class PlainTextNoteBook(object):
124 for note in self._notes:
125 if note.title == title and note.extension == extension:
126 raise NoteAlreadyExistsError(
127- u"Note already in NoteBook: {0}".format(note.title))
128+ "Note already in NoteBook: {0}".format(note.title))
129
130 # Ok, add the note.
131 note = PlainTextNote(title, self, extension)
132diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py
133index 5f0e213..9234bea 100755
134--- a/terminal_velocity/terminal_velocity.py
135+++ b/terminal_velocity/terminal_velocity.py
136@@ -1,7 +1,7 @@
137-#!/usr/bin/env python2
138+#!/usr/bin/env python3
139 """A fast note-taking app for the UNIX terminal"""
140 from __future__ import print_function
141-import ConfigParser
142+import configparser
143 import argparse
144 import os
145 import logging
146@@ -9,9 +9,9 @@ import logging.handlers
147 import sys
148
149 #import terminal_velocity.urwid_ui as urwid_ui
150-import urwid_ui
151+from . import urwid_ui
152
153-from git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes
154+from .git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes
155
156
157 def startup():
158@@ -37,7 +37,7 @@ def main():
159
160 # Parse the config file.
161 config_file = os.path.abspath(os.path.expanduser(args.config))
162- config = ConfigParser.SafeConfigParser()
163+ config = configparser.ConfigParser()
164 config.read(config_file)
165 defaults = dict(config.items('DEFAULT'))
166
167diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py
168index caebcb9..89bab35 100644
169--- a/terminal_velocity/urwid_ui.py
170+++ b/terminal_velocity/urwid_ui.py
171@@ -10,7 +10,7 @@ import logging
172 logger = logging.getLogger(__name__)
173
174 import urwid
175-import notebook
176+from . import notebook
177
178
179 palette = [
180@@ -27,8 +27,6 @@ def system(cmd, loop):
181
182 loop.screen.stop()
183
184- cmd = u"{0}".format(cmd)
185- cmd = cmd.encode("utf-8") # FIXME: Correct encoding?
186 safe_cmd = shlex.split(cmd)
187
188 logger.debug("System command: {0}".format(safe_cmd))
189@@ -114,7 +112,7 @@ class AutocompleteWidget(urwid.Edit):
190
191 # When search bar is empty show placeholder text.
192 if not self.edit_text and not self.autocomplete_text:
193- placeholder_text = u"Find or Create"
194+ placeholder_text = "Find or Create"
195 return (placeholder_text,
196 [("placeholder", len(placeholder_text))])
197
198@@ -186,7 +184,7 @@ class NoteFilterListBox(urwid.ListBox):
199
200 def render(self, size, focus=False):
201 if len(self.list_walker) == 0:
202- placeholder = placeholder_text(u"No matching notes, press Enter "
203+ placeholder = placeholder_text("No matching notes, press Enter "
204 "to create a new note")
205 return placeholder.render(size)
206 return super(NoteFilterListBox, self).render(size, self.fake_focus)
207@@ -399,7 +397,7 @@ class MainFrame(urwid.Frame):
208 # If the user has no notes yet show some placeholder text, otherwise
209 # show the note list.
210 if len(self.notebook) == 0:
211- self.body = placeholder_text(u"You have no notes yet, to create "
212+ self.body = placeholder_text("You have no notes yet, to create "
213 "a note type a note title then press Enter")
214 else:
215 self.body = urwid.Padding(self.list_box, left=1, right=1)
diff --git a/flakes/mypackages/pkgs/terminal-velocity/sort_found_notes.patch b/flakes/mypackages/pkgs/terminal-velocity/sort_found_notes.patch
new file mode 100644
index 0000000..2bc563c
--- /dev/null
+++ b/flakes/mypackages/pkgs/terminal-velocity/sort_found_notes.patch
@@ -0,0 +1,73 @@
1commit 0f9df37046e58c8963aff93c649e5d3dbf2202bd
2Author: Ismaël Bouya <ismael.bouya@normalesup.org>
3Date: Sat Mar 9 20:11:46 2019 +0100
4
5 Add sorting option
6
7diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py
8index a53eda3..5f0e213 100755
9--- a/terminal_velocity/terminal_velocity.py
10+++ b/terminal_velocity/terminal_velocity.py
11@@ -90,6 +90,10 @@ the default default will be used"""
12 default=defaults.get("log_file", "~/.tvlog"),
13 help="the file to log to (default: %(default)s)")
14
15+ parser.add_argument("-s", "--sort", dest="sort", action="store",
16+ default=defaults.get("sort", "date"),
17+ help="the note sorting rules. Possible values: date, title (default: %(default)s)")
18+
19 parser.add_argument("-p", "--print-config", dest="print_config",
20 action="store_true", default=False,
21 help="print your configuration settings then exit")
22@@ -138,7 +142,7 @@ the default default will be used"""
23 try:
24 urwid_ui.launch(notes_dir=args.notes_dir, editor=args.editor,
25 extension=args.extension, extensions=args.extensions,
26- exclude=args.exclude)
27+ exclude=args.exclude, sort=args.sort)
28 except KeyboardInterrupt:
29 # Run the shutdown hook
30 shutdown()
31diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py
32index 34cf4f6..caebcb9 100644
33--- a/terminal_velocity/urwid_ui.py
34+++ b/terminal_velocity/urwid_ui.py
35@@ -237,11 +237,12 @@ class NoteFilterListBox(urwid.ListBox):
36 class MainFrame(urwid.Frame):
37 """The topmost urwid widget."""
38
39- def __init__(self, notes_dir, editor, extension, extensions, exclude=None):
40+ def __init__(self, notes_dir, editor, extension, extensions, exclude=None, sort="date"):
41
42 self.editor = editor
43 self.notebook = notebook.PlainTextNoteBook(notes_dir, extension,
44 extensions, exclude=exclude)
45+ self.sort = sort
46
47 # Don't filter the note list when the text in the search box changes.
48 self.suppress_filter = False
49@@ -408,7 +409,10 @@ class MainFrame(urwid.Frame):
50
51 # Sort the notes.
52 # TODO: Support different sort orderings.
53- matching_notes.sort(key=lambda x: x.mtime, reverse=True)
54+ if self.sort == "title":
55+ matching_notes.sort(key=lambda x: x.title)
56+ else:
57+ matching_notes.sort(key=lambda x: x.mtime, reverse=True)
58
59 # Tell the list box to show only the matching notes.
60 self.list_box.filter(matching_notes)
61@@ -433,10 +437,10 @@ class MainFrame(urwid.Frame):
62 self.selected_note = note
63
64
65-def launch(notes_dir, editor, extension, extensions, exclude=None):
66+def launch(notes_dir, editor, extension, extensions, exclude=None, sort="date"):
67 """Launch the user interface."""
68
69- frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude)
70+ frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude, sort=sort)
71 loop = urwid.MainLoop(frame, palette)
72 frame.loop = loop
73 loop.run()
diff --git a/flakes/mypackages/pkgs/tiv/default.nix b/flakes/mypackages/pkgs/tiv/default.nix
new file mode 100644
index 0000000..2415db9
--- /dev/null
+++ b/flakes/mypackages/pkgs/tiv/default.nix
@@ -0,0 +1,19 @@
1{ fetchurl, perlPackages }:
2perlPackages.buildPerlPackage rec {
3 pname = "tiv";
4 version = "2015";
5 src = fetchurl {
6 url = "http://xyne.archlinux.ca/projects/tiv/src/tiv-${version}.tar.xz";
7 sha256 = "1vq073v7z7vmcd57lhs4rf4jasji69cpjgkz4dykp94a77p1qq90";
8 };
9
10 outputs = ["out"];
11 buildInputs = with perlPackages; [ PerlMagick ];
12 perlPreHookScript = ./tiv_builder.sh;
13 perlPreHook = ''
14 source $perlPreHookScript
15 '';
16 installPhase = ''
17 install -Dm755 tiv "$out/bin/tiv"
18 '';
19}
diff --git a/flakes/mypackages/pkgs/tiv/tiv_builder.sh b/flakes/mypackages/pkgs/tiv/tiv_builder.sh
new file mode 100644
index 0000000..ea16682
--- /dev/null
+++ b/flakes/mypackages/pkgs/tiv/tiv_builder.sh
@@ -0,0 +1,8 @@
1orig=$(declare -f preConfigure)
2new_name="preConfigure2 ${orig#preConfigure}"
3eval "$new_name"
4
5preConfigure() {
6 preConfigure2 || true
7}
8
diff --git a/flakes/mypackages/pkgs/twins/default.nix b/flakes/mypackages/pkgs/twins/default.nix
new file mode 100644
index 0000000..d0656bb
--- /dev/null
+++ b/flakes/mypackages/pkgs/twins/default.nix
@@ -0,0 +1,15 @@
1{ buildGoModule, fetchgit }:
2
3buildGoModule {
4 pname = "twins";
5 version = "master-cd85204";
6 src = fetchgit {
7 url = "https://code.rocketnine.space/tslocum/twins.git";
8 branchName = "master";
9 rev = "cd8520468072c39914ce5c8f6900dd804848d7ad";
10 sha256 = "14pxcq24g3cllq8w76dwn7mmcphdpw4f5d2nhwxh06hs8ci22fz3";
11 };
12
13 vendorSha256 = "1h8bk8v1p52b3qwk71mv8015p990jczq31p7b7bwypb4im5l5pd9";
14
15}
diff --git a/flakes/mypackages/pkgs/umami/build-geo.patch b/flakes/mypackages/pkgs/umami/build-geo.patch
new file mode 100644
index 0000000..7a4f075
--- /dev/null
+++ b/flakes/mypackages/pkgs/umami/build-geo.patch
@@ -0,0 +1,15 @@
1diff --git a/scripts/build-geo.js b/scripts/build-geo.js
2index cc66f94..5464b54 100644
3--- a/scripts/build-geo.js
4+++ b/scripts/build-geo.js
5@@ -22,9 +22,7 @@ if (!fs.existsSync(dest)) {
6
7 const download = url =>
8 new Promise(resolve => {
9- https.get(url, res => {
10- resolve(res.pipe(zlib.createGunzip({})).pipe(tar.t()));
11- });
12+ resolve(fs.createReadStream(url).pipe(zlib.createGunzip({})).pipe(tar.t()));
13 });
14
15 download(url).then(
diff --git a/flakes/mypackages/pkgs/umami/default.nix b/flakes/mypackages/pkgs/umami/default.nix
new file mode 100644
index 0000000..5620f90
--- /dev/null
+++ b/flakes/mypackages/pkgs/umami/default.nix
@@ -0,0 +1,72 @@
1{ nodejs, writeScriptBin, stdenv, yarn2nix-moretea, lib, fetchzip, fetchurl, zlib, openssl, fetchFromGitHub }:
2let
3 version = "1.17.0";
4 geolite2-country-url = "https://raw.githubusercontent.com/GitSquared/node-geolite2-redist/master/redist/GeoLite2-Country.tar.gz";
5 geolite2-country = fetchurl {
6 url = geolite2-country-url;
7 sha256 = "0mdjvx1dfpkhg5kbp7jnrspzybaavhlxmna44l7rw05nrw5nv9zw";
8 };
9 toBin = sha256: name: fetchurl {
10 inherit name sha256;
11 url = "https://binaries.prisma.sh/all_commits/e421996c87d5f3c8f7eeadd502d4ad402c89464d/debian-openssl-1.1.x/${name}.gz";
12 downloadToTemp = true;
13 executable = true;
14 postFetch = ''
15 cat "$downloadedFile" | gunzip > $out
16 patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
17 --set-rpath "${lib.makeLibraryPath [ openssl zlib ]}:$(patchelf --print-rpath $out)" \
18 $out
19 chmod +x $out
20 '';
21 };
22 binaries = {
23 DATABASE_TYPE = "postgresql";
24 PRISMA_QUERY_ENGINE_BINARY = toBin "1sy67xqvbmgzksw7bl31k74k41jr44n514idqbi70j2i6jxbrl4j" "query-engine";
25 PRISMA_INTROSPECTION_ENGINE_BINARY = toBin "1kcszg11f71sg2y0ki7kg4prwlyb67bdjpjcky9kyjd8n9ilc8hj" "introspection-engine";
26 PRISMA_MIGRATION_ENGINE_BINARY = toBin "1lmz0wwjaavap9k6z5ysqrhlgs3r3kc9jpri2lv0lq95qmwr5hzq" "migration-engine";
27 PRISMA_FMT_BINARY = toBin "0241aszja3j1pp7pxs40irmfj06ilfjbzyqjzrzrb5azk7izwm73" "prisma-fmt";
28 };
29 src = fetchFromGitHub {
30 owner = "mikecao";
31 repo = "umami";
32 rev = "v${version}";
33 sha256 = "15jfgf057lsl20vdw45v5cim5d2ilalzaaxn6h82pz4d2fj1w0nh";
34 };
35 node-modules = yarn2nix-moretea.mkYarnModules rec {
36 pname = "umami";
37 inherit version;
38 name = "${pname}-${version}";
39 yarnLock = "${src}/yarn.lock";
40 packageJSON = "${src}/package.json";
41 pkgConfig.npm-run-all.postInstall = ''
42 patchShebangs .
43 '';
44 pkgConfig.rollup.postInstall = ''
45 patchShebangs .
46 '';
47 };
48 package = stdenv.mkDerivation (binaries // {
49 pname = "umami";
50 inherit version src;
51 buildInputs = [ nodejs ];
52 patches = [ ./build-geo.patch ];
53 configurePhase = ''
54 cp -r ${node-modules}/node_modules .
55 chmod u+w -R node_modules
56 '';
57 buildPhase = ''
58 sed -i -e "s@${geolite2-country-url}@${geolite2-country}@" scripts/build-geo.js
59 npm run build
60 '';
61 installPhase = ''
62 cp -a . $out
63 '';
64 });
65 script = writeScriptBin "umami" (''
66 #! ${stdenv.shell}
67 cd ${package}
68 '' + builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "export ${n}=${v}") binaries) + "\n" + ''
69 ${nodejs}/bin/npm run start-env
70 '');
71in
72 script // { nodeApp = package; }
diff --git a/flakes/mypackages/pkgs/unicode/default.nix b/flakes/mypackages/pkgs/unicode/default.nix
new file mode 100644
index 0000000..756e939
--- /dev/null
+++ b/flakes/mypackages/pkgs/unicode/default.nix
@@ -0,0 +1,48 @@
1{ lib, fetchurl, runCommand, libarchive }:
2with lib.attrsets;
3let
4 version = "12.0";
5 version-full = "${version}.0";
6 files = {
7 emoji-data = fetchurl {
8 url = "http://www.unicode.org/Public/emoji/${version}/emoji-data.txt";
9 sha256 = "03sf7h1d6kb9m5s02lif88jsi5kjszpkfvcymaqxj8ds70ar9pgv";
10 };
11 emoji-sequences = fetchurl {
12 url = "http://www.unicode.org/Public/emoji/${version}/emoji-sequences.txt";
13 sha256 = "1hghki2rn3n7m4lwpwi2a5wrsf2nij4bxga9ldabx4g0g2k23svs";
14 };
15 emoji-test = fetchurl {
16 url = "http://www.unicode.org/Public/emoji/${version}/emoji-test.txt";
17 sha256 = "1dqd0fh999mh6naj816ni113m9dimfy3ih9nffjq2lrv9mmlgdck";
18 };
19 emoji-variation-sequences = fetchurl {
20 url = "http://www.unicode.org/Public/emoji/${version}/emoji-variation-sequences.txt";
21 sha256 = "1cccwx5bl79w4c19vi5dhjqxrph92s8hihp9y8s2cqvdzmgbln7a";
22 };
23 emoji-zwj-sequences = fetchurl {
24 url = "http://www.unicode.org/Public/emoji/${version}/emoji-zwj-sequences.txt";
25 sha256 = "1l791nbijmmhwa7kmvfn8gp26ban512l6mgqpz1mnbq3xm19181n";
26 };
27 };
28 zippedFiles = {
29 UCD = fetchurl {
30 url = "http://www.unicode.org/Public/zipped/${version-full}/UCD.zip";
31 sha256 = "1ighy39cjkmqnv1797wrxjz76mv1fdw7zp5j04q55bkwxsdkvrmh";
32 };
33 Unihan = fetchurl {
34 url = "http://www.unicode.org/Public/zipped/${version-full}/Unihan.zip";
35 sha256 = "1kfdhgg2gm52x3s07bijb5cxjy0jxwhd097k5lqhvzpznprm6ibf";
36 };
37 };
38in
39 runCommand "unicode" {
40 buildInputs = [ libarchive ];
41 } ''
42 mkdir -p $out/share/unicode
43 ${builtins.concatStringsSep "\n" (mapAttrsToList (n: u: "install -Dm644 ${u} $out/share/unicode/emoji/${n}.txt") files)}
44 ${builtins.concatStringsSep "\n" (mapAttrsToList (n: u: ''
45 install -Dm644 ${u} $out/share/unicode/${n}.zip
46 bsdtar -C "$out/share/unicode" -x -f "$out/share/unicode/${n}.zip"
47 '') zippedFiles)}
48 ''
diff --git a/flakes/mypackages/pkgs/upcmd/default.nix b/flakes/mypackages/pkgs/upcmd/default.nix
new file mode 100644
index 0000000..614ae2b
--- /dev/null
+++ b/flakes/mypackages/pkgs/upcmd/default.nix
@@ -0,0 +1,13 @@
1{ buildGoModule, fetchFromGitHub }:
2buildGoModule rec {
3 pname = "upcmd";
4 version = "20220112";
5 src = fetchFromGitHub {
6 owner = pname;
7 repo = "up";
8 rev = "rolling-${version}";
9 sha256 = "sha256-dCi8p0oqLjEhEazbT4sgH7Sku3f/N79VWj5CO7LbvVA=";
10 };
11 doCheck = false;
12 vendorSha256 = "sha256-Ve+lEVrxv4rwymrqHSc1V4SL7BWP4wsIHF8ObBWyHE4=";
13}
diff --git a/flakes/mypackages/pkgs/webapps/adminer/default.nix b/flakes/mypackages/pkgs/webapps/adminer/default.nix
new file mode 100644
index 0000000..cd01080
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/adminer/default.nix
@@ -0,0 +1,14 @@
1{ stdenv, fetchurl }:
2stdenv.mkDerivation rec {
3 version = "4.8.2";
4 pname = "adminer";
5 src = fetchurl {
6 url = "https://github.com/adminerevo/adminerevo/releases/download/v${version}/${pname}-${version}.php";
7 sha256 = "sha256-jXcnGLyNQZqJKS0Rs+UY1SxzknBEZwBhcbD0BmJVFKs=";
8 };
9 phases = "installPhase";
10 installPhase = ''
11 mkdir -p $out
12 cp $src $out/index.php
13 '';
14}
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/default.nix b/flakes/mypackages/pkgs/webapps/apache-theme/default.nix
new file mode 100644
index 0000000..4b5755a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/default.nix
@@ -0,0 +1,88 @@
1{ theme_root ? null }:
2rec {
3 theme = ./theme;
4 apacheConfig = let
5 theme_root' = if isNull theme_root then theme else theme_root;
6 in ''
7 <Macro Apaxy %{folder} %{ignored}>
8 Alias /theme ${theme_root'}
9 <Directory ${theme_root'}>
10 Options -Indexes
11 AllowOverride None
12 Require all granted
13 </Directory>
14
15 # mod_autoindex
16 <Directory %{folder}>
17 Options Indexes
18 AllowOverride None
19 Require all granted
20
21 # Inspired from Apaxy by @adamwhitcroft
22
23 IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks +ShowForbidden
24
25 IndexHeadInsert "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />"
26
27 IndexIgnoreReset ON
28 IndexIgnore /theme .htaccess %{ignored}
29
30 AddIcon /theme/icons/blank.png ^^BLANKICON^^
31 AddIcon /theme/icons/folder.png ^^DIRECTORY^^
32 AddIcon /theme/icons/folder-home.png ..
33
34 AddIconByType (TXT,/theme/icons/text.png) text/*
35 AddIconByType (IMG,/theme/icons/image.png) image/*
36 AddIconByType (SND,/theme/icons/audio.png) audio/*
37 AddIconByType (VID,/theme/icons/video.png) video/*
38
39 AddIcon /theme/icons/archive.png .7z .bz2 .cab .gz .tar
40 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
41 AddIcon /theme/icons/bin.png .bin .hex
42 AddIcon /theme/icons/bmp.png .bmp
43 AddIcon /theme/icons/c.png .c
44 AddIcon /theme/icons/calc.png .xlsx .xlsm .xltx .xltm .xlam .xlr .xls .csv
45 AddIcon /theme/icons/cd.png .iso
46 AddIcon /theme/icons/cpp.png .cpp
47 AddIcon /theme/icons/css.png .css .sass .scss
48 AddIcon /theme/icons/deb.png .deb
49 AddIcon /theme/icons/doc.png .doc .docx .docm .dot .dotx .dotm .log .msg .odt .pages .rtf .tex .wpd .wps
50 AddIcon /theme/icons/draw.png .svg .svgz
51 AddIcon /theme/icons/eps.png .ai .eps
52 AddIcon /theme/icons/exe.png .exe
53 AddIcon /theme/icons/gif.png .gif
54 AddIcon /theme/icons/h.png .h
55 AddIcon /theme/icons/html.png .html .xhtml .shtml .htm .URL .url
56 AddIcon /theme/icons/ico.png .ico
57 AddIcon /theme/icons/java.png .jar
58 AddIcon /theme/icons/jpg.png .jpg .jpeg .jpe
59 AddIcon /theme/icons/js.png .js .json
60 AddIcon /theme/icons/markdown.png .md
61 AddIcon /theme/icons/package.png .pkg .dmg
62 AddIcon /theme/icons/pdf.png .pdf
63 AddIcon /theme/icons/php.png .php .phtml
64 AddIcon /theme/icons/playlist.png .m3u .m3u8 .pls .pls8
65 AddIcon /theme/icons/png.png .png
66 AddIcon /theme/icons/ps.png .ps
67 AddIcon /theme/icons/psd.png .psd
68 AddIcon /theme/icons/py.png .py
69 AddIcon /theme/icons/rar.png .rar
70 AddIcon /theme/icons/rb.png .rb
71 AddIcon /theme/icons/rpm.png .rpm
72 AddIcon /theme/icons/rss.png .rss
73 AddIcon /theme/icons/script.png .bat .cmd .sh
74 AddIcon /theme/icons/sql.png .sql
75 AddIcon /theme/icons/tiff.png .tiff .tif
76 AddIcon /theme/icons/text.png .txt .nfo
77 AddIcon /theme/icons/video.png .asf .asx .avi .flv .mkv .mov .mp4 .mpg .rm .srt .swf .vob .wmv .m4v .f4v .f4p .ogv
78 AddIcon /theme/icons/xml.png .xml
79 AddIcon /theme/icons/zip.png .zip
80 DefaultIcon /theme/icons/default.png
81
82 HeaderName /theme/header.html
83 ReadmeName /theme/footer.html
84 IndexStyleSheet /theme/style.css
85 </Directory>
86 </Macro>
87 '';
88}
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/.htaccess b/flakes/mypackages/pkgs/webapps/apache-theme/theme/.htaccess
new file mode 100644
index 0000000..f9e5472
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/.htaccess
@@ -0,0 +1,9 @@
1#
2# Apaxy by @adamwhitcroft
3#
4# For a full breakdown of the mod_autoindex module
5# http://apache.org/docs/2.2/mod/mod_autoindex.html
6#
7
8# Don't index this folder
9Options -Indexes
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/footer.html b/flakes/mypackages/pkgs/webapps/apache-theme/theme/footer.html
new file mode 100644
index 0000000..57a2012
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/footer.html
@@ -0,0 +1,31 @@
1</div><!--/.wrapper-->
2
3<script type="text/javascript">
4// grab the 2nd child and add the parent class. tr:nth-child(2)
5document.getElementsByTagName('tr')[1].className = 'parent';
6// fix links when not adding a / at the end of the URI
7var uri = window.location.pathname.substr(1);
8if (uri.length > 0 && uri.substring(uri.length-1) != '/'){
9 var indexes = document.getElementsByClassName('indexcolname'),
10 i = indexes.length;
11 while (i--){
12 var a = indexes[i].getElementsByTagName('a')[0];
13 a.href = '/' + uri + '/' + a.getAttribute('href',2);
14 }
15}
16
17function getAjax(url, success) {
18 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
19 xhr.open('GET', url);
20 xhr.onreadystatechange = function() {
21 if (xhr.readyState>3 && xhr.status==200)
22 success(xhr.responseText);
23 };
24 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
25 xhr.send();
26 return xhr;
27}
28getAjax("title", function(data) {
29 document.getElementById('pagetitle').innerHTML = data;
30});
31</script>
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/header.html b/flakes/mypackages/pkgs/webapps/apache-theme/theme/header.html
new file mode 100644
index 0000000..cbded6a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/header.html
@@ -0,0 +1,3 @@
1<div class="wrapper">
2 <h1 id="pagetitle"></h1>
3<!-- we open the `wrapper` element here, but close it in the `footer.html` file -->
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/archive.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/archive.png
new file mode 100644
index 0000000..99ae6fc
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/archive.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/audio.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/audio.png
new file mode 100644
index 0000000..a67618d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/audio.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/authors.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/authors.png
new file mode 100644
index 0000000..78bf784
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/authors.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bin.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bin.png
new file mode 100644
index 0000000..ec2220b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bin.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/blank.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/blank.png
new file mode 100644
index 0000000..bef1f60
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/blank.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bmp.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bmp.png
new file mode 100644
index 0000000..c6f3044
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/bmp.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/c.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/c.png
new file mode 100644
index 0000000..12adaa3
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/c.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/calc.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/calc.png
new file mode 100644
index 0000000..a034367
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/calc.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cd.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cd.png
new file mode 100644
index 0000000..3a3ffbb
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cd.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/copying.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/copying.png
new file mode 100644
index 0000000..83fa06e
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/copying.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cpp.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cpp.png
new file mode 100644
index 0000000..47e8b1e
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/cpp.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/css.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/css.png
new file mode 100644
index 0000000..15f7695
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/css.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/deb.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/deb.png
new file mode 100644
index 0000000..1b12d29
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/deb.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/default.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/default.png
new file mode 100644
index 0000000..6997229
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/default.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/diff.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/diff.png
new file mode 100644
index 0000000..5bef920
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/diff.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/doc.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/doc.png
new file mode 100644
index 0000000..5732f9b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/doc.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/draw.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/draw.png
new file mode 100644
index 0000000..8f1da5c
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/draw.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/eps.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/eps.png
new file mode 100644
index 0000000..93736bb
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/eps.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/exe.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/exe.png
new file mode 100644
index 0000000..31299b7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/exe.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-home.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-home.png
new file mode 100644
index 0000000..14fe20a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-home.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-open.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-open.png
new file mode 100644
index 0000000..2aa5cc7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-open.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-page.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-page.png
new file mode 100644
index 0000000..604f9ad
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-page.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png
new file mode 100644
index 0000000..b82d7a9
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent.png
new file mode 100644
index 0000000..3c964f1
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder-parent.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder.png
new file mode 100644
index 0000000..7c613e0
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/folder.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gif.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gif.png
new file mode 100644
index 0000000..01a2f2a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gif.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gzip.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gzip.png
new file mode 100644
index 0000000..99ae6fc
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/gzip.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/h.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/h.png
new file mode 100644
index 0000000..d3c7a9c
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/h.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/hpp.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/hpp.png
new file mode 100644
index 0000000..e5e52e2
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/hpp.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/html.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/html.png
new file mode 100644
index 0000000..2f94a78
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/html.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ico.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ico.png
new file mode 100644
index 0000000..82227e8
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ico.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/image.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/image.png
new file mode 100644
index 0000000..add1c59
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/image.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/install.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/install.png
new file mode 100644
index 0000000..0a9c036
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/install.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/java.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/java.png
new file mode 100644
index 0000000..63b8683
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/java.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/jpg.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/jpg.png
new file mode 100644
index 0000000..a50c99b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/jpg.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/js.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/js.png
new file mode 100644
index 0000000..af1a475
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/js.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/json.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/json.png
new file mode 100644
index 0000000..af1a475
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/json.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/log.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/log.png
new file mode 100644
index 0000000..02f1b9a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/log.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/makefile.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/makefile.png
new file mode 100644
index 0000000..f99ea4c
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/makefile.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/markdown.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/markdown.png
new file mode 100644
index 0000000..25c8373
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/markdown.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/package.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/package.png
new file mode 100644
index 0000000..fb1343e
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/package.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pdf.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pdf.png
new file mode 100644
index 0000000..7408d8d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pdf.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/php.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/php.png
new file mode 100644
index 0000000..22c4df6
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/php.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/playlist.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/playlist.png
new file mode 100644
index 0000000..8d6f281
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/playlist.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/png.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/png.png
new file mode 100644
index 0000000..1fe1ec4
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/png.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pres.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pres.png
new file mode 100644
index 0000000..db195e9
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/pres.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ps.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ps.png
new file mode 100644
index 0000000..05f3ed9
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/ps.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/psd.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/psd.png
new file mode 100644
index 0000000..62718ee
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/psd.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/py.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/py.png
new file mode 100644
index 0000000..0aaffd1
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/py.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rar.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rar.png
new file mode 100644
index 0000000..8a0ff54
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rar.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rb.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rb.png
new file mode 100644
index 0000000..c7db42f
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rb.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/readme.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/readme.png
new file mode 100644
index 0000000..3ae48cd
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/readme.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rpm.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rpm.png
new file mode 100644
index 0000000..64699ac
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rpm.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rss.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rss.png
new file mode 100644
index 0000000..a1130a1
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rss.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rtf.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rtf.png
new file mode 100644
index 0000000..25c8373
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/rtf.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/script.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/script.png
new file mode 100644
index 0000000..1099b5f
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/script.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/source.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/source.png
new file mode 100644
index 0000000..5bef920
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/source.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/sql.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/sql.png
new file mode 100644
index 0000000..b3b1467
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/sql.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tar.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tar.png
new file mode 100644
index 0000000..bab3b6a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tar.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tex.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tex.png
new file mode 100644
index 0000000..1487b25
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tex.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/text.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/text.png
new file mode 100644
index 0000000..1d48677
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/text.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tiff.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tiff.png
new file mode 100644
index 0000000..819e64c
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/tiff.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/unknown.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/unknown.png
new file mode 100644
index 0000000..b1dcc3f
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/unknown.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/vcal.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/vcal.png
new file mode 100644
index 0000000..3d81455
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/vcal.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/video.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/video.png
new file mode 100644
index 0000000..f92f7e1
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/video.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/xml.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/xml.png
new file mode 100644
index 0000000..83a83df
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/xml.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/zip.png b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/zip.png
new file mode 100644
index 0000000..cc196c1
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/icons/zip.png
Binary files differ
diff --git a/flakes/mypackages/pkgs/webapps/apache-theme/theme/style.css b/flakes/mypackages/pkgs/webapps/apache-theme/theme/style.css
new file mode 100644
index 0000000..e46139f
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/apache-theme/theme/style.css
@@ -0,0 +1,160 @@
1/*------------------------------------*\
2 Apaxy
3 by @adamwhitcroft
4
5 Theme name: Apaxy
6 Theme author: @adamwhitcroft
7\*------------------------------------*/
8@import url('//assets.immae.eu/fonts/OpenSans/font.css');
9/* Have to use @import for the font, as you can only specify a single stylesheet */
10* {
11 margin:0;
12 padding:0;
13 -webkit-box-sizing:border-box;
14 -moz-box-sizing:border-box;
15 box-sizing: border-box;
16}
17
18html {
19 min-height:100%;
20 border-top:10px solid #ECEEF1;
21 border-bottom:10px solid #ECEEF1;
22 color:#61666c;
23 font-weight:400;
24 font-size:1em;
25 font-family:'Open Sans', sans-serif;
26 line-height:2em;
27}
28body {
29 padding:20px;
30 -webkit-backface-visibility:hidden;
31}
32code {
33 font-family:consolas,monospace;
34}
35a {
36 color:#61666c;
37 text-decoration:none;
38}
39a, img {
40 border:none;
41 outline:none
42}
43a:hover {
44 color:#2a2a2a;
45}
46/*------------------------------------*\
47 Wrapper
48\*------------------------------------*/
49.wrapper {
50 margin:0 auto;
51 padding-top:20px;
52 max-width:80%;
53}
54/*------------------------------------*\
55 Demo block
56\*------------------------------------*/
57.block {
58 font-size:.875em;
59 margin:20px 0;
60 padding:20px;
61 color:#9099A3;
62}
63/*------------------------------------*\
64 Table (directory listing)
65\*------------------------------------*/
66table {
67 width:100%;
68 border-collapse:collapse;
69 font-size:.875em;
70}
71tr {
72 outline:0;
73 border:0;
74}
75tr:hover td {
76 background:#f6f6f6;
77}
78th {
79 text-align:left;
80 font-size:.75em;
81 padding-right:20px;
82}
83/* 2nd Column: Filename */
84th + th {
85 width:65%;
86}
87/* 3rd Column: Last Modified */
88th + th + th {
89}
90/* 4th Column: Size */
91th + th + th + th {
92 width:5%;
93}
94tr td:first-of-type {
95 padding-left:10px;
96 padding-right:10px;
97}
98td {
99 padding:5px 0;
100 outline:0;
101 border:0;
102 border-bottom:1px solid #edf1f5;
103 vertical-align:middle;
104 text-align:left;
105 -webkit-transition:background 300ms ease;
106 -moz-transition:background 300ms ease;
107 -ms-transition:background 300ms ease;
108 -o-transition:background 300ms ease;
109 transition:background 300ms ease;
110}
111td a{
112 display: block;
113}
114tr.parent a[href^="/"] {
115 color:#9099A3;
116}
117 .parent a[href^="/"]:hover {
118 color:#2281d0;
119 }
120/*------------------------------------*\
121 Footer
122\*------------------------------------*/
123.footer {
124 text-align:center;
125 font-size:.75em;
126}
127
128h1#pagetitle {
129 text-align: center;
130}
131tr.parent a[href="/"]{
132 display: none;
133}
134
135tr.indexhead {
136 visibility: hidden;
137}
138
139th.indexcollastmod, td.indexcollastmod, th.indexcolsize, td.indexcolsize {
140 visibility: hidden;
141}
142
143.instructions a {
144 text-decoration: underline;
145}
146
147.instructions h2 {
148 margin-top: 10px;
149}
150.instructions em.important:before {
151 content: "⚠ Important ⚠ ";
152 color: red;
153}
154.instructions pre {
155 width: 50em;
156 padding: 10px 15px;
157 display: table;
158 border: 1px inset black;
159 line-height: 1em;
160}
diff --git a/flakes/mypackages/pkgs/webapps/awl/default.nix b/flakes/mypackages/pkgs/webapps/awl/default.nix
new file mode 100644
index 0000000..dc78339
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/awl/default.nix
@@ -0,0 +1,16 @@
1{ stdenv, fetchurl }:
2stdenv.mkDerivation rec {
3 version = "0.62";
4 name = "awl-${version}";
5 src = fetchurl {
6 url = "https://www.davical.org/downloads/awl_${version}.orig.tar.xz";
7 sha256 = "0x9pr8sq3bicnvzsxfwdsqxnvfygn6gy5pawmm6i6fyb1p5h5izz";
8 };
9 unpackCmd = ''
10 tar --one-top-level -xf $curSrc
11 '';
12 installPhase = ''
13 mkdir -p $out
14 cp -ra dba docs inc scripts tests $out
15 '';
16}
diff --git a/flakes/mypackages/pkgs/webapps/davical/default.nix b/flakes/mypackages/pkgs/webapps/davical/default.nix
new file mode 100644
index 0000000..045a93b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/davical/default.nix
@@ -0,0 +1,23 @@
1{ davical_config ? "/etc/davical/config.php", stdenv, fetchurl, gettext }:
2stdenv.mkDerivation rec {
3 version = "1.1.10";
4 name = "davical-${version}";
5 src = fetchurl {
6 url = "https://www.davical.org/downloads/davical_${version}.orig.tar.xz";
7 sha256 = "1d8zw558qrz2rybdv853ai04ar7v5a2dsypnffapx9ihgnrv4hq3";
8 };
9 unpackCmd = ''
10 tar --one-top-level -xf $curSrc
11 '';
12 makeFlags = "all";
13 patchPhase = ''
14 # https://gitlab.com/davical-project/davical/-/issues/229
15 sed -i -e 's/"newpass1"/"newpass1", "password"/g' htdocs/always.php
16 '';
17 installPhase = ''
18 mkdir -p $out
19 cp -ra config dba docs htdocs inc locale po scripts testing zonedb $out
20 ln -s ${davical_config} $out/config/config.php
21 '';
22 buildInputs = [ gettext ];
23}
diff --git a/flakes/mypackages/pkgs/webapps/default.nix b/flakes/mypackages/pkgs/webapps/default.nix
new file mode 100644
index 0000000..18a724d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/default.nix
@@ -0,0 +1,24 @@
1{ callPackage, mylibs, composerEnv, sources }:
2rec {
3 adminer = callPackage ./adminer {};
4 apache-theme = import ./apache-theme;
5 awl = callPackage ./awl {};
6 davical = callPackage ./davical {};
7 dokuwiki = callPackage ./dokuwiki {};
8 infcloud = callPackage ./infcloud {};
9 mantisbt_2 = callPackage ./mantisbt_2 {};
10 nextcloud_25 = callPackage ./nextcloud { nextcloudVersion = 25; };
11 nextcloud_26 = callPackage ./nextcloud { nextcloudVersion = 26; };
12 nextcloud_27 = callPackage ./nextcloud { nextcloudVersion = 27; };
13 nextcloud_25-all = nextcloud_25.withApps (a: builtins.attrValues nextcloud_25.allSupportedApps);
14 nextcloud_26-all = nextcloud_26.withApps (a: builtins.attrValues nextcloud_26.allSupportedApps);
15 nextcloud_27-all = nextcloud_27.withApps (a: builtins.attrValues nextcloud_27.allSupportedApps);
16 phpbb = callPackage ./phpbb {};
17 phpldapadmin = callPackage ./phpldapadmin {};
18 rompr = callPackage ./rompr {};
19 roundcubemail = callPackage ./roundcubemail {};
20 spip = callPackage ./spip {};
21 ttrss = callPackage ./ttrss { inherit sources; };
22 wallabag = callPackage ./wallabag { inherit composerEnv; };
23 yourls = callPackage ./yourls {};
24}
diff --git a/flakes/mypackages/pkgs/webapps/dokuwiki/default.nix b/flakes/mypackages/pkgs/webapps/dokuwiki/default.nix
new file mode 100644
index 0000000..db8be30
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/dokuwiki/default.nix
@@ -0,0 +1,54 @@
1{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, callPackage, stdenv, fetchFromGitHub, writeText }:
2let
3 preloadFile = plugins: let preloads = [preload]
4 ++ builtins.concatMap (p: lib.optional (lib.hasAttr "preload" p) (p.preload p)) plugins;
5 in writeText "preload.php" (''
6 <?php
7 '' + builtins.concatStringsSep "\n" preloads
8 );
9 pluginNames = [ "farmer" "todo" ];
10 allPlugins = lib.attrsets.genAttrs pluginNames
11 (name: callPackage (./plugins + "/${name}.nix") {});
12 toPassthru = pkg: plugins: {
13 inherit plugins varDir allPlugins;
14 withPlugins = withPlugins pkg;
15 };
16 withPlugins = pkg: toPlugins:
17 let
18 plugins = toPlugins allPlugins;
19 toInstallPlugin = n:
20 "ln -sf ${n} $out/lib/plugins/${n.pluginName}";
21 newDokuwiki = pkg.overrideAttrs(old: {
22 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
23 installPreloadPhase = ''
24 cp ${preloadFile (pkg.plugins ++ plugins)} $out/inc/preload.php
25 '';
26 passthru = toPassthru newDokuwiki (pkg.plugins ++ plugins);
27 });
28 in newDokuwiki;
29 package = stdenv.mkDerivation (rec {
30 pname = "dokuwiki";
31 version = "release_stable_2018-04-22b";
32 src = fetchFromGitHub {
33 owner = "splitbrain";
34 repo = "dokuwiki";
35 rev = "871dae1320b40211626c7ec665f5e6d5290aca95";
36 sha256 = "1syvd5dvv3v75swf8ig7dxqs0g5xikb0f6vlcy7g4c4ghldkw7nz";
37 fetchSubmodules = true;
38 };
39 phases = "unpackPhase buildPhase installPhase installPreloadPhase fixupPhase";
40 buildPhase = ''
41 mv conf conf.dist
42 mv data data.dist
43 '';
44 installPhase = ''
45 cp -a . $out
46 ln -sf ${varDir}/{conf,data} $out/
47 ln -sf ${varDir}/conf/.htaccess $out/
48 '';
49 installPreloadPhase = ''
50 cp ${preloadFile []} $out/inc/preload.php
51 '';
52 passthru = toPassthru package [];
53 });
54in package
diff --git a/flakes/mypackages/pkgs/webapps/dokuwiki/plugins/farmer.nix b/flakes/mypackages/pkgs/webapps/dokuwiki/plugins/farmer.nix
new file mode 100644
index 0000000..b737b2d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/dokuwiki/plugins/farmer.nix
@@ -0,0 +1,25 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation rec {
3 version = "72b8577-master";
4 name = "dokuwiki-plugin-farmer-${version}";
5 src = fetchFromGitHub {
6 owner = "cosmocode";
7 repo = "dokuwiki-plugin-farmer";
8 rev = "72b857734fd164bf79cc6e17abe56491d55c1072";
9 sha256 = "1c9vc1z7yvzjz4p054kshb9yd00a4bb52s43k9zav0lvwvjij9l0";
10 };
11 installPhase = ''
12 mkdir $out
13 cp -a * $out
14 '';
15 passthru = {
16 pluginName = "farmer";
17 preload = out: ''
18 # farm setup by farmer plugin
19 if (file_exists('${out}/DokuWikiFarmCore.php'))
20 {
21 include('${out}/DokuWikiFarmCore.php');
22 }
23 '';
24 };
25}
diff --git a/flakes/mypackages/pkgs/webapps/dokuwiki/plugins/todo.nix b/flakes/mypackages/pkgs/webapps/dokuwiki/plugins/todo.nix
new file mode 100644
index 0000000..a3e03fb
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/dokuwiki/plugins/todo.nix
@@ -0,0 +1,18 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation rec {
3 version = "49068ec-master";
4 name = "dokuwiki-plugin-todo-${version}";
5 src = fetchFromGitHub {
6 owner = "leibler";
7 repo = "dokuwiki-plugin-todo";
8 rev = "49068ecea455ea997d1e4a7adab171ccaf8228e8";
9 sha256 = "1jaq623kp14fyhamsas5mk9ryqlk4q6x6znijrb5xhcdg3r83gmq";
10 };
11 installPhase = ''
12 mkdir $out
13 cp -a * $out
14 '';
15 passthru = {
16 pluginName = "todo";
17 };
18}
diff --git a/flakes/mypackages/pkgs/webapps/infcloud/default.nix b/flakes/mypackages/pkgs/webapps/infcloud/default.nix
new file mode 100644
index 0000000..45354fa
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/infcloud/default.nix
@@ -0,0 +1,19 @@
1{ infcloud_config ? ./infcloud_config.js, stdenv, fetchzip, ed }:
2stdenv.mkDerivation rec {
3 version = "0.13.2rc1";
4 name = "InfCloud-${version}";
5 src = fetchzip {
6 url = "https://www.inf-it.com/InfCloud_${version}.zip";
7 sha256 = "1qgw6l7ccfkyzcw9dxcjwhxw9q27c0x9w584amc579mmrn9ppz3n";
8 };
9 buildPhase = ''
10 patchShebangs .
11 ./cache_update.sh
12 rm config.js
13 '';
14 installPhase = ''
15 cp -a . $out
16 ln -s ${infcloud_config} $out/config.js
17 '';
18 buildInputs = [ ed ];
19}
diff --git a/flakes/mypackages/pkgs/webapps/infcloud/infcloud_config.js b/flakes/mypackages/pkgs/webapps/infcloud/infcloud_config.js
new file mode 100644
index 0000000..ba73860
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/infcloud/infcloud_config.js
@@ -0,0 +1,1446 @@
1/*
2InfCloud - the open source CalDAV/CardDAV Web Client
3Copyright (C) 2011-2015
4 Jan Mate <jan.mate@inf-it.com>
5 Andrej Lezo <andrej.lezo@inf-it.com>
6 Matej Mihalik <matej.mihalik@inf-it.com>
7
8This program is free software: you can redistribute it and/or modify
9it under the terms of the GNU Affero General Public License as
10published by the Free Software Foundation, either version 3 of the
11License, or (at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU Affero General Public License for more details.
17
18You should have received a copy of the GNU Affero General Public License
19along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22
23// NOTE: see readme.txt before you start to configure this client!
24
25
26// NOTE: do not forget to execute the cache_update.sh script every time you
27// update this configuration file or any other files (otherwise your browser
28// will use the previous version of files stored in HTML5 cache). Alternatively
29// you can update the cache.manifest manually - edit the second line beginning
30// with "#V 20" to anything else (this file simple needs "some" change)
31
32
33// Supported setup types (use ONE of them):
34// a.) globalAccountSettings => username and password is hardcoded
35// in config.js, automatic login without the login screen
36// - advantages: fast login process = no username/password is required
37// - disadvantages: username/password is visible in your config.js, so
38// this type of setup is recommended ONLY for intranet/home users
39// b.) globalNetworkCheckSettings => standard setup with login screen
40// - advantages: username/password is required (no visible
41// username/password in config.js)
42// - disadvantages: if a user enters wrong username/password then
43// the browser will show authentication popup window (it is NOT
44// possible to disable it in JavaScript; see the next option)
45// c.) globalNetworkAccountSettings => advanced setup with login screen
46// - advantages: no authentication popup if you enter wrong username/
47// password, dynamic XML configuration generator (you can generate
48// different configurations for your users /by modifying the "auth"
49// module configuration or the PHP code itself/)
50// - disadvantages: requires PHP >= 5.3 and additional configuration,
51// only basic http authentication is supported => always use https!
52//
53//
54// What is a "principal URL"? => Check you server documentation!
55// - "principal URL" is NOT "collection URL"
56// - this client automatically detects collections for "principal URL"
57// - PROPER "principal URL" looks like:
58// https://server.com:8443/principals/users/USER/
59// https://server.com:8443/caldav.php/USER/
60// - INVALID principal URL looks like:
61// https://server.com:8443/principals/users/USER/collection/
62// => this is a collection URL
63// https://server.com:8443/caldav.php/USER/collection/
64// => this is a collection URL
65// https://server.com:8443/principals/users/USER
66// => missing trailing '/'
67// https://server.com:8443/caldav.php/USER
68// => missing trailing '/'
69// /caldav.php/USER/
70// => relative URL instead of full URL
71//
72//
73// List of properties used in globalAccountSettings, globalNetworkCheckSettings
74// and globalNetworkAccountSettings variables (+ in the "auth" module):
75// - href
76// Depending on the setup type set the value to:
77// a.) globalAccountSettings: full "principal URL"
78// b.) globalNetworkCheckSettings: "principal URL" WITHOUT the "USER/" part
79// c.) globalNetworkAccountSettings: "full URL" to the "auth" directory
80// This property is supported in:
81// globalAccountSettings
82// globalNetworkCheckSettings
83// globalNetworkAccountSettings
84// - userAuth
85// - userName
86// Set the username you want to login.
87// - userPassword
88// Set the password for the given username.
89// This property is supported in:
90// globalAccountSettings
91// - timeOut
92// This option sets the timeout for jQuery .ajax call (in miliseconds).
93// Example:
94// timeOut: 90000
95// This property is supported in:
96// globalAccountSettings
97// globalNetworkCheckSettings
98// globalNetworkAccountSettings
99// - lockTimeOut
100// NOTE: used only if server supports LOCK requests
101// This option sets the LOCK timeout value if resource locking
102// is used (in miliseconds).
103// Example:
104// lockTimeOut: 10000
105// This property is supported in:
106// globalAccountSettings
107// globalNetworkCheckSettings
108// globalNetworkAccountSettings (available in auth module only)
109// - checkContentType
110// This option enables a content-type checking for server response.
111// If enabled then only objects with proper content-type are inserted
112// into the interface.
113// If you cannot see data in the interface you may try to disable it (useful
114// if your server returns wrong value in "propstat/prop/getcontenttype").
115// If undefined then content-type checking is enabled.
116// Examples:
117// checkContentType: true
118// checkContentType: false
119// This property is supported in:
120// globalAccountSettings
121// globalNetworkCheckSettings
122// globalNetworkAccountSettings (available in auth module only)
123// - settingsAccount
124// NOTE: server support for custom DAV properties is REQUIRED!
125// This option sets the account where the client properties such as:
126// loaded collections, enabled collections, ... are saved during
127// the logout and resource/collection synchronisation
128// NOTE: set it to true ONLY for ONE account!
129// Examples:
130// settingsAccount: true
131// settingsAccount: false
132// This property is supported in:
133// globalAccountSettings
134// globalNetworkCheckSettings
135// globalNetworkAccountSettings (available in auth module only)
136// - delegation
137// NOTE: server support for this functionality is REQUIRED!
138// This option allows you to load delegated (shared) collections.
139// If set to true (default) then delegation functionality is enabled,
140// and the interface allows you to load delegated collections.
141// If false then delegation functionality is completely disabled.
142// Examples:
143// delegation: true
144// delegation: false
145// This property is supported in:
146// globalAccountSettings
147// globalNetworkCheckSettings
148// globalNetworkAccountSettings (available in auth module only)
149// - additionalResources
150// This options sets the list of additional resources (e.g. shared resources
151// accessible by all users). If the server supports delegation (see
152// the delegation option above) there is no reason to use this option!
153// Supported values:
154// - array of URL encoded resource names (not collections), such as:
155// 'company'
156// 'shared_resource'
157// If empty (default) or undefined then shared resources are not loaded
158// using this option, but may be loaded using the delegation option.
159// Examples:
160// additionalResources=[]
161// additionalResources=['public', 'shared_resource']
162// This property is supported in:
163// globalNetworkCheckSettings
164// - hrefLabel
165// This option sets the server name in the resource header (useful if
166// you want to see custom resource header above the collections).
167// You can use the following variables in the value:
168// %H = full hostname (including the port number)
169// %h = full hostname (without the port number)
170// %D = full domain name
171// %d = only the first and second level domain
172// %P = principal name
173// %p = principal name without the @domain.com part (if present)
174// %U = logged user name
175// %u = logged user name without the @domain.com part (if present)
176// If undefined, empty or or null then '%d/%p [%u]' is used.
177// Examples:
178// hrefLabel: '%d/%p [%u]'
179// hrefLabel: '%D/%u'
180// This property is supported in:
181// globalAccountSettings
182// globalNetworkCheckSettings
183// globalNetworkAccountSettings (available in auth module only)
184// - forceReadOnly
185// This option sets the list of collections as "read-only".
186// Supported values:
187// - true
188// all collections will be "read-only"
189// - array of URL encoded
190// - collections, such as:
191// '/caldav.php/user/calendar/'
192// '/caldav.php/user%40domain.com/calendar/'
193// - regexes, such as:
194// new RegExp('^/caldav.php/user/calendar[0-9]/$', 'i')
195// specifies the list of collections marked as "read-only"
196// If null (default) or undefined then server detected privileges are used.
197// Examples:
198// forceReadOnly: null
199// forceReadOnly: true
200// forceReadOnly: ['/caldav.php/user/calendar/',
201// '/caldav.php/user/calendar2/']
202// forceReadOnly: [new RegExp('^/.*/user/calendar[0-9]/$', 'i')]
203// This property is supported in:
204// globalAccountSettings
205// globalNetworkCheckSettings
206// globalNetworkAccountSettings (available in auth module only, with
207// different syntax for regexes)
208// - ignoreAlarms
209// This option sets list of calendar collections with disabled
210// alarm functionality.
211// Supported values:
212// - true
213// alarm functionality is disabled for all collections
214// - array of URL encoded
215// - collections, such as:
216// '/caldav.php/user/calendar/'
217// '/caldav.php/user%40domain.com/calendar/'
218// - regexes, such as:
219// new RegExp('^/caldav.php/user/calendar[0-9]/$', 'i')
220// specifies the list of collections with disabled alarm functionality.
221// If false (default) or undefined then alarm functionality is enabled
222// for all collections.
223// Examples:
224// ignoreAlarms: true
225// ignoreAlarms: ['/caldav.php/user/calendar/',
226// '/caldav.php/user/calendar2/']
227// ignoreAlarms: [new RegExp('^/.*/user/calendar[0-9]/$', 'i')]
228// This property is supported in:
229// globalAccountSettings
230// globalNetworkCheckSettings
231// globalNetworkAccountSettings (available in auth module only, with
232// different syntax for regexes)
233// - backgroundCalendars
234// This options defines a list of background calendars. If there is
235// at least one event defined for the given day in a background calendar,
236// the background color for that day will be pink/light-red.
237// Supported values:
238// - array of URL encoded
239// - collections, such as:
240// '/caldav.php/user/calendar/'
241// '/caldav.php/user%40domain.com/calendar/'
242// - regexes, such as:
243// new RegExp('^/caldav.php/user/calendar[0-9]/$', 'i')
244// specifies the list of background calendar collections.
245// Examples:
246// backgroundCalendars: ['/caldav.php/user/calendar/',
247// '/caldav.php/user/calendar2/']
248// backgroundCalendars: [new RegExp('^/.*/user/calendar[0-9]/$', 'i')]
249// This property is supported in:
250// globalAccountSettings
251// globalNetworkCheckSettings
252// globalNetworkAccountSettings (available in auth module only, with
253// different syntax for regexes)
254// Special options not present in configuration examples:
255// NOTE: use ONLY if you know what are you doing!
256// - crossDomain
257// This option sets the crossDomain for jQuery .ajax call. If null (default)
258// then the value is autodetected /and the result is shown in the console/
259// - withCredentials
260// This option sets the withCredentials for jQuery .ajax call. The default
261// value is false and there is NO REASON to change it to true!
262// NOTE: if true, Access-Control-Allow-Origin "*" (CORS header) not works!
263
264
265// globalAccountSettings
266// Use this option if you want to use automatic login (without a login
267// screen) with hardcoded username/password in config.js. Otherwise use
268// globalNetworkCheckSettings or globalNetworkAccountSettings (see below).
269// NOTE: if this option is used the value must be an array of object(s).
270// List of properties used in globalAccountSettings variable:
271// - href
272// Set this option to the full "principal URL".
273// NOTE: the last character in the value must be '/'
274// - userAuth
275// - userName
276// Set the username you want to login.
277// - userPassword
278// Set the password for the given username.
279// NOTE: for description of other properties see comments at the beginning
280// of this file.
281// NOTE: for minimal/fast setup you need to set only the href and userAuth
282// options. It is safe/recommended to keep the remaining options unchanged!
283// Example:
284//var globalAccountSettings=[
285// {
286// href: 'https://server1.com:8443/caldav.php/USERNAME1/',
287// userAuth:
288// {
289// userName: 'USERNAME1',
290// userPassword: 'PASSWORD1'
291// },
292// timeOut: 90000,
293// lockTimeOut: 10000,
294// checkContentType: true,
295// settingsAccount: true,
296// delegation: true,
297// hrefLabel: null,
298// forceReadOnly: null,
299// ignoreAlarms: false,
300// backgroundCalendars: []
301// },
302// {
303// href: 'https://server2.com:8443/caldav.php/USERNAME2/',
304// ...
305// ...
306// }
307//];
308
309
310// globalNetworkCheckSettings
311// Use this option if you want to use standard login screen without
312// hardcoded username/password in config.js (used by globalAccountSettings).
313// NOTE: if this option is used the value must be an object.
314// List of properties used in globalAccountSettings variable:
315// - href
316// Set this option to the "principal URL" WITHOUT the "USERNAME/"
317// part (this options uses the username from the login screen).
318// NOTE: the last character in the value must be '/'
319// NOTE: for description of other properties see comments at the beginning
320// of this file.
321// NOTE: for minimal/fast setup you need to set only the href option. It is
322// safe/recommended to keep the remaining options unchanged!
323// Example href values:
324// OS X server http example (see misc/readme_osx.txt for server setup):
325// href: 'http://osx.server.com:8008/principals/users/'
326// OS X server https example (see misc/readme_osx.txt for server setup):
327// href: 'https://osx.server.com:8443/principals/users/'
328// Cyrus server https example:
329// href: 'https://cyrus.server.com/dav/principals/user/'
330// Example:
331// Davical example which automatically detects the protocol, server name,
332// port, ... (client installed into Davical "htdocs" subdirectory;
333// works "out of the box", no additional setup required):
334var globalNetworkCheckSettings={
335 href: location.protocol+'//'+location.hostname+
336 (location.port ? ':'+location.port: '')+
337 location.pathname.replace(RegExp('/+[^/]+/*(index\.html)?$'),'')+
338 '/caldav.php/',
339 timeOut: 90000,
340 lockTimeOut: 10000,
341 checkContentType: true,
342 settingsAccount: true,
343 delegation: true,
344 additionalResources: [],
345 hrefLabel: null,
346 forceReadOnly: null,
347 ignoreAlarms: false,
348 backgroundCalendars: []
349}
350
351
352// globalNetworkAccountSettings
353// Try this option ONLY if you have working setup using
354// globalNetworkCheckSettings and want to fix the authentication popup
355// window problem (if invalid username/password is entered)!
356// If you use this option then your browser sends username/password to the PHP
357// "auth" module ("auth" directory) instead of the DAV server itself.
358// The "auth" module then validates your username/password against your server,
359// and if the authentication is successful, then it sends back a configuration
360// XML (requires additional configuration). The resulting XML is handled
361// IDENTICALLY as the globalAccountSettings configuration option.
362// NOTE: for the "auth" module configuration see readme.txt!
363// NOTE: this option invokes a login screen and disallows access until
364// the client gets correct XML configuration file from the server!
365// List of properties used in globalNetworkAccountSettings variable:
366// - href
367// Set this option to the "full URL" of the "auth" directory
368// NOTE: the last character in the value must be '/'
369// NOTE: for description of other properties see comments at the beginning
370// of this file.
371// Example href values:
372// href: 'https://server.com/client/auth/'
373// Example:
374// Use this configuration if the "auth" module is located in the client
375// installation subdirectory (default):
376//var globalNetworkAccountSettings={
377// href: location.protocol+'//'+location.hostname+
378// (location.port ? ':'+location.port : '')+
379// location.pathname.replace(RegExp('index\.html$'),'')+
380// 'auth/',
381// timeOut: 30000
382//};
383
384
385// globalUseJqueryAuth
386// Use jQuery .ajax() auth or custom header for HTTP basic auth (default).
387// Set this option to true if your server uses digest auth (note: you may
388// experience auth popups on some browsers).
389// If undefined (or empty), custom header for HTTP basic auth is used.
390// Example:
391//var globalUseJqueryAuth=false;
392
393
394// globalBackgroundSync
395// Enable background synchronization even if the browser window/tab has no
396// focus.
397// If false, synchronization is performed only if the browser window/tab
398// is focused. If undefined or not false, then background sync is enabled.
399// Example:
400var globalBackgroundSync=true;
401
402
403// globalSyncResourcesInterval
404// This option defines how often (in miliseconds) are resources/collections
405// asynchronously synchronized.
406// Example:
407var globalSyncResourcesInterval=120000;
408
409
410// globalEnableRefresh
411// This option enables or disables the manual synchronization button in
412// the interface. If this option is enabled then users can perform server
413// synchronization manually. Enabling this option may cause high server
414// load (even DDOS) if users will try to manually synchronize data too
415// often (instead of waiting for the automatic synchronization).
416// If undefined or false, the synchronization button is disabled.
417// NOTE: enable this option only if you really know what are you doing!
418// Example:
419var globalEnableRefresh=false;
420
421
422// globalEnableKbNavigation
423// Enable basic keyboard navigation using arrow keys?
424// If undefined or not false, keyboard navigation is enabled.
425// Example:
426var globalEnableKbNavigation=true;
427
428
429// globalSettingsType
430// Where to store user settings such as: active view, enabled/selected
431// collections, ... (the client store them into DAV property on the server).
432// NOTE: not all servers support storing DAV properties (some servers support
433// only subset /or none/ of these URLs).
434// Supported values:
435// - 'principal-URL', '', null or undefined (default) => settings are stored
436// to principal-URL (recommended for most servers)
437// - 'addressbook-home-set' => settings are are stored to addressbook-home-set
438// - 'calendar-home-set' => settings are stored to calendar-home-set
439// Example:
440//var globalSettingsType='';
441
442
443// globalCrossServerSettingsURL
444// Settings such as enabled/selected collections are stored on the server
445// (see the previous option) in form of full URL
446// (e.g.: https://user@server:port/principal/collection/), but even if this
447// approach is "correct" (you can use the same principal URL with multiple
448// different logins, ...) it causes a problem if your server is accessible
449// from multiple URLs (e.g. http://server/ and https://server/). If you want
450// to store only the "principal/collection/" part of the URL (instead of the
451// full URL) then enable this option.
452// Example:
453//var globalCrossServerSettingsURL=false;
454
455
456// globalInterfaceLanguage
457// Default interface language (note: this option is case sensitive):
458// cs_CZ (Čeština [Czech])
459// da_DK (Dansk [Danish]; thanks Niels Bo Andersen)
460// de_DE (Deutsch [German]; thanks Marten Gajda and Thomas Scheel)
461// en_US (English [English/US])
462// es_ES (Español [Spanish]; thanks Damián Vila)
463// fr_FR (Français [French]; thanks John Fischer)
464// it_IT (Italiano [Italian]; thanks Luca Ferrario)
465// ja_JP (日本語 [Japan]; thanks Muimu Nakayama)
466// hu_HU (Magyar [Hungarian])
467// nl_NL (Nederlands [Dutch]; thanks Johan Vromans)
468// sk_SK (Slovenčina [Slovak])
469// tr_TR (Türkçe [Turkish]; thanks Selcuk Pultar)
470// ru_RU (Русский [Russian]; thanks Александр Симонов)
471// uk_UA (Українська [Ukrainian]; thanks Serge Yakimchuck)
472// zh_CN (中国 [Chinese]; thanks Fandy)
473// Example:
474var globalInterfaceLanguage='fr_FR';
475
476
477// globalInterfaceCustomLanguages
478// If defined and not empty then only languages listed here are shown
479// at the login screen, otherwise (default) all languages are shown
480// NOTE: values in the array must refer to an existing localization
481// (see the option above)
482// Example:
483// globalInterfaceCustomLanguages=['en_US', 'sk_SK'];
484var globalInterfaceCustomLanguages=[];
485
486
487// globalSortAlphabet
488// Use JavaScript localeCompare() or custom alphabet for data sorting.
489// Custom alphabet is used by default because JavaScript localeCompare()
490// not supports collation and often returns "wrong" result. If set to null
491// then localeCompare() is used.
492// Example:
493// var globalSortAlphabet=null;
494var globalSortAlphabet=' 0123456789'+
495 'AÀÁÂÄÆÃÅĀBCÇĆČDĎEÈÉÊËĒĖĘĚFGĞHIÌÍÎİÏĪĮJKLŁĹĽMNŃÑŇOÒÓÔÖŐŒØÕŌ'+
496 'PQRŔŘSŚŠȘșŞşẞTŤȚțŢţUÙÚÛÜŰŮŪVWXYÝŸZŹŻŽ'+
497 'aàáâäæãåābcçćčdďeèéêëēėęěfgğhiìíîïīįıjklłĺľmnńñňoòóôöőœøõō'+
498 'pqrŕřsśšßtťuùúûüűůūvwxyýÿzźżžАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯ'+
499 'Ьабвгґдеєжзиіїйклмнопрстуфхцчшщюяь';
500
501
502// globalSearchTransformAlphabet
503// To support search without diacritics (e.g. search for 'd' will find: 'Ď', 'ď')
504// it is required to define something like "character equivalence".
505// key = regex text, value = search character
506// Example:
507var globalSearchTransformAlphabet={
508 '[ÀàÁáÂâÄäÆæÃãÅåĀā]': 'a', '[ÇçĆćČč]': 'c', '[Ďď]': 'd',
509 '[ÈèÉéÊêËëĒēĖėĘęĚě]': 'e', '[Ğğ]': 'g', '[ÌìÍíÎîİıÏïĪīĮį]': 'i',
510 '[ŁłĹ弾]': 'l', '[ŃńÑñŇň]': 'n', '[ÒòÓóÔôÖöŐőŒœØøÕõŌō]': 'o',
511 '[ŔŕŘř]': 'r', '[ŚśŠšȘșŞşẞß]': 's', '[ŤťȚțŢţ]': 't',
512 '[ÙùÚúÛûÜüŰűŮůŪū]': 'u', '[ÝýŸÿ]': 'y', '[ŹźŻżŽž]': 'z'
513};
514
515// globalResourceAlphabetSorting
516// If more than one resource (server account) is configured, sort the
517// resources alphabetically?
518// Example:
519var globalResourceAlphabetSorting=true;
520
521
522// globalNewVersionNotifyUsers
523// Update notification will be shown only to users with login names defined
524// in this array.
525// If undefined (or empty), update notifications will be shown to all users.
526// Example:
527// globalNewVersionNotifyUsers=['admin', 'peter'];
528var globalNewVersionNotifyUsers=[];
529
530
531// globalDatepickerFormat
532// Set the datepicker format (see
533// http://docs.jquery.com/UI/Datepicker/formatDate for valid values).
534// NOTE: date format is predefined for each localization - use this option
535// ONLY if you want to use custom date format (instead of the localization
536// predefined one).
537// Example:
538//var globalDatepickerFormat='dd.mm.yy';
539var globalDatepickerFormat='yy-mm-dd';
540
541
542// globalDatepickerFirstDayOfWeek
543// Set the datepicker first day of the week: Sunday is 0, Monday is 1, etc.
544// Example:
545var globalDatepickerFirstDayOfWeek=1;
546
547
548// globalHideInfoMessageAfter
549// How long are information messages (such as: success, error) displayed
550// (in miliseconds).
551// Example:
552var globalHideInfoMessageAfter=1800;
553
554
555// globalEditorFadeAnimation
556// Set the editor fade in/out animation duration when editing or saving data
557// (in miliseconds).
558// Example:
559var globalEditorFadeAnimation=666;
560
561
562
563
564// ******* CalDAV (CalDavZAP) related settings ******* //
565
566// globalEventStartPastLimit, globalEventStartFutureLimit, globalTodoPastLimit
567// Number of months pre-loaded from past/future in advance for calendars
568// and todo lists (if null then date range synchronization is disabled).
569// NOTE: interval synchronization is used only if your server supports
570// sync-collection REPORT (e.g. DAViCal).
571// NOTE: if you experience problems with data loading and your server has
572// no time-range filtering support set these variables to null.
573// Example:
574var globalEventStartPastLimit=3;
575var globalEventStartFutureLimit=3;
576var globalTodoPastLimit=1;
577
578
579// globalLoadedCalendarCollections
580// This option sets the list of calendar collections (down)loaded after login.
581// If empty then all calendar collections for the currently logged user are
582// loaded.
583// NOTE: settings stored on the server (see settingsAccount) overwrite this
584// option.
585// Example:
586var globalLoadedCalendarCollections=[];
587
588
589// globalLoadedTodoCollections
590// This option sets the list of todo collections (down)loaded after login.
591// If empty then all todo collections for the currently logged user are loaded.
592// NOTE: settings stored on the server (see settingsAccount) overwrite this
593// option.
594// Example:
595var globalLoadedTodoCollections=[];
596
597
598// globalActiveCalendarCollections
599// This options sets the list of calendar collections checked (enabled
600// checkbox => data visible in the interface) by default after login.
601// If empty then all loaded calendar collections for the currently logged
602// user are checked.
603// NOTE: only already (down)loaded collections can be checked (see
604// the globalLoadedCalendarCollections option).
605// NOTE: settings stored on the server (see settingsAccount) overwrite this
606// option.
607// Example:
608var globalActiveCalendarCollections=[];
609
610
611// globalActiveTodoCollections
612// This options sets the list of todo collections checked (enabled
613// checkbox => data visible in the interface) by default after login.
614// If empty then all loaded todo collections for the currently logged
615// user are checked.
616// NOTE: only already (down)loaded collections can be checked (see
617// the globalLoadedTodoCollections option).
618// NOTE: settings stored on the server (see settingsAccount) overwrite this
619// option.
620// Example:
621var globalActiveTodoCollections=[];
622
623
624// globalCalendarSelected
625// This option sets which calendar collection will be pre-selected
626// (if you create a new event) by default after login.
627// The value must be URL encoded path to a calendar collection,
628// for example: 'USER/calendar/'
629// If empty or undefined then the first available calendar collection
630// is selected automatically.
631// NOTE: only already (down)loaded collections can be pre-selected (see
632// the globalLoadedCalendarCollections option).
633// NOTE: settings stored on the server (see settingsAccount) overwrite this
634// option.
635// Example:
636//var globalCalendarSelected='';
637
638
639// globalTodoCalendarSelected
640// This option sets which todo collection will be pre-selected
641// (if you create a new todo) by default after login.
642// The value must be URL encoded path to a todo collection,
643// for example: 'USER/todo_calendar/'
644// If empty or undefined then the first available todo collection
645// is selected automatically.
646// NOTE: only already (down)loaded collections can be pre-selected (see
647// the globalLoadedTodoCollections option).
648// NOTE: settings stored on the server (see settingsAccount) overwrite this
649// option.
650// Example:
651//var globalTodoCalendarSelected='';
652
653
654// globalActiveView
655// This options sets the default fullcalendar view option (the default calendar
656// view after the first login).
657// Supported values:
658// - 'month'
659// - 'multiWeek'
660// - 'agendaWeek'
661// - 'agendaDay'
662// NOTE: we use custom and enhanced version of fullcalendar!
663// Example:
664var globalActiveView='multiWeek';
665
666
667// globalOpenFormMode
668// Open new event form on 'single' or 'double' click.
669// If undefined or not 'double', then 'single' is used.
670// Example:
671var globalOpenFormMode='double';
672
673
674// globalTodoListFilterSelected
675// This options sets the list of filters in todo list that are selected
676// after login.
677// Supported options:
678// - 'filterAction'
679// - 'filterProgress' (available only if globalAppleRemindersMode is disabled)
680// - 'filterCompleted'
681// - 'filterCanceled' (available only if globalAppleRemindersMode is disabled)
682// NOTE: settings stored on the server (see settingsAccount) overwrite this
683// option.
684// Example:
685var globalTodoListFilterSelected=['filterAction', 'filterProgress'];
686
687
688// globalCalendarStartOfBusiness, globalCalendarEndOfBusiness
689// These options set the start and end of business hours with 0.5 hour
690// precision. Non-business hours are faded out in the calendar interface.
691// If both variables are set to the same value then no fade out occurs.
692// Example:
693var globalCalendarStartOfBusiness=8;
694var globalCalendarEndOfBusiness=17;
695
696
697// globalDefaultEventDuration
698// This option sets the default duration (in minutes) for newly created events.
699// If undefined or null, globalCalendarEndOfBusiness value will be taken as
700// a default end time instead.
701// Example:
702var globalDefaultEventDuration=120;
703
704
705// globalAMPMFormat
706// This option enables to use 12 hours format (AM/PM) for displaying time.
707// NOTE: time format is predefined for each localization - use this option
708// ONLY if you want to use custom time format (instead of the localization
709// predefined one).
710// Example:
711//var globalAMPMFormat=false;
712
713
714// globalTimeFormatBasic
715// This option defines the time format information for events in month and
716// multiweek views. If undefined or null then default value is used.
717// If defined as empty string no time information is shown in these views.
718// See http://arshaw.com/fullcalendar/docs/utilities/formatDate/ for exact
719// formating rules.
720// Example:
721//var globalTimeFormatBasic='';
722
723
724// globalTimeFormatAgenda
725// This option defines the time format information for events in day and
726// week views. If undefined or null then default value is used.
727// If defined as empty string no time information is shown in these views.
728// See http://arshaw.com/fullcalendar/docs/utilities/formatDate/ for exact
729// formating rules.
730// Example:
731//var globalTimeFormatAgenda='';
732
733
734// globalDisplayHiddenEvents
735// This option defined whether events from unechecked calendars are displayed
736// with certain transparency (true) or completely hidden (false).
737// Example:
738var globalDisplayHiddenEvents=false;
739
740
741// globalTimeZoneSupport
742// This option enables timezone support in the client.
743// NOTE: timezone cannot be specified for all-day events because these don't
744// have start and end time.
745// If this option is disabled then local time is used.
746// Example:
747var globalTimeZoneSupport=true;
748
749
750// globalTimeZone
751// If timezone support is enabled, this option sets the default timezone.
752// See timezones.js or use the following command to get the list of supported
753// timezones (defined in timezones.js):
754// grep "'[^']\+': {" timezones.js | sed -Ee "s#(\s*'|':\s*\{)##g"
755// Example:
756var globalTimeZone='Europe/Paris';
757
758
759// globalTimeZonesEnabled
760// This option sets the list of available timezones in the interface (for the
761// list of supported timezones see the comment for the previous configuration
762// option).
763// NOTE: if there is at least one event/todo with a certain timezone defined,
764// that timezone is enabled (even if it is not present in this list).
765// Example:
766// var globalTimeZonesEnabled=['America/New_York', 'Europe/Berlin'];
767var globalTimeZonesEnabled=[];
768
769
770// globalRewriteTimezoneComponent
771// This options sets whether the client will enhance/replace (if you edit an
772// event or todo) the timezone information using the official IANA timezone
773// database information (recommended).
774// Example:
775var globalRewriteTimezoneComponent=true;
776
777
778// globalRemoveUnknownTimezone
779// This options sets whether the client will remove all non-standard timezone
780// names from events and todos (if you edit an event or todo)
781// (e.g.: /freeassociation.sourceforge.net/Tzfile/Europe/Vienna)
782// Example:
783var globalRemoveUnknownTimezone=false;
784
785
786// globalShowHiddenAlarms
787// This option sets whether the client will show alarm notifications for
788// unchecked calendars. If this option is enabled and you uncheck a calendar
789// in the calendar list, alarm notifications will be temporary disabled for
790// unchecked calendar(s).
791// Example:
792var globalShowHiddenAlarms=false;
793
794
795// globalIgnoreCompletedOrCancelledAlarms
796// This options sets whether the client will show alarm notifications for
797// already completed or cancelled todos. If enabled then alarm notification
798// for completed and cancelled todos are disabled.
799// Example:
800var globalIgnoreCompletedOrCancelledAlarms=true;
801
802
803// globalMozillaSupport
804// Mozilla automatically treats custom repeating event calculations as if
805// the start day of the week is Monday, despite what day is chosen in settings.
806// Set this variable to true to use the same approach, ensuring compatible
807// event rendering in special cases.
808// Example:
809var globalMozillaSupport=false;
810
811
812// globalCalendarColorPropertyXmlns
813// This options sets the namespace used for storing the "calendar-color"
814// property by the client.
815// If true, undefined (or empty) "http://apple.com/ns/ical/" is used (Apple
816// compatible). If false, then the calendar color modification functionality
817// is completely disabled.
818// Example:
819//var globalCalendarColorPropertyXmlns=true;
820
821
822// globalWeekendDays
823// This option sets the list of days considered as weekend days (these
824// are faded out in the calendar interface). Non-weekend days are automatically
825// considered as business days.
826// Sunday is 0, Monday is 1, etc.
827// Example:
828var globalWeekendDays=[0, 6];
829
830
831// globalAppleRemindersMode
832// If this option is enabled then then client will use the same approach
833// for handling repeating reminders (todos) as Apple. It is STRONGLY
834// recommended to enabled this option if you use any Apple clients for
835// reminders (todos).
836// Supported options:
837// - 'iOS6'
838// - 'iOS7'
839// - true (support of the latest iOS version - 'iOS8')
840// - false
841// If this option is enabled:
842// - RFC todo support is SEVERELY limited and the client mimics the behaviour
843// of Apple Reminders.app (to ensure maximum compatibility)
844// - when a single instance of repeating todo is edited, it becomes an
845// autonomous non-repeating todo with NO relation to the original repeating
846// todo
847// - capabilities of repeating todos are limited - only the first instance
848// is ever visible in the interface
849// - support for todo DTSTART attribute is disabled
850// - support for todo STATUS attribute other than COMPLETED and NEEDS-ACTION
851// is disabled
852// - [iOS6 only] support for LOCATION and URL attributes is disabled
853// Example:
854var globalAppleRemindersMode=true;
855
856
857// globalSubscribedCalendars
858// This option specifies a list of remote URLs to ics files (e.g.: used
859// for distributing holidays information). Subscribed calendars are
860// ALWAYS read-only. Remote servers where ics files are hosted MUST
861// return proper CORS headers (see readme.txt) otherwise this functionality
862// will not work!
863// NOTE: subsribed calendars are NOT "shared" calendars. For "shared"
864// calendars see the delegation option in globalAccountSettings,
865// globalNetworkCheckSettings and globalNetworkAccountSettings.
866// List of properties used in globalSubscribedCalendars variable:
867// - hrefLabel
868// This options defines the header string above the subcsribed calendars.
869// - calendars
870// This option specifies an array of remote calendar objects with the
871// following properties:
872// - href
873// Set this option to the "full URL" of the remote calendar
874// - userAuth
875// NOTE: keep empty if remote authentication is not required!
876// - userName
877// Set the username you want to login.
878// - userPassword
879// Set the password for the given username.
880// - typeList
881// Set the list of objects you want to process from remote calendars;
882// two options are available:
883// - 'vevent' (show remote events in the interface)
884// - 'vtodo' (show remote todos in the interface)
885// - ignoreAlarm
886// Set this option to true if you want to disable alarm notifications
887// from the remote calendar.
888// - displayName
889// Set this option to the name of the calendar you want to see
890// in the interface.
891// - color
892// Set the calendar color you want to see in the interface.
893// Example:
894//var globalSubscribedCalendars={
895// hrefLabel: 'Subscribed',
896// calendars: [
897// {
898// href: 'http://something.com/calendar.ics',
899// userAuth: {
900// userName: '',
901// userPassword: ''
902// },
903// typeList: ['vevent', 'vtodo'],
904// ignoreAlarm: true,
905// displayName: 'Remote Calendar 1',
906// color: '#ff0000'
907// },
908// {
909// href: 'http://calendar.com/calendar2.ics',
910// ...
911// ...
912// }
913// ]
914//};
915
916
917
918// ******* CardDAV (CardDavMATE) related settings ******* //
919
920
921// globalLoadedAddressbookCollections
922// This option sets the list of addressbook collections (down)loaded after
923// login. If empty then all addressbook collections for the currently logged
924// user are loaded.
925// NOTE: settings stored on the server (see settingsAccount) overwrite this
926// option.
927// Example:
928var globalLoadedAddressbookCollections=[];
929
930
931// globalActiveAddressbookCollections
932// This options sets the list of addressbook collections checked (enabled
933// checkbox => data visible in the interface) by default after login.
934// If empty then all loaded addressbook collections for the currently logged
935// user are checked.
936// NOTE: only already (down)loaded collections can be checked (see
937// the globalLoadedAddressbookCollections option).
938// NOTE: settings stored on the server (see settingsAccount) overwrite this
939// option.
940// Example:
941var globalActiveAddressbookCollections=[];
942
943
944// globalAddressbookSelected
945// This option sets which addressbook collection will be pre-selected
946// (if you create a new contact) by default after login.
947// The value must be URL encoded path to an addressbook collection,
948// for example: 'USER/addressbook/'
949// If empty or undefined then the first available addressbook collection
950// is selected automatically.
951// NOTE: only already (down)loaded collections can be pre-selected (see
952// the globalLoadedAddressbookCollections option).
953// NOTE: settings stored on the server (see settingsAccount) overwrite this
954// option.
955// Example:
956//var globalAddressbookSelected='';
957
958
959// globalCompatibility
960// This options is reserved for various compatibility settings.
961// NOTE: if this option is used the value must be an object.
962// Currently there is only one supported option:
963// - anniversaryOutputFormat
964// Different clients use different (and incompatible) approach
965// to store anniversary date in vCards. Apple stores this attribute as:
966// itemX.X-ABDATE;TYPE=pref:2000-01-01\r\n
967// itemX.X-ABLabel:_$!<Anniversary>!$_\r\n'
968// other clients store this attribute as:
969// X-ANNIVERSARY:2000-01-01\r\n
970// Choose 'apple' or 'other' (lower case) for your 3rd party client
971// compatibility. You can chose both: ['apple', 'other'], but it may
972// cause many problems in the future, for example: duplicate anniversary
973// dates, invalid/old anniversary date in your clients, ...)
974// Examples:
975// anniversaryOutputFormat: ['other']
976// anniversaryOutputFormat: ['apple', 'other']
977// Example:
978var globalCompatibility={anniversaryOutputFormat: ['apple']};
979
980
981// globalUriHandler{Tel,Email,Url,Profile}
982// These options set the URI handlers for TEL, EMAIL, URL and X-SOCIALPROFILE
983// vCard attributes. Set them to null (or comment out) to disable.
984// NOTE: for globalUriHandlerTel is recommended to use 'tel:', 'callto:'
985// or 'skype:'. The globalUriHandlerUrl value is used only if no URI handler
986// is defined in the URL.
987// NOTE: it is safe to keep these values unchanged!
988// Example:
989var globalUriHandlerTel='tel:';
990var globalUriHandlerEmail='mailto:';
991var globalUriHandlerUrl='http://';
992var globalUriHandlerProfile={
993 'twitter': 'http://twitter.com/%u',
994 'facebook': 'http://www.facebook.com/%u',
995 'flickr': 'http://www.flickr.com/photos/%u',
996 'linkedin': 'http://www.linkedin.com/in/%u',
997 'myspace': 'http://www.myspace.com/%u',
998 'sinaweibo': 'http://weibo.com/n/%u'
999};
1000
1001
1002// globalDefaultAddressCountry
1003// This option sets the default country for new address fields.
1004// See common.js or use the following command to get the list of
1005// all supported country codes (defined in common.js):
1006// grep -E "'[a-z]{2}':\s+\[" common.js | sed -Ee 's#^\s+|\s+\[\s+# #g'
1007// Example:
1008var globalDefaultAddressCountry='fr';
1009
1010
1011// globalAddressCountryEquivalence
1012// This option sets the processing of the country field specified
1013// in the vCard ADR attribute.
1014// By default the address field in vCard looks like:
1015// ADR;TYPE=WORK:;;1 Waters Edge;Baytown;LA;30314;USA\r\n
1016// what cause a problem, because the country field is a plain
1017// text and can contain any value, e.g.:
1018// USA
1019// United States of America
1020// US
1021// and because the address format can be completely different for
1022// each country, e.g.:
1023// China address example:
1024// [China]
1025// [Province] [City]
1026// [Street]
1027// [Postal]
1028// Japan address example:
1029// [Postal]
1030// [Prefecture] [County/City]
1031// [Further Divisions]
1032// [Japan]
1033// the client needs to correctly detect the country from the ADR
1034// attribute. Apple solved this problem by using:
1035// item1.ADR;TYPE=WORK:;;1 Waters Edge;Baytown;LA;30314;USA\r\n
1036// item1.X-ABADR:us\r\n
1037// where the second "related" attribute defines the country code
1038// for the ADR attribute. This client uses the same approach, but
1039// if the vCard is created by 3rd party clients and the X-ABADR
1040// is missing, it is possible to define additional "rules" for
1041// country matching. These rules are specied by the country code
1042// (for full list of country codes see the comment for pre previous
1043// option) and a case insensitive regular expression (which matches
1044// the plain text value in the country field).
1045// NOTE: if X-ABADR is not present and the country not matches any
1046// country defined in this option, then globalDefaultAddressCountry
1047// is used by default.
1048// Example:
1049var globalAddressCountryEquivalence=[
1050 {country: 'de', regex: '^\\W*Deutschland\\W*$'},
1051 {country: 'sk', regex: '^\\W*Slovensko\\W*$'}
1052];
1053
1054
1055// globalAddressCountryFavorites
1056// This option defines the list of countries which are shown at the top
1057// of the country list in the interface (for full list of country codes
1058// see the comment for pre globalDefaultAddressCountry option).
1059// Example:
1060// var globalAddressCountryFavorites=['de','sk'];
1061var globalAddressCountryFavorites=[];
1062
1063
1064// globalAddrColorPropertyXmlns
1065// This options sets the namespace used for storing the "addressbook-color"
1066// property by the client.
1067// If true, undefined (or empty) "http://inf-it.com/ns/ab/" is used.
1068// If false, then the addressbook color modification functionality
1069// is completely disabled, and addressbook colors in the interface are
1070// generated automatically.
1071// Example:
1072//var globalAddrColorPropertyXmlns=true;
1073
1074
1075// globalContactStoreFN
1076// This option specifies how the FN (formatted name) is stored into vCard.
1077// The value for this options must be an array of strings, that can contain
1078// the following variables:
1079// prefix
1080// last
1081// middle
1082// first
1083// suffix
1084// The string element of the array can contain any other characters (usually
1085// space or colon). Elements are added into FN only if the there is
1086// a variable match, for example if:
1087// last='Lastname'
1088// first='Firstname'
1089// middle='' (empty)
1090// and this option is set to:
1091// ['last', ' middle', ' first'] (space in the second and third element)
1092// the resulting value for FN will be: 'Lastname Firstname' and not
1093// 'Lastname Firstname' (two spaces), because the middle name is empty (so
1094// the second element is completely ignored /not added into FN/).
1095// NOTE: this attribute is NOT used by this client, and it is also NOT
1096// possible to directly edit it in the interface.
1097// Examples:
1098// var globalContactStoreFN=[' last', ' middle', ' first'];
1099// var globalContactStoreFN=['last', ', middle', ' ,first'];
1100var globalContactStoreFN=['prefix',' last',' middle',' first',' suffix'];
1101
1102
1103// globalGroupContactsByCompanies
1104// This options specifies how contacts are grouped in the interface.
1105// By default the interface looks like (very simple example):
1106// A
1107// Adams Adam
1108// Anderson Peter
1109// B
1110// Brown John
1111// Baker Josh
1112// if grouped by company/deparment the result is:
1113// Company A [Department X]
1114// Adams Adam
1115// Brown John
1116// Company B [Department Y]
1117// Anderson Peter
1118// Baker Josh
1119// If this option is set to true contacts are grouped by company/department,
1120// otherwise (default) contacts are grouped by letters of the alphabet.
1121// If undefined or not true, grouping by alphabet letters is used.
1122// NOTE: see also the globalCollectionDisplay option below.
1123var globalGroupContactsByCompanies=false;
1124
1125
1126// globalCollectionDisplay
1127// This options specifies how data columns in the contact list are displayed.
1128//
1129// NOTE: columns are displayed ONLY if there is enought horizontal place in
1130// the browser window (e.g. if you define 5 columns here, but your browser
1131// window is not wide enough, you will see only first 3 columns instead of 5).
1132//
1133// NOTE: see the globalContactDataMinVisiblePercentage option which defines the
1134// width for columns.
1135//
1136// The value must be an array of columns, where each column is represented by
1137// an object with the following properties:
1138// label => the value of this option is a string used as column header
1139// You can use the following localized variables in the label string:
1140// - {Name}
1141// - {FirstName}
1142// - {LastName}
1143// - {MiddleName}
1144// - {NickName}
1145// - {Prefix}
1146// - {Suffix}
1147// - {BirthDay}
1148// - {PhoneticLastName}
1149// - {PhoneticFirstName}
1150// - {JobTitle}
1151// - {Company}
1152// - {Department}
1153// - {Categories}
1154// - {NoteText}
1155// - {Address}, {AddressWork}, {AddressHome}, {AddressOther}
1156// - {Phone}, {PhoneWork}, {PhoneHome}, {PhoneCell}, {PhoneMain},
1157// {PhonePager}, {PhoneFax}, {PhoneIphone}, {PhoneOther}
1158// - {Email}, {EmailWork}, {EmailHome}, {EmailMobileme}, {EmailOther}
1159// - {URL}, {URLWork}, {URLHome}, {URLHomepage}, {URLOther}
1160// - {Dates}, {DatesAnniversary}, {DatesOther}
1161// - {Related}, {RelatedManager}, {RelatedAssistant}, {RelatedFather},
1162// {RelatedMother}, {RelatedParent}, {RelatedBrother}, {RelatedSister},
1163// {RelatedChild}, {RelatedFriend}, {RelatedSpouse}, {RelatedPartner},
1164// {RelatedOther}
1165// - {Profile}, {ProfileTwitter}, {ProfileFacebook}, {ProfileFlickr},
1166// {ProfileLinkedin}, {ProfileMyspace}, {ProfileSinaweibo}
1167// - {IM}, {IMWork}, {IMHome}, {IMMobileme}, {IMOther}, {IMAim}, {IMIcq},
1168// {IMIrc}, {IMJabber}, {IMMsn}, {IMYahoo}, {IMFacebook}, {IMGadugadu},
1169// {IMGoogletalk}, {IMQq}, {IMSkype}
1170// value => the value of this option is an array of format strings, or
1171// an object with the following properties:
1172// - company (used for company contacts)
1173// - personal (used for user contacts)
1174// where the value of these properties is an array of format strings used
1175// for company or user contacts (you can have different values in the same
1176// column for personal and company contacts).
1177// You can use the following simple variables in the format string:
1178// - {FirstName}
1179// - {LastName}
1180// - {MiddleName}
1181// - {NickName}
1182// - {Prefix}
1183// - {Suffix}
1184// - {BirthDay}
1185// - {PhoneticLastName}
1186// - {PhoneticFirstName}
1187// - {JobTitle}
1188// - {Company}
1189// - {Department}
1190// - {Categories}
1191// - {NoteText}
1192// You can also use parametrized variables, where the parameter is enclosed
1193// in square bracket. Paramatrized variables are useful to extract data
1194// such as home phone {Phone[type=home]}, extract the second phone number
1195// {Phone[:1]} (zero based indexing) or extract the third home phone number
1196// {Phone[type=home][:2]} from the vCard.
1197// NOTE: if the parametrized variable matches multiple items, e.g.:
1198// {Phone[type=work]} (if the contact has multiple work phones) then the
1199// first one is used!
1200//
1201// The following parametrized variables are supported (note: you can use
1202// all of them also without parameters /the first one will be used/):
1203// - {Address[type=XXX]} or {Address[:NUM]} or {Address[type=XXX][:NUM]}
1204// where supported values for XXX are:
1205// - work
1206// - home
1207// - other
1208// - any other custom value
1209// - {Phone[type=XXX]} or {Phone[:NUM]} or {Phone[type=XXX][:NUM]}
1210// where supported values for XXX are:
1211// - work
1212// - home
1213// - cell
1214// - main
1215// - pager
1216// - fax
1217// - iphone
1218// - other
1219// - any other custom value
1220// - {Email[type=XXX]} or {Email[:NUM]} or {Email[type=XXX][:NUM]}
1221// where supported values for XXX are:
1222// - work
1223// - home
1224// - mobileme
1225// - other
1226// - any other custom value
1227// - {URL[type=XXX]} or {URL[:NUM]} or {URL[type=XXX][:NUM]}
1228// where supported values for XXX are:
1229// - work
1230// - home
1231// - homepage
1232// - other
1233// - any other custom value
1234// - {Dates[type=XXX]} or {Dates[:NUM]} or {Dates[type=XXX][:NUM]}
1235// where supported values for XXX are:
1236// - anniversary
1237// - other
1238// - any other custom value
1239// - {Related[type=XXX]} or {Related[:NUM]} or {Related[type=XXX][:NUM]}
1240// where supported values for XXX are:
1241// - manager
1242// - assistant
1243// - father
1244// - mother
1245// - parent
1246// - brother
1247// - sister
1248// - child
1249// - friend
1250// - spouse
1251// - partner
1252// - other
1253// - any other custom value
1254// - {Profile[type=XXX]} or {Profile[:NUM]} or {Profile[type=XXX][:NUM]}
1255// where supported values for XXX are:
1256// - twitter
1257// - facebook
1258// - flickr
1259// - linkedin
1260// - myspace
1261// - sinaweibo
1262// - any other custom value
1263// - {IM[type=XXX]} or {IM[service-type=YYY]} or {IM[:NUM]}
1264// where supported values for XXX are:
1265// - work
1266// - home
1267// - mobileme
1268// - other
1269// - any other custom value
1270// and supported values for YYY are:
1271// - aim
1272// - icq
1273// - irc
1274// - jabber
1275// - msn
1276// - yahoo
1277// - facebook
1278// - gadugadu
1279// - googletalk
1280// - qq
1281// - skype
1282// - any other custom value
1283//
1284// NOTE: if you want to use the "any other custom value" option (for XXX
1285// or YYY above) you MUST double escape the following characters:
1286// =[]{}\
1287// for example:
1288// - for profile type "=XXX=" use: '{Profile[type=\\=XXX\\=]}'
1289// - for profile type "\XXX\" use: '{Profile[type=\\\\XXX\\\\]}'
1290//
1291// NOTE: if you want to use curly brackets in the format string you must
1292// double escape it, e.g.: ['{Company}', '\\{{Department}\\}']
1293//
1294// The format string (for the value option) is an array to allow full
1295// customization of the interface. For example if:
1296// value: ['{LastName} {MiddleName} {FirstName}']
1297// and the person has no middle name, then the result in the column
1298// will be (without quotes):
1299// "Parker Peter" (note: two space characters)
1300// but if you use:
1301// value: ['{LastName}', ' {MiddleName}', ' {FirstName}']
1302// then the result will be (without quotes):
1303// "Parker Peter" (note: only one space character)
1304// The reason is that only those elements of the array are appended
1305// into the result where non-empty substitution was performed (so the
1306// ' {MiddleName}' element in this case is ignored, because the person
1307// in the example above has no /more precisely has empty/ middle name).
1308//
1309// Examples:
1310// To specify two columns (named "Company" and "Department / LastName"),
1311// where the first will display the company name, and the second will display
1312// department for company contacts (with "Dep -" prefix), and lastname for
1313// personal contacts (with "Name -" prefix) use:
1314// var globalCollectionDisplay=[
1315// {
1316// label: 'Company',
1317// value: ['{Company}']
1318// },
1319// {
1320// label: 'Department / LastName',
1321// value: {
1322// company: ['Dep - {Department}'],
1323// personal: ['Name - {LastName}']
1324// }
1325// }
1326// ];
1327// To specify 3 columns (named "Categories", "URL" and "IM"), where the first
1328// will display categories, second will display the third work URL, and third
1329// will display ICQ IM use:
1330// var globalCollectionDisplay=[
1331// {
1332// label: 'Categories',
1333// value: ['{Categories}']
1334// },
1335// {
1336// label: 'URL',
1337// value: ['{URL[type=WORK][:2]}']
1338// },
1339// {
1340// label: 'IM',
1341// value: ['{IM[service-type=ICQ]}']
1342// }
1343// ];
1344//
1345// Recommended settings if globalGroupContactsByCompanies
1346// is set to false:
1347// var globalCollectionDisplay=[
1348// {
1349// label: '{Name}',
1350// value: ['{LastName}', ' {MiddleName}', ' {FirstName}']
1351// },
1352// {
1353// label: '{Company} [{Department}]',
1354// value: ['{Company}', ' [{Department}]']
1355// },
1356// {
1357// label: '{JobTitle}',
1358// value: ['{JobTitle}']
1359// },
1360// {
1361// label: '{Email}',
1362// value: ['{Email[:0]}']
1363// },
1364// {
1365// label: '{Phone} 1',
1366// value: ['{Phone[:0]}']
1367// },
1368// {
1369// label: '{Phone} 2',
1370// value: ['{Phone[:1]}']
1371// },
1372// {
1373// label: '{NoteText}',
1374// value: ['{NoteText}']
1375// }
1376// ];
1377//
1378// Recommended settings if globalGroupContactsByCompanies
1379// is set to true:
1380// var globalCollectionDisplay=[
1381// {
1382// label: '{Name}',
1383// value: {
1384// personal: ['{LastName}', ' {MiddleName}', ' {FirstName}'],
1385// company: ['{Company}', ' [{Department}]']
1386// }
1387// },
1388// {
1389// label: '{JobTitle}',
1390// value: ['{JobTitle}']
1391// },
1392// {
1393// label: '{Email}',
1394// value: ['{Email[:0]}']
1395// },
1396// {
1397// label: '{Phone} 1',
1398// value: ['{Phone[:0]}']
1399// },
1400// {
1401// label: '{Phone} 2',
1402// value: ['{Phone[:1]}']
1403// },
1404// {
1405// label: '{NoteText}',
1406// value: ['{NoteText}']
1407// }
1408// ];
1409//
1410// NOTE: if left undefined, the recommended settings will be used.
1411
1412
1413// globalCollectionSort
1414// This options sets the ordering of contacts in the interface. In general
1415// contacts are ordered alphabetically by an internal "sort string" which
1416// is created for each contact. Here you can specify how this internal string
1417// is created. The value is a simple array holding only the values from the
1418// value property defined in the globalCollectionDisplay option.
1419// If undefined, the definition from globalCollectionDisplay is used.
1420// Example:
1421// var globalCollectionSort = [
1422// ['{LastName}'],
1423// ['{FirstName}'],
1424// ['{MiddleName}'],
1425// {
1426// company: ['{Categories}'],
1427// personal: ['{Company}']
1428// }
1429// ];
1430var globalCollectionSort=[
1431 ['{LastName}'],
1432 ['{FirstName}'],
1433 ['{MiddleName}']
1434];
1435
1436
1437// globalContactDataMinVisiblePercentage
1438// This option defines how the width for columns are computed. If you set
1439// it to 1 then 100% of all data in the column will be visible (the column
1440// width is determined by the longest string in the column). If you set it
1441// to 0.95 then 95% of data will fit into the column width, and the remaining
1442// 5% will be truncated (" ...").
1443// Example:
1444var globalContactDataMinVisiblePercentage=0.95;
1445
1446
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report.php.diff b/flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report.php.diff
new file mode 100644
index 0000000..2924252
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report.php.diff
@@ -0,0 +1,20 @@
1--- a/bug_report.php 2019-05-06 12:06:44.265508011 +0200
2+++ b/bug_report.php 2019-05-06 12:09:40.106952738 +0200
3@@ -67,6 +67,17 @@
4 'copy_files' => $f_copy_attachments_from_parent
5 );
6
7+# begin captcha check for anon user
8+if ( current_user_is_anonymous() && get_gd_version() > 0 ) {
9+ $f_captcha = gpc_get_string( 'captcha', '' );
10+ $f_captcha = utf8_strtolower( trim( $f_captcha ) );
11+
12+ $t_securimage = new Securimage();
13+ if( $t_securimage->check( $f_captcha ) == false ) {
14+ trigger_error( ERROR_SIGNUP_NOT_MATCHING_CAPTCHA, ERROR );
15+ }
16+}
17+
18 if( $f_master_bug_id > 0 ) {
19 bug_ensure_exists( $f_master_bug_id );
20
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report_page.php.diff b/flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report_page.php.diff
new file mode 100644
index 0000000..80dea91
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/bug_report_page.php.diff
@@ -0,0 +1,53 @@
1--- a/bug_report_page.php 2018-02-10 21:29:27.000000000 +0100
2+++ b/bug_report_page.php 2018-03-03 15:04:19.622499678 +0100
3@@ -708,7 +708,50 @@
4 <span class="lbl padding-6"><?php echo lang_get( 'check_report_more_bugs' ) ?></span>
5 </label>
6 </td>
7 </tr>
8+<?php
9+ # captcha image requires GD library and related option to ON
10+ if( current_user_is_anonymous() && get_gd_version() > 0 ) {
11+ $t_securimage_path = 'vendor/dapphp/securimage';
12+ $t_securimage_show = $t_securimage_path . '/securimage_show.php';
13+ $t_securimage_play = $t_securimage_path . '/securimage_play.swf?'
14+ . http_build_query( array(
15+ 'audio_file' => $t_securimage_path . '/securimage_play.php',
16+ 'bgColor1=' => '#fff',
17+ 'bgColor2=' => '#fff',
18+ 'iconColor=' => '#777',
19+ 'borderWidth=' => 1,
20+ 'borderColor=' => '#000',
21+ ) );
22+?>
23+ <tr>
24+ <th class="category">CAPTCHA</th>
25+ <td>
26+
27+ <label for="captcha-field" class="block clearfix">
28+ <strong><?php echo lang_get( 'signup_captcha_request_label' ); ?></strong>
29+ </label>
30+ <span id="captcha-input" class="input">
31+ <?php print_captcha_input( 'captcha' ); ?>
32+
33+ <span id="captcha-image" class="captcha-image" style="padding-right:3px;">
34+ <img src="<?php echo $t_securimage_show; ?>" alt="visual captcha" />
35+ <ul id="captcha-refresh"><li><a href="#"><?php
36+ echo lang_get( 'signup_captcha_refresh' );
37+ ?></a></li></ul>
38+ </span>
39+
40+ <object type="application/x-shockwave-flash" width="19" height="19"
41+ data="<?php echo $t_securimage_play; ?>">
42+ <param name="movie" value="<?php echo $t_securimage_play; ?>" />
43+ </object>
44+ </span>
45+ </td>
46+ </tr>
47+<?php
48+ }
49+?>
50+
51 </table>
52 </div>
53 </div>
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add.php.diff b/flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add.php.diff
new file mode 100644
index 0000000..4509f0a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add.php.diff
@@ -0,0 +1,20 @@
1--- a/bugnote_add.php 2018-02-10 21:29:27.000000000 +0100
2+++ b/bugnote_add.php 2018-03-03 15:13:12.439919511 +0100
3@@ -44,6 +44,17 @@
4
5 $t_query = array( 'issue_id' => $f_bug_id );
6
7+# begin captcha check for anon user
8+if ( current_user_is_anonymous() && get_gd_version() > 0 ) {
9+ $f_captcha = gpc_get_string( 'captcha', '' );
10+ $f_captcha = utf8_strtolower( trim( $f_captcha ) );
11+
12+ $t_securimage = new Securimage();
13+ if( $t_securimage->check( $f_captcha ) == false ) {
14+ trigger_error( ERROR_SIGNUP_NOT_MATCHING_CAPTCHA, ERROR );
15+ }
16+}
17+
18 if( count( $f_files ) > 0 && is_blank( $f_text ) && helper_duration_to_minutes( $f_duration ) == 0 ) {
19 $t_payload = array(
20 'files' => helper_array_transpose( $f_files )
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff b/flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff
new file mode 100644
index 0000000..a8589c7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff
@@ -0,0 +1,52 @@
1--- a/bugnote_add_inc.php 2018-02-10 21:29:27.000000000 +0100
2+++ b/bugnote_add_inc.php 2018-03-03 15:14:27.332428557 +0100
3@@ -119,6 +119,49 @@
4 <textarea name="bugnote_text" id="bugnote_text" class="<?php echo $t_bugnote_class ?>" rows="7"></textarea>
5 </td>
6 </tr>
7+<?php
8+ # captcha image requires GD library and related option to ON
9+ if( current_user_is_anonymous() && get_gd_version() > 0 ) {
10+ $t_securimage_path = 'vendor/dapphp/securimage';
11+ $t_securimage_show = $t_securimage_path . '/securimage_show.php';
12+ $t_securimage_play = $t_securimage_path . '/securimage_play.swf?'
13+ . http_build_query( array(
14+ 'audio_file' => $t_securimage_path . '/securimage_play.php',
15+ 'bgColor1=' => '#fff',
16+ 'bgColor2=' => '#fff',
17+ 'iconColor=' => '#777',
18+ 'borderWidth=' => 1,
19+ 'borderColor=' => '#000',
20+ ) );
21+?>
22+ <tr>
23+ <th class="category">CAPTCHA</th>
24+ <td>
25+
26+ <label for="captcha-field" class="block clearfix">
27+ <strong><?php echo lang_get( 'signup_captcha_request_label' ); ?></strong>
28+ </label>
29+ <span id="captcha-input" class="input">
30+ <?php print_captcha_input( 'captcha' ); ?>
31+
32+ <span id="captcha-image" class="captcha-image" style="padding-right:3px;">
33+ <img src="<?php echo $t_securimage_show; ?>" alt="visual captcha" />
34+ <ul id="captcha-refresh"><li><a href="#"><?php
35+ echo lang_get( 'signup_captcha_refresh' );
36+ ?></a></li></ul>
37+ </span>
38+
39+ <object type="application/x-shockwave-flash" width="19" height="19"
40+ data="<?php echo $t_securimage_play; ?>">
41+ <param name="movie" value="<?php echo $t_securimage_play; ?>" />
42+ </object>
43+ </span>
44+ </td>
45+ </tr>
46+<?php
47+ }
48+?>
49+
50
51 <?php
52 if( config_get( 'time_tracking_enabled' ) ) {
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/default.nix b/flakes/mypackages/pkgs/webapps/mantisbt_2/default.nix
new file mode 100644
index 0000000..466595d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/default.nix
@@ -0,0 +1,44 @@
1{ mantis_config ? "/etc/mantisbt/config_inc.php", stdenv, fetchurl, lib, callPackage}:
2let
3 pluginNames = [ "slack" "source-integration" ];
4 allPlugins = lib.attrsets.genAttrs pluginNames
5 (name: callPackage (./plugins + "/${name}") {});
6 toPassthru = pkg: plugins: {
7 inherit plugins allPlugins;
8 pluginNames = map (n: n.pluginName) plugins;
9 withPlugins = withPlugins pkg;
10 };
11 withPlugins = pkg: toPlugins:
12 let
13 plugins = toPlugins allPlugins;
14 toInstallPlugin = n:
15 if builtins.hasAttr "selector" n then
16 "ln -sf ${n}/${n.selector} $out/plugins/"
17 else
18 "ln -sf ${n} $out/plugins/${n.pluginName}";
19 newMantisbt = pkg.overrideAttrs(old: {
20 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
21 passthru = toPassthru newMantisbt (pkg.plugins ++ plugins);
22 });
23 in newMantisbt;
24 package = stdenv.mkDerivation rec {
25 name = "mantisbt-${version}";
26 version = "2.21.0";
27 src = fetchurl {
28 url = "https://downloads.sourceforge.net/project/mantisbt/mantis-stable/${version}/${name}.tar.gz";
29 sha256 = "13lx569dp1gibq5daqp7dj6gsqic85rrix1s7xkp60gwpzk8wiw5";
30 };
31 patches = [
32 ./bug_report.php.diff
33 ./bug_report_page.php.diff
34 ./bugnote_add.php.diff
35 ./bugnote_add_inc.php.diff
36 ];
37 installPhase = ''
38 cp -a . $out
39 ln -s ${mantis_config} $out/config/config_inc.php
40 '';
41
42 passthru = toPassthru package [];
43 };
44in package
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/slack/default.nix b/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/slack/default.nix
new file mode 100644
index 0000000..61ed15f
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/slack/default.nix
@@ -0,0 +1,18 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation rec {
3 passthru = {
4 pluginName = "Slack";
5 };
6 version = "9286d2e-master";
7 name = "mantisbt-plugin-slack-${version}";
8 src = fetchFromGitHub {
9 owner = "mantisbt-plugins";
10 repo = "Slack";
11 rev = "9286d2eeeb8a986ed949e378711fef5f0bf182dc";
12 sha256 = "0nn0v4jc967giilkzrppi5svd04m2hnals75xxp0iabcdjnih0mn";
13 };
14 installPhase = ''
15 sed -i -e "s/return '@' . \\\$username;/return \\\$username;/" Slack.php
16 cp -a . $out
17 '';
18}
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff b/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff
new file mode 100644
index 0000000..c355144
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff
@@ -0,0 +1,12 @@
1--- b/Source/Source.API.php 2017-09-18 00:50:32.000000000 +0200
2+++ a/Source/Source.API.php 2018-03-04 19:00:25.578889039 +0100
3@@ -452,6 +452,9 @@
4 # Allow other plugins to post-process commit data
5 event_signal( 'EVENT_SOURCE_COMMITS', array( $p_changesets ) );
6 event_signal( 'EVENT_SOURCE_FIXED', array( $t_fixed_bugs ) );
7+ foreach( $t_fixed_bugs as $t_bug_id => $t_changeset ) {
8+ event_signal( 'EVENT_BUG_ACTION', array('RESOLVE', $t_bug_id) );
9+ }
10 }
11
12 /**
diff --git a/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix b/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix
new file mode 100644
index 0000000..1ab00c5
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix
@@ -0,0 +1,22 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation rec {
3 version = "v2.2.0";
4 name = "mantisbt-plugin-source-integration-${version}";
5 src = fetchFromGitHub {
6 owner = "mantisbt-plugins";
7 repo = "source-integration";
8 rev = "44fc9e2e770aff4f40f56833f26a86ce0e2deb76";
9 sha256 = "0gcm6kqqijnv303sk59zn27adwx5vkr545mwzyaq2nrpxnkwdy5b";
10 };
11 patches = [
12 ./Source.API.php.diff
13 ];
14 installPhase = ''
15 mkdir $out
16 cp -a Source* $out/
17 '';
18 passthru = {
19 pluginName = "source-integration";
20 selector = "Source*";
21 };
22}
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/audioplayer.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/audioplayer.nix
new file mode 100644
index 0000000..6e7380c
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/audioplayer.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 audioplayer_3_4_0 = buildApp rec {
4 appName = "audioplayer";
5 version = "3.4.0";
6 url = "https://github.com/Rello/${appName}/releases/download/${version}/${appName}-${version}.tar.gz";
7 sha256 = "sha256-pog9cll02+AbYHG/jiUztO9odqu7PSEWBUieK32Eqf4=";
8 };
9 versions = {
10 "25" = audioplayer_3_4_0;
11 "26" = audioplayer_3_4_0;
12 "27" = audioplayer_3_4_0;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app audioplayer")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/bookmarks.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/bookmarks.nix
new file mode 100644
index 0000000..0503e5b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/bookmarks.nix
@@ -0,0 +1,21 @@
1{ buildApp, nextcloudVersion }:
2let
3 bookmarks_12_1_0 = buildApp rec {
4 appName = "bookmarks";
5 version = "12.1.0";
6 url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
7 sha256 = "sha256-NVyaVeg/UPgFaW/iCZiJkw1l5Vqc+S/4FMfFhHCBUTo=";
8 };
9 bookmarks_13_0_1 = buildApp rec {
10 appName = "bookmarks";
11 version = "13.0.1";
12 url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
13 sha256 = "sha256-7Gx8e8C2dDkB/39eAGKOLrP3YkVbGkfPKpQBeCaV/cE=";
14 };
15 versions = {
16 "25" = bookmarks_12_1_0;
17 "26" = bookmarks_13_0_1;
18 "27" = bookmarks_13_0_1;
19 };
20in
21 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app bookmarks")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/calendar.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/calendar.nix
new file mode 100644
index 0000000..497d4ba
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/calendar.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 calendar_4_4_4 = buildApp rec {
4 appName = "calendar";
5 version = "4.4.4";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-8UeHOpgbUf2oHHOvLN58v68QvyDYQXkSjsVKn6UGrGU=";
8 };
9 versions = {
10 "25" = calendar_4_4_4;
11 "26" = calendar_4_4_4;
12 "27" = calendar_4_4_4;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app calendar")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/carnet.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/carnet.nix
new file mode 100644
index 0000000..05f0928
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/carnet.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 carnet_0_25_2 = buildApp rec {
4 appName = "carnet";
5 version = "0.25.2";
6 url = "https://github.com/PhieF/CarnetNextcloud/releases/download/v${version}/${appName}-nc-v${version}.tar.gz";
7 sha256 = "sha256-HArD+M6UA9BhSsrlpp/gsKWkUTWAoNHl/gr0S3AlKzg=";
8 };
9 versions = {
10 "25" = carnet_0_25_2;
11 "26" = carnet_0_25_2;
12 "27" = carnet_0_25_2;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app carnet")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/contacts.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/contacts.nix
new file mode 100644
index 0000000..f8931b7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/contacts.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 contacts_5_3_2 = buildApp rec {
4 appName = "contacts";
5 version = "5.3.2";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-1jQ+pyLBPU7I4wSPkmezJq7ukrQh8WPErG4J6Ps3LR4=";
8 };
9 versions = {
10 "25" = contacts_5_3_2;
11 "26" = contacts_5_3_2;
12 "27" = contacts_5_3_2;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app contacts")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/cookbook.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/cookbook.nix
new file mode 100644
index 0000000..32fdcc0
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/cookbook.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 cookbook_0_10_2 = buildApp rec {
4 appName = "cookbook";
5 version = "0.10.2";
6 url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/Cookbook-${version}.tar.gz";
7 sha256 = "sha256-H7KVeISBnu0/4Q31ihhiXvRtkXz4yLGOAsAj5ERgeCM=";
8 };
9 versions = {
10 "25" = cookbook_0_10_2;
11 "26" = cookbook_0_10_2;
12 "27" = cookbook_0_10_2;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app cookbook")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/deck.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/deck.nix
new file mode 100644
index 0000000..c5dd2d3
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/deck.nix
@@ -0,0 +1,27 @@
1{ buildApp, nextcloudVersion }:
2let
3 deck_1_8_5 = buildApp rec {
4 appName = "deck";
5 version = "1.8.5";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-KsSSl9orqMEKJlBftHwCi/dh+aMCxZqjS7kPT0uDZlE=";
8 };
9 deck_1_9_2 = buildApp rec {
10 appName = "deck";
11 version = "1.9.2";
12 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
13 sha256 = "sha256-h1fmT4CCEFDZPBwFDIBLmFGJmO1Wt3a5nVXX5xCk0o0=";
14 };
15 deck_1_10_0 = buildApp rec {
16 appName = "deck";
17 version = "1.10.0";
18 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
19 sha256 = "sha256-W0XVvhTQoCjoK7S2tEd7bvU0MTWtqYt7QiB9H1p1UP8=";
20 };
21 versions = {
22 "25" = deck_1_8_5;
23 "26" = deck_1_9_2;
24 "27" = deck_1_10_0;
25 };
26in
27 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app deck")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/drawio.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/drawio.nix
new file mode 100644
index 0000000..c03c479
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/drawio.nix
@@ -0,0 +1,24 @@
1{ buildApp, nextcloudVersion }:
2let
3 otherConfig = {
4 mimetypealiases = {
5 "application/x-drawio" = "drawio";
6 };
7 mimetypemapping = {
8 "drawio" = ["application/x-drawio"];
9 };
10 };
11 drawio_2_1_2 = buildApp rec {
12 appName = "drawio";
13 version = "2.1.2";
14 url = "https://github.com/jgraph/drawio-nextcloud/releases/download/v${version}/${appName}-v${version}.tar.gz";
15 sha256 = "sha256-5BrEnS2cMk/vwkAr1lXKtfocqReZAj1+pbDqmi/uG0A=";
16 inherit otherConfig;
17 };
18 versions = {
19 "25" = drawio_2_1_2;
20 "26" = drawio_2_1_2;
21 "27" = drawio_2_1_2;
22 };
23in
24 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app drawio")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/external.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/external.nix
new file mode 100644
index 0000000..941304a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/external.nix
@@ -0,0 +1,27 @@
1{ buildApp, nextcloudVersion }:
2let
3 external_5_0_2 = buildApp rec {
4 appName = "external";
5 version = "5.0.2";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-Bkk9X1tVonKsiA3YlKux2y8K7HdJv4qM/eJ9TP+i17I=";
8 };
9 external_5_1_0 = buildApp rec {
10 appName = "external";
11 version = "5.1.0";
12 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
13 sha256 = "sha256-EMKWSXufw4FMyaN2f37yifrpUm6QBqqpPPFmvLvYYmY=";
14 };
15 external_5_2_0 = buildApp rec {
16 appName = "external";
17 version = "5.2.0";
18 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
19 sha256 = "sha256-XqeJCWS8mncS7CfrnXdhtzdgkFTib/RnursJ/AqyvD8=";
20 };
21 versions = {
22 "25" = external_5_0_2;
23 "26" = external_5_1_0;
24 "27" = external_5_2_0;
25 };
26in
27 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app external")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/extract.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/extract.nix
new file mode 100644
index 0000000..589115e
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/extract.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 extract_1_3_6 = buildApp rec {
4 appName = "extract";
5 version = "1.3.6";
6 url = "https://github.com/PaulLereverend/NextcloudExtract/releases/download/${version}/${appName}.tar.gz";
7 sha256 = "sha256-y1NacOWnCd/f5sOeEOLeZrWnqwi8q/XezOrhT7AzV/o=";
8 };
9 versions = {
10 "25" = extract_1_3_6;
11 "26" = extract_1_3_6;
12 "27" = extract_1_3_6;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app extract")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_markdown.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_markdown.nix
new file mode 100644
index 0000000..cf8e179
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_markdown.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 files_markdown_2_4_1 = buildApp rec {
4 appName = "files_markdown";
5 version = "2.4.1";
6 url = "https://github.com/icewind1991/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-6A9IMfRbKcF1+et7pzFF4zlZDmegx562cnyYsOFsVzU=";
8 };
9 versions = {
10 "25" = files_markdown_2_4_1;
11 "26" = files_markdown_2_4_1;
12 "27" = files_markdown_2_4_1;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app files_markdown")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_mindmap.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_mindmap.nix
new file mode 100644
index 0000000..fff85d7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_mindmap.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 files_mindmap_0_0_28 = buildApp rec {
4 appName = "files_mindmap";
5 version = "0.0.28";
6 url = "https://github.com/ACTom/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
7 sha256 = "sha256-VlzqstlsdinaqkbK32NvS1oFoQcFasJGHSlcKxdQwIM=";
8 };
9 versions = {
10 "25" = files_mindmap_0_0_28;
11 "26" = files_mindmap_0_0_28;
12 "27" = files_mindmap_0_0_28;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app files_mindmap")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_readmemd.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_readmemd.nix
new file mode 100644
index 0000000..97aeaf7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/files_readmemd.nix
@@ -0,0 +1,14 @@
1{ buildApp, nextcloudVersion }:
2let
3 files_readmemd_2_0_0 = buildApp rec {
4 appName = "files_readmemd";
5 version = "2.0.0";
6 url = "https://github.com/mamatt/files_readmemd/releases/download/V${version}/${appName}.tar.gz";
7 sha256 = "sha256-vUoSK+b4gj51eJcocrXINO/eFKPRZQoj0q6l0gVBqgw=";
8 };
9 versions = {
10 "25" = files_readmemd_2_0_0;
11 "26" = files_readmemd_2_0_0;
12 };
13in
14 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app files_readmemd")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/flowupload.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/flowupload.nix
new file mode 100644
index 0000000..55f4ba7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/flowupload.nix
@@ -0,0 +1,14 @@
1{ buildApp, nextcloudVersion }:
2let
3 flowupload_1_1_3 = buildApp rec {
4 appName = "flowupload";
5 version = "1.1.3";
6 url = "https://github.com/e-alfred/${appName}/releases/download/${version}/${appName}-${version}.tar.gz";
7 sha256 = "0d1xvimd4hzd0jpvv1h89zfqv3ajlrrm1xdbggvjhk9bllwqgxng";
8 };
9 versions = {
10 "22" = flowupload_1_1_3;
11 "23" = flowupload_1_1_3;
12 };
13in
14 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app flowupload")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxedit.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxedit.nix
new file mode 100644
index 0000000..be230fd
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxedit.nix
@@ -0,0 +1,22 @@
1{ buildApp, nextcloudVersion }:
2let
3 gpxedit_0_0_14 = buildApp rec {
4 appName = "gpxedit";
5 version = "0.0.14";
6 url = "https://gitlab.com/eneiluj/gpxedit-oc/wikis/uploads/5b184c24f9e767ad19a84e177a9b473c/${appName}-${version}.tar.gz";
7 sha256 = "1kgpcxps73l83krrjxdzh4vzacja4m3vwidf9kidgqq505cgzq90";
8 otherConfig = {
9 mimetypealiases = {
10 "application/gpx+xml" = "gpx";
11 };
12 mimetypemapping = {
13 "gpx" = ["application/gpx+xml"];
14 };
15 };
16 };
17 versions = {
18 "22" = gpxedit_0_0_14;
19 "23" = gpxedit_0_0_14;
20 };
21in
22 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app gpxedit")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxpod.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxpod.nix
new file mode 100644
index 0000000..5a3b7e7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/gpxpod.nix
@@ -0,0 +1,31 @@
1{ buildApp, nextcloudVersion }:
2let
3 otherConfig = {
4 mimetypealiases = {
5 "application/gpx+xml" = "gpx";
6 };
7 mimetypemapping = {
8 "gpx" = ["application/gpx+xml"];
9 };
10 };
11 gpxpod_5_0_10 = buildApp rec {
12 appName = "gpxpod";
13 version = "5.0.10";
14 url = "https://github.com/julien-nc/gpxpod/releases/download/v${version}/${appName}-${version}.tar.gz";
15 sha256 = "sha256-Ylhl9jdOxG+Qfk5zgNO8FwOtAzrjGHS66y59qmorXPU=";
16 inherit otherConfig;
17 };
18 gpxpod_5_0_12 = buildApp rec {
19 appName = "gpxpod";
20 version = "5.0.12";
21 url = "https://github.com/julien-nc/gpxpod/releases/download/v${version}/${appName}-${version}.tar.gz";
22 sha256 = "sha256-uhz6AC8opDQkFQDpG4u8H4vkFtzbFAZvb8r32QHj/8I=";
23 inherit otherConfig;
24 };
25 versions = {
26 "25" = gpxpod_5_0_10;
27 "26" = gpxpod_5_0_12;
28 "27" = gpxpod_5_0_12;
29 };
30in
31 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app gpxpod")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/groupfolders.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/groupfolders.nix
new file mode 100644
index 0000000..b966d3d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/groupfolders.nix
@@ -0,0 +1,27 @@
1{ buildApp, nextcloudVersion }:
2let
3 groupfolders_13_1_5 = buildApp rec {
4 appName = "groupfolders";
5 version = "13.1.5";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-1yf/uSN8TRsYvK3m2pxGaXo9xxHNrI/NjyWJ8rLPQfg=";
8 };
9 groupfolders_14_0_4 = buildApp rec {
10 appName = "groupfolders";
11 version = "14.0.4";
12 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
13 sha256 = "sha256-QzlD8dLI6T7Sex75ZsO2F40nTrg2Ig6tHTG8cslnNME=";
14 };
15 groupfolders_15_0_2 = buildApp rec {
16 appName = "groupfolders";
17 version = "15.0.2";
18 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
19 sha256 = "sha256-NsTZhmY1XBKHn/1IcIp2Al7BwJzE2xoBzgyBXnmuWls=";
20 };
21 versions = {
22 "25" = groupfolders_13_1_5;
23 "26" = groupfolders_14_0_4;
24 "27" = groupfolders_15_0_2;
25 };
26in
27 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app groupfolders")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/impersonate.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/impersonate.nix
new file mode 100644
index 0000000..afae917
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/impersonate.nix
@@ -0,0 +1,27 @@
1{ buildApp, nextcloudVersion }:
2let
3 impersonate_1_12_1 = buildApp rec {
4 appName = "impersonate";
5 version = "1.12.1";
6 url = "https://github.com/nextcloud-releases/impersonate/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-xhlWGbLm1CtW4BSa/yQhv05Kn2r1DZJDUoDXQOLpEeQ=";
8 };
9 impersonate_1_13_1 = buildApp rec {
10 appName = "impersonate";
11 version = "1.13.1";
12 url = "https://github.com/nextcloud-releases/impersonate/releases/download/v${version}/${appName}-v${version}.tar.gz";
13 sha256 = "sha256-+tFWW5wQnbHxbgGdnp2GAFzfXnrW+e3eECY4O6ZckCU=";
14 };
15 impersonate_1_14_0 = buildApp rec {
16 appName = "impersonate";
17 version = "1.14.0";
18 url = "https://github.com/nextcloud-releases/impersonate/releases/download/v${version}/${appName}-v${version}.tar.gz";
19 sha256 = "sha256-A1rGJJLaWhiNf9l0YUh6WOB+fKRBRDckE890hq5OB4k=";
20 };
21 versions = {
22 "25" = impersonate_1_12_1;
23 "26" = impersonate_1_13_1;
24 "27" = impersonate_1_14_0;
25 };
26in
27 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app impersonate")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/integration_dropbox.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/integration_dropbox.nix
new file mode 100644
index 0000000..d3834ad
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/integration_dropbox.nix
@@ -0,0 +1,13 @@
1{ buildApp, nextcloudVersion }:
2let
3 integration_dropbox_2_0_1 = buildApp rec {
4 appName = "integration_dropbox";
5 version = "2.0.1";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-RPCd8+/yKNlIGfEU+ITS8DBIxJDfc//8MGHaIjfYxdQ=";
8 };
9 versions = {
10 "27" = integration_dropbox_2_0_1;
11 };
12in
13 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app integration_dropbox")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/keeweb.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/keeweb.nix
new file mode 100644
index 0000000..7be8c6b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/keeweb.nix
@@ -0,0 +1,24 @@
1{ buildApp, nextcloudVersion }:
2let
3 keeweb_0_6_13 = buildApp rec {
4 appName = "keeweb";
5 version = "0.6.13";
6 url = "https://github.com/jhass/nextcloud-keeweb/releases/download/v${version}/${appName}-${version}.tar.gz";
7 sha256 = "sha256-J9jFVXpmoeAjDI/crsXHVJvPvxCYaimWVuq473nLsNM=";
8 installPhase = ''
9 mkdir -p $out
10 cp -R . $out/
11 '';
12 otherConfig = {
13 mimetypemapping = {
14 "kdbx" = ["application/x-kdbx"];
15 };
16 };
17 };
18 versions = {
19 "25" = keeweb_0_6_13;
20 "26" = keeweb_0_6_13;
21 "27" = keeweb_0_6_13;
22 };
23in
24 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app keeweb")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/maps.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/maps.nix
new file mode 100644
index 0000000..1b29173
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/maps.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 maps_1_1_0 = buildApp rec {
4 appName = "maps";
5 version = "1.1.0";
6 url = "https://github.com/nextcloud/maps/releases/download/v${version}/${appName}-${version}.tar.gz";
7 sha256 = "sha256-Me/V+9wXZyq3UEVx9Nqim6pfPFJaALjKv9f7iUjill8=";
8 };
9 versions = {
10 "25" = maps_1_1_0;
11 "26" = maps_1_1_0;
12 "27" = maps_1_1_0;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app maps")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/metadata.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/metadata.nix
new file mode 100644
index 0000000..0fe7409
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/metadata.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 metadata_0_19_0 = buildApp rec {
4 appName = "metadata";
5 version = "0.19.0";
6 url = "https://github.com/gino0631/nextcloud-metadata/releases/download/v${version}/${appName}.tar.gz";
7 sha256 = "sha256-XfFxCwRFO0WnBPU4CIejNXySRQdguvzauu62bzUKD44=";
8 };
9 versions = {
10 "25" = metadata_0_19_0;
11 "26" = metadata_0_19_0;
12 "27" = metadata_0_19_0;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app metadata")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/music.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/music.nix
new file mode 100644
index 0000000..fc96224
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/music.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 music_1_8_4 = buildApp rec {
4 appName = "music";
5 version = "1.8.4";
6 url = "https://github.com/owncloud/music/releases/download/v${version}/${appName}_${version}_for_nextcloud.tar.gz";
7 sha256 = "sha256-WWXMpOyTRxykAVeUj/h6QP5ENqaMvTcPIqPQjhY68KA=";
8 };
9 versions = {
10 "25" = music_1_8_4;
11 "26" = music_1_8_4;
12 "27" = music_1_8_4;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app music")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/notes.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/notes.nix
new file mode 100644
index 0000000..7677c6c
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/notes.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 notes_4_8_1 = buildApp rec {
4 appName = "notes";
5 version = "4.8.1";
6 url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
7 sha256 = "sha256-BfH1W+7TWKZRuAAhKQEQtlv8ePTtJQvZQVMMu3zULR4=";
8 };
9 versions = {
10 "25" = notes_4_8_1;
11 "26" = notes_4_8_1;
12 "27" = notes_4_8_1;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app notes")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/ocsms.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/ocsms.nix
new file mode 100644
index 0000000..dcdaad2
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/ocsms.nix
@@ -0,0 +1,21 @@
1{ buildApp, nextcloudVersion }:
2let
3 ocsms_2_2_0 = buildApp rec {
4 appName = "ocsms";
5 version = "2.2.0";
6 url = "https://github.com/nextcloud/${appName}/releases/download/${version}/${appName}-${version}.tar.gz";
7 sha256 = "1hjl11lxdflk4w0l8prcjr3jvmsm8njldbrmnqm7yhdy6qcfli28";
8 installPhase = ''
9 mkdir -p $out
10 cp -R . $out/
11 '';
12 };
13 versions = {
14 "18" = ocsms_2_2_0;
15 "19" = ocsms_2_2_0;
16 "20" = ocsms_2_2_0;
17 # Beware, 1.10.1 has a too wide range of versions and is not
18 # compatible with nextcloud > 20!
19 };
20in
21 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app ocsms")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/onlyoffice.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/onlyoffice.nix
new file mode 100644
index 0000000..e93df00
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/onlyoffice.nix
@@ -0,0 +1,21 @@
1{ buildApp, nextcloudVersion }:
2let
3 onlyoffice_7_9_0 = buildApp rec {
4 appName = "onlyoffice";
5 version = "7.9.0";
6 url = "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v${version}/${appName}.tar.gz";
7 sha256 = "sha256-GN0edA/aVdOEDR0LF6PgG2vTcULaG9RMj2gIAoxSVAM=";
8 };
9 onlyoffice_8_2_0 = buildApp rec {
10 appName = "onlyoffice";
11 version = "8.2.0";
12 url = "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v${version}/${appName}.tar.gz";
13 sha256 = "sha256-DfZKgpkpcogy9I3A3ru0V/WR5wYWBr+wrHe+mQJBPYk=";
14 };
15 versions = {
16 "25" = onlyoffice_7_9_0;
17 "26" = onlyoffice_7_9_0;
18 "27" = onlyoffice_8_2_0;
19 };
20in
21 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app onlyoffice")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/passman.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/passman.nix
new file mode 100644
index 0000000..5559b22
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/passman.nix
@@ -0,0 +1,21 @@
1{ buildApp, nextcloudVersion }:
2let
3 passman_2_4_5 = buildApp rec {
4 appName = "passman";
5 version = "2.4.5";
6 url = "https://releases.passman.cc/${appName}_${version}.tar.gz";
7 sha256 = "sha256-wcRx1lUEHbJBJBBSKOScGljOgHM7Vpf69OymJoI8S2Y=";
8 };
9 passman_2_4_7 = buildApp rec {
10 appName = "passman";
11 version = "2.4.7";
12 url = "https://releases.passman.cc/${appName}_${version}.tar.gz";
13 sha256 = "sha256-CeNaN0cioVjcW6ILB//BIvmjQWcbvfK3m8jVQ8LGtyM=";
14 };
15 versions = {
16 "25" = passman_2_4_5;
17 "26" = passman_2_4_7;
18 "27" = passman_2_4_7;
19 };
20in
21 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app passman")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/polls.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/polls.nix
new file mode 100644
index 0000000..a50ac43
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/polls.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 polls_5_2_0 = buildApp rec {
4 appName = "polls";
5 version = "5.2.0";
6 url = "https://github.com/nextcloud/polls/releases/download/v${version}/${appName}.tar.gz";
7 sha256 = "sha256-45YNcSeFG9v3mfk7eLbDiy6hFgmfePY0j86JiVS0k14=";
8 };
9 versions = {
10 "25" = polls_5_2_0;
11 "26" = polls_5_2_0;
12 "27" = polls_5_2_0;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app polls")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/side_menu.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/side_menu.nix
new file mode 100644
index 0000000..da48f91
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/side_menu.nix
@@ -0,0 +1,16 @@
1{ buildApp, nextcloudVersion }:
2let
3 side_menu_3_10_3 = buildApp rec {
4 appName = "side_menu";
5 version = "3.10.3";
6 url = "https://gitnet.fr/attachments/9c9be610-5d3b-414d-a523-396c237c15ef";
7 filename = "${appName}-${version}.tar.gz";
8 sha256 = "sha256-WKbc6Ln6v3LYyRzwy0xAOmXilbqrWGS8XGWIT+TajdM=";
9 };
10 versions = {
11 "25" = side_menu_3_10_3;
12 "26" = side_menu_3_10_3;
13 "27" = side_menu_3_10_3;
14 };
15in
16 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app side_menu")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/social.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/social.nix
new file mode 100644
index 0000000..912b5bf
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/social.nix
@@ -0,0 +1,14 @@
1{ buildApp, nextcloudVersion }:
2let
3 social_0_6_1 = buildApp rec {
4 appName = "social";
5 version = "0.6.1";
6 url = "https://github.com/nextcloud-releases/social/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-5mww31ibwgnSiTuTaKo5MngbhPIw8lwLt1tkQySmerY=";
8 };
9 versions = {
10 "26" = social_0_6_1;
11 "27" = social_0_6_1;
12 };
13in
14 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app social")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/spreed.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/spreed.nix
new file mode 100644
index 0000000..d8a20b9
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/spreed.nix
@@ -0,0 +1,27 @@
1{ buildApp, nextcloudVersion }:
2let
3 spreed_15_0_7 = buildApp rec {
4 appName = "spreed";
5 version = "15.0.7";
6 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
7 sha256 = "sha256-J9udO7qlRL+TDwTPTbBpYeZLUi4oco42LoqYoHJbIyE=";
8 };
9 spreed_16_0_5 = buildApp rec {
10 appName = "spreed";
11 version = "16.0.5";
12 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
13 sha256 = "sha256-tTDnWqNkP6fMSdCP1c0vPh8f0K7sTFBvRwws5Gln9Mg=";
14 };
15 spreed_17_0_3 = buildApp rec {
16 appName = "spreed";
17 version = "17.0.3";
18 url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
19 sha256 = "sha256-vb08DI+q+5f87zz2UguE1y6b0NV2EoICYpaKUGmyF5w=";
20 };
21 versions = {
22 "25" = spreed_15_0_7;
23 "26" = spreed_16_0_5;
24 "27" = spreed_17_0_3;
25 };
26in
27 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app spreed")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/talk_matterbridge.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/talk_matterbridge.nix
new file mode 100644
index 0000000..906719d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/talk_matterbridge.nix
@@ -0,0 +1,14 @@
1{ buildApp, nextcloudVersion }:
2let
3 talk_matterbridge_1_26_0 = buildApp rec {
4 appName = "talk_matterbridge";
5 version = "1.26.0";
6 url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
7 sha256 = "sha256-gD5lfLWBjWOiy2ULf31ngQVIQbMZj3iwu3zuVrEDSks=";
8 };
9 versions = {
10 "25" = talk_matterbridge_1_26_0;
11 "26" = talk_matterbridge_1_26_0;
12 };
13in
14 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app talk_matterbridge")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/apps/tasks.nix b/flakes/mypackages/pkgs/webapps/nextcloud/apps/tasks.nix
new file mode 100644
index 0000000..aee7650
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/apps/tasks.nix
@@ -0,0 +1,15 @@
1{ buildApp, nextcloudVersion }:
2let
3 tasks_0_15_0 = buildApp rec {
4 appName = "tasks";
5 version = "0.15.0";
6 url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
7 sha256 = "sha256-nizJUFByK78FZ6KPJ4zfOU5Z9ClAxhwgQ7d+X5TGnM8=";
8 };
9 versions = {
10 "25" = tasks_0_15_0;
11 "26" = tasks_0_15_0;
12 "27" = tasks_0_15_0;
13 };
14in
15 versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app tasks")
diff --git a/flakes/mypackages/pkgs/webapps/nextcloud/default.nix b/flakes/mypackages/pkgs/webapps/nextcloud/default.nix
new file mode 100644
index 0000000..6aeeaed
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/nextcloud/default.nix
@@ -0,0 +1,84 @@
1{ nextcloudVersion, otherConfig ? {}, lib, stdenv, callPackage, fetchzip, fetchurl, postInstall ? null }:
2let
3 shasumsAndVersion = {
4 "25" = { sum = "sha256-alvh0fWESSS5KbfiKI1gaoahisDWnfT/bUhsSEEXfQI="; fullVersion = "25.0.10"; }; # php 7.4 - 8.2
5 "26" = { sum = "sha256-nhq0aAY4T1hUZdKJY66ZSlirCSgPQet8YJpciwJw1b4="; fullVersion = "26.0.5"; }; # php 8.0 - 8.2
6 "27" = { sum = "sha256-ei3OpDqjuPswM0fv2kxvN3M8yhE8juFt2fDl+2jHIS8="; fullVersion = "27.0.2"; }; # php 8.0 - 8.2
7 };
8 appNames = [
9 "audioplayer" "bookmarks" "calendar" "carnet"
10 "contacts" "cookbook" "deck" "external" "extract" "files_markdown" "files_mindmap"
11 "files_readmemd" "flowupload" "gpxedit" "gpxpod" "groupfolders" "impersonate"
12 "keeweb" "maps" "metadata" "music" "notes" "ocsms" "onlyoffice" "passman" "polls"
13 "social" "spreed" "talk_matterbridge" "tasks" "drawio" "side_menu"
14 "integration_dropbox"
15 ];
16 toApp = name: callPackage (./apps + "/${name}.nix") { inherit buildApp nextcloudVersion; };
17 allSupportedApps = lib.mapAttrs (n: v: v.value) (lib.filterAttrs (n: v: v.success) (lib.genAttrs appNames (name: builtins.tryEval (toApp name))));
18 allApps = lib.genAttrs appNames toApp;
19 buildApp = { appName, version, filename ? null, url, sha256, installHook ? (n: ""), otherConfig ? {}, installPhase ? "mkdir -p $out && cp -R . $out/" }:
20 stdenv.mkDerivation rec {
21 name = "nextcloud-app-${appName}-${version}";
22 inherit version;
23 phases = "unpackPhase installPhase";
24 inherit installPhase;
25 src = fetchurl ({ inherit url sha256; } // lib.optionalAttrs (filename != null) { name = filename; });
26 passthru = {
27 inherit appName otherConfig installHook;
28 };
29 };
30 toPassthru = pkg: apps: otherConfig: {
31 inherit apps otherConfig allApps allSupportedApps buildApp;
32 withApps = withApps pkg;
33 };
34 withApps = pkg: toApps:
35 let
36 apps = toApps allApps;
37 toInstallApp = n: ''
38 if [ -e $out/apps/${n.appName} ]; then
39 echo "${n.appName} already exists"
40 false
41 fi
42 ln -sf ${n} $out/apps/${n.appName}
43 '' + (n.installHook n);
44 zipped = lib.attrsets.zipAttrs ([pkg.otherConfig or {}] ++ map (v: v.otherConfig) apps);
45 appConfigs = with lib.attrsets; with lib.lists; {
46 mimetypealiases = foldr (h: prev: prev // h) {} (zipped.mimetypealiases or []);
47 mimetypemapping = mapAttrs (_: v: unique (flatten v)) (zipAttrs (zipped.mimetypemapping or []));
48 };
49 newNextcloud = pkg.overrideAttrs(old: {
50 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallApp apps);
51 passthru = toPassthru newNextcloud (pkg.apps ++ apps) appConfigs;
52 });
53 in newNextcloud;
54 package = stdenv.mkDerivation rec {
55 name = "nextcloud-${version}";
56 version = shasumsAndVersion."${builtins.toString nextcloudVersion}".fullVersion;
57
58 src = fetchurl {
59 url = "https://download.nextcloud.com/server/releases/${name}.tar.bz2";
60 sha256 = shasumsAndVersion."${builtins.toString nextcloudVersion}".sum;
61 };
62
63 inherit postInstall;
64 installPhase = ''
65 mkdir -p $out/
66 cp -R . $out/
67 sed -i -e "/'appDirsWithDifferentOwner'/d" $out/apps/settings/lib/Controller/CheckSetupController.php
68 mv $out/config $out/config.example
69 runHook postInstall
70 '';
71
72 noAuditTmpdir = true;
73 dontPatchELF = true;
74 dontStrip = true;
75 passthru = toPassthru package [] otherConfig;
76 meta = {
77 description = "Sharing solution for files, calendars, contacts and more";
78 homepage = https://nextcloud.com;
79 maintainers = with lib.maintainers; [ schneefux bachp globin fpletz ];
80 license = lib.licenses.agpl3Plus;
81 platforms = with lib.platforms; unix;
82 };
83 };
84in package
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/default.nix b/flakes/mypackages/pkgs/webapps/phpbb/default.nix
new file mode 100644
index 0000000..21ee154
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/default.nix
@@ -0,0 +1,61 @@
1{ stdenv, fetchurl, callPackage
2, varDir ? "/var/lib/phpbb"
3}:
4let
5 allExts = {
6 alfredoramos.markdown = callPackage ./extensions/markdown.nix {};
7 davidiq.mailinglist = callPackage ./extensions/mailinglist.nix {};
8 dmzx.mchat = callPackage ./extensions/mchat.nix {};
9 empteintesduweb.monitoranswers = callPackage ./extensions/monitoranswers.nix {};
10 lr94.autosubscribe = callPackage ./extensions/autosubscribe.nix {};
11 phpbbmodders.adduser = callPackage ./extensions/adduser.nix {};
12 };
13 allLangs = {
14 fr = callPackage ./langs/fr.nix {};
15 };
16 toPassthru = pkg: {
17 inherit allLangs allExts;
18 withLangs = withLangs pkg;
19 withExts = withExts pkg;
20 };
21 withExts = pkg: toExts:
22 let
23 exts = toExts allExts;
24 toInstallExt = ext: "cp -r ${ext}/* $out/ext/";
25 newPhpBB = pkg.overrideAttrs(old: {
26 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallExt exts);
27 passthru = toPassthru newPhpBB;
28 });
29 in newPhpBB;
30 withLangs = pkg: toLangs:
31 let
32 langs = toLangs allLangs;
33 toInstallLang = lang: "cp -r ${lang}/*/ $out";
34 newPhpBB = pkg.overrideAttrs(old: {
35 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallLang langs);
36 passthru = toPassthru newPhpBB;
37 });
38 in newPhpBB;
39 phpBB = stdenv.mkDerivation rec {
40 pname = "phpBB";
41 version = "3.3.0";
42
43 src = fetchurl {
44 url = "https://download.phpbb.com/pub/release/3.3/${version}/${pname}-${version}.tar.bz2";
45 sha256 = "a6234ac9dcf9086c025ece29a0a235f997a92bb9a994eff0ddcf8917e841262f";
46 };
47
48 phases = [ "unpackPhase" "installPhase" ];
49
50 installPhase = ''
51 cp -a . $out
52 mkdir -p $out/vars
53 mv $out/{cache,files,store,config.php} $out/vars
54 ln -s ${varDir}/{cache,files,store,config.php} $out/
55 echo -e "core:\n allow_install_dir: true" >> $out/config/production/config.yml
56 '';
57
58 passthru = toPassthru phpBB;
59 };
60in
61 phpBB
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/extensions/adduser.nix b/flakes/mypackages/pkgs/webapps/phpbb/extensions/adduser.nix
new file mode 100644
index 0000000..f9073e6
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/extensions/adduser.nix
@@ -0,0 +1,22 @@
1{ stdenv, fetchurl, unzip }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-extension-adduser";
4 version = "1.0.4";
5 src = fetchurl {
6 # https://www.phpbb.com/customise/db/extension/acp_add_user_2
7 url = "https://www.phpbb.com/customise/db/download/141601";
8 sha256 = "13m4anib74cinnv1ap3b1ncb8cxm3mzhhmlqhbrr9mlrqmwf4zg2";
9 };
10
11 buildInputs = [ unzip ];
12 phases = [ "unpackPhase" "installPhase" ];
13 unpackPhase = ''
14 mkdir src
15 cd src
16 unzip $src
17 '';
18 installPhase = ''
19 cp -a . $out
20 cp -a $out/phpbbmodders/adduser/language/en $out/phpbbmodders/adduser/language/fr
21 '';
22}
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/extensions/autosubscribe.nix b/flakes/mypackages/pkgs/webapps/phpbb/extensions/autosubscribe.nix
new file mode 100644
index 0000000..78e23fc
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/extensions/autosubscribe.nix
@@ -0,0 +1,19 @@
1{ stdenv, fetchurl, unzip }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-extension-autosubscribe";
4 version = "1.1.0";
5 src = fetchurl {
6 # https://www.phpbb.com/customise/db/extension/autosubscribe
7 url = "https://www.phpbb.com/customise/db/download/146556";
8 sha256 = "0dsay463g4impw86w1nv307nslc195fkgkqmihfn5kc0hya0giv0";
9 };
10
11 buildInputs = [ unzip ];
12 phases = [ "unpackPhase" "installPhase" ];
13 unpackPhase = ''
14 mkdir src
15 cd src
16 unzip $src
17 '';
18 installPhase = "cp -a . $out";
19}
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/extensions/mailinglist.nix b/flakes/mypackages/pkgs/webapps/phpbb/extensions/mailinglist.nix
new file mode 100644
index 0000000..d432aaf
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/extensions/mailinglist.nix
@@ -0,0 +1,18 @@
1{ stdenv, fetchurl, unzip }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-extension-MailingList";
4 version = "2.0.0";
5 src = fetchurl {
6 url = "https://github.com/DavidIQ/MailingList/archive/${version}.tar.gz";
7 sha256 = "1ddg8bci85jwmvyakcwdn4yzqwz1rgy7ljf4nmfk9p2kvx2nhj62";
8 };
9
10 phases = [ "unpackPhase" "installPhase" ];
11 installPhase = ''
12 mkdir -p $out/davidiq/mailinglist
13 cp -a . $out/davidiq/mailinglist
14 # delete last two lines which contain EMAIL_SIG
15 sed -i -n -e :a -e '1,2!{P;N;D;};N;ba' $out/davidiq/mailinglist/language/en/email/*
16 '';
17}
18
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/extensions/markdown.nix b/flakes/mypackages/pkgs/webapps/phpbb/extensions/markdown.nix
new file mode 100644
index 0000000..3bd73c7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/extensions/markdown.nix
@@ -0,0 +1,20 @@
1{ stdenv, fetchurl, unzip }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-extension-markdown";
4 version = "1.2.0";
5 src = fetchurl {
6 # https://www.phpbb.com/customise/db/extension/markdown
7 name = "alfredoramos_markdown_${version}.zip";
8 url = "https://www.phpbb.com/customise/db/download/173626";
9 sha256 = "0bmgi8qr6azaaz8xnz8dkyf147dyawqvqr93r01qbm9s8bfkpzqx";
10 };
11
12 buildInputs = [ unzip ];
13 phases = [ "unpackPhase" "installPhase" ];
14 unpackPhase = ''
15 mkdir src
16 cd src
17 unzip $src
18 '';
19 installPhase = "cp -a . $out";
20}
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/extensions/mchat.nix b/flakes/mypackages/pkgs/webapps/phpbb/extensions/mchat.nix
new file mode 100644
index 0000000..93ea861
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/extensions/mchat.nix
@@ -0,0 +1,21 @@
1{ stdenv, fetchurl, unzip }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-extension-mchat";
4 version = "2.1.3";
5 src = fetchurl {
6 # https://www.phpbb.com/customise/db/extension/mchat_extension
7 name = "dmzx_mchat_${version}.zip";
8 url = "https://www.phpbb.com/customise/db/download/168331";
9 sha256 = "0mcka02wamn899vg64m1c5d5k6f4qml18cshhzfvccrdc7a0m5p1";
10 };
11
12 buildInputs = [ unzip ];
13 phases = [ "unpackPhase" "installPhase" ];
14 unpackPhase = ''
15 mkdir src
16 cd src
17 unzip $src
18 '';
19 installPhase = "cp -a . $out";
20}
21
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/extensions/monitoranswers.nix b/flakes/mypackages/pkgs/webapps/phpbb/extensions/monitoranswers.nix
new file mode 100644
index 0000000..52c852e
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/extensions/monitoranswers.nix
@@ -0,0 +1,19 @@
1{ stdenv, fetchurl, unzip }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-extension-monitoranswers";
4 version = "1.0.0";
5 src = fetchurl {
6 # http://forums.phpbb-fr.com/extensions-developpement-en-cours/sujet208410.html
7 url = "https://www.empreintesduweb.com/dl/extension_empreintesduweb_monitoranswers_v100.zip";
8 sha256 = "0g5khzz7brkra9rnnjh8vsv11h8vf36pcw53b4wrkcjb66bfm20s";
9 };
10
11 buildInputs = [ unzip ];
12 phases = [ "unpackPhase" "installPhase" ];
13 unpackPhase = ''
14 mkdir src
15 cd src
16 unzip $src
17 '';
18 installPhase = "cp -a . $out";
19}
diff --git a/flakes/mypackages/pkgs/webapps/phpbb/langs/fr.nix b/flakes/mypackages/pkgs/webapps/phpbb/langs/fr.nix
new file mode 100644
index 0000000..12f2df0
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpbb/langs/fr.nix
@@ -0,0 +1,12 @@
1{ stdenv, fetchurl }:
2stdenv.mkDerivation rec {
3 pname = "phpBB-language-fr";
4 version = "v4.0.0";
5 src = fetchurl {
6 url = "https://github.com/milescellar/phpbb-language-fr/archive/${version}.tar.gz";
7 sha256 = "0pkw55pb8ka4ayn1861hwvjwzs8vkq04yaxrs7zm9c8lh2g7y8z0";
8 };
9
10 phases = [ "unpackPhase" "installPhase" ];
11 installPhase = "cp -a . $out";
12}
diff --git a/flakes/mypackages/pkgs/webapps/phpldapadmin/default.nix b/flakes/mypackages/pkgs/webapps/phpldapadmin/default.nix
new file mode 100644
index 0000000..da32f97
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpldapadmin/default.nix
@@ -0,0 +1,27 @@
1{ config ? "/etc/phpldapadmin/config.php", fetchurl, fetchFromGitHub, stdenv, optipng }:
2stdenv.mkDerivation rec {
3 version = "1.2.5";
4 name = "phpldapadmin-${version}";
5 src = fetchFromGitHub {
6 owner = "leenooks";
7 repo = "phpLDAPadmin";
8 rev = "8f4ced96f9c63a09510a5bccb2189a8b92fb29ba";
9 sha256 = "1x6xc3xbvw3aj46i5ds06a8h6mfljxdv3argxrzz02l541ra6ni7";
10 };
11 patches = [
12 #./ldap-php5_5.patch
13 #./ldap-disable-mcrypt.patch
14 #./ldap-php7_2.patch
15 ./ldap-sort-in-templates.patch
16 ./ldap-align-button.patch
17 ./ldap-fix-password.patch
18 ];
19 buildInputs = [ optipng ];
20 buildPhase = ''
21 find -name '*.png' -exec optipng -quiet -force -fix {} \;
22 '';
23 installPhase = ''
24 cp -a . $out
25 ln -sf ${config} $out/config/config.php
26 '';
27}
diff --git a/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-align-button.patch b/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-align-button.patch
new file mode 100644
index 0000000..d9a5504
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-align-button.patch
@@ -0,0 +1,11 @@
1--- a/htdocs/update_confirm.php 2012-10-01 08:54:14.000000000 +0200
2+++ b/htdocs/update_confirm.php 2018-06-06 15:47:44.122398888 +0200
3@@ -187,7 +187,7 @@
4
5 echo '</table>';
6
7- echo '<div style="text-align: center;">';
8+ echo '<div style="text-align: left;">';
9 echo '<br />';
10 // @todo cant use AJAX here, it affects file uploads.
11 printf('<input type="submit" value="%s" />',
diff --git a/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-fix-password.patch b/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-fix-password.patch
new file mode 100644
index 0000000..d2d80e4
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-fix-password.patch
@@ -0,0 +1,13 @@
1diff --git a/htdocs/login.php b/htdocs/login.php
2index 48f9e2e..298b07d 100644
3--- a/htdocs/login.php
4+++ b/htdocs/login.php
5@@ -13,7 +13,7 @@ require './common.php';
6
7 $user = array();
8 $user['login'] = get_request('login');
9-$user['password'] = get_request('login_pass');
10+$user['password'] = get_request('login_pass','POST',false,null,false);
11
12 if ($user['login'] && ! strlen($user['password']))
13 system_message(array(
diff --git a/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch b/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch
new file mode 100644
index 0000000..55a1974
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch
@@ -0,0 +1,12 @@
1diff -wbBur phpldapadmin-1.2.3.org/lib/TemplateRender.php phpldapadmin-1.2.3/lib/TemplateRender.php
2--- phpldapadmin-1.2.3.org/lib/TemplateRender.php 2012-10-01 10:54:14.000000000 +0400
3+++ phpldapadmin-1.2.3/lib/TemplateRender.php 2018-02-02 19:06:45.674760057 +0300
4@@ -321,6 +321,8 @@
5
6 $vals = array();
7
8+ asort($picklistvalues);
9+
10 foreach ($picklistvalues as $key => $values) {
11 $display = $args[3];
12
diff --git a/flakes/mypackages/pkgs/webapps/rompr/default.nix b/flakes/mypackages/pkgs/webapps/rompr/default.nix
new file mode 100644
index 0000000..5b3e7e0
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/rompr/default.nix
@@ -0,0 +1,17 @@
1{ varDir ? "/var/lib/rompr", stdenv, fetchFromGitHub }:
2stdenv.mkDerivation ({
3 pname = "rompr";
4 version = "1.24";
5 src = fetchFromGitHub {
6 owner = "fatg3erman";
7 repo = "RompR";
8 rev = "0d8f597027ac71b320963fe3f33f461a136312ad";
9 sha256 = "13p3c4whhmvz1vvh9fva5gdx4xji288k108hjdi8b1yn506lzix2";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 cp -a . $out
14 ln -sf ${varDir}/prefs $out/prefs
15 ln -sf ${varDir}/albumart $out/albumart
16 '';
17})
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch b/flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch
new file mode 100644
index 0000000..ba651e2
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch
@@ -0,0 +1,209 @@
1diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php
2index 0552b89c2..1b84e1b4e 100644
3--- a/program/include/rcmail_output_html.php
4+++ b/program/include/rcmail_output_html.php
5@@ -1013,13 +1013,13 @@ EOF;
6 // use minified file if exists (not in development mode)
7 if (!$this->devel_mode && !preg_match('/\.min\.' . $ext . '$/', $file)) {
8 $minified_file = substr($file, 0, strlen($ext) * -1) . 'min.' . $ext;
9- if ($fs = @filemtime($this->assets_dir . $minified_file)) {
10- return $minified_file . '?s=' . $fs;
11+ if ($fs = @md5_file($this->assets_dir . $minified_file)) {
12+ return $minified_file . '?s=' . substr($fs, 0, 6);
13 }
14 }
15
16- if ($fs = @filemtime($this->assets_dir . $file)) {
17- $file .= '?s=' . $fs;
18+ if ($fs = @md5_file($this->assets_dir . $file)) {
19+ $file .= '?s=' . substr($fs, 0, 6);
20 }
21
22 return $file;
23diff --git a/program/js/app.js b/program/js/app.js
24index 2094b7b7b..06fe96a80 100644
25--- a/program/js/app.js
26+++ b/program/js/app.js
27@@ -2277,6 +2277,9 @@ function rcube_webmail()
28 }
29
30 tree += '<span id="msgicn'+row.id+'" class="'+css_class+status_class+'" title="'+status_label+'"></span>';
31+ if (flags.mbox != this.env.mailbox) {
32+ tree += '<span style="color:#737677">' + flags.mbox + '&nbsp;<span>';
33+ }
34 row.className = row_class;
35
36 // build subject link
37diff --git a/program/localization/en_CA/labels.inc b/program/localization/en_CA/labels.inc
38index 03c1c8e11..8d67a49ac 100644
39--- a/program/localization/en_CA/labels.inc
40+++ b/program/localization/en_CA/labels.inc
41@@ -128,6 +128,7 @@ $labels['markunread'] = 'As unread';
42 $labels['markflagged'] = 'As flagged';
43 $labels['markunflagged'] = 'As unflagged';
44 $labels['moreactions'] = 'More actions...';
45+$labels['folders-allsubscribed'] = 'All subscribed folders';
46 $labels['folders-all'] = 'All folders';
47 $labels['more'] = 'More';
48 $labels['back'] = 'Back';
49@@ -184,6 +185,7 @@ $labels['namex'] = 'Name';
50 $labels['searchscope'] = 'Scope';
51 $labels['currentfolder'] = 'Current folder';
52 $labels['subfolders'] = 'This and subfolders';
53+$labels['allsubscribedfolders'] = 'All subscribed folders';
54 $labels['allfolders'] = 'All folders';
55 $labels['openinextwin'] = 'Open in new window';
56 $labels['emlsave'] = 'Download (.eml)';
57diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc
58index a442965de..b5b4839e3 100644
59--- a/program/localization/en_GB/labels.inc
60+++ b/program/localization/en_GB/labels.inc
61@@ -135,6 +135,7 @@ $labels['moreactions'] = 'More actions...';
62 $labels['markallread'] = 'Mark all as read';
63 $labels['folders-cur'] = 'Selected folder only';
64 $labels['folders-sub'] = 'Selected folder and its subfolders';
65+$labels['folders-allsubscribed'] = 'All subscribed folders';
66 $labels['folders-all'] = 'All folders';
67 $labels['more'] = 'More';
68 $labels['back'] = 'Back';
69@@ -221,6 +222,7 @@ $labels['namex'] = 'Name';
70 $labels['searchscope'] = 'Scope';
71 $labels['currentfolder'] = 'Current folder';
72 $labels['subfolders'] = 'This and subfolders';
73+$labels['allsubscribedfolders'] = 'All subscribed folders';
74 $labels['allfolders'] = 'All folders';
75 $labels['searchinterval-1W'] = 'older than a week';
76 $labels['searchinterval-1M'] = 'older than a month';
77diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
78index 2e8ec8009..c7736557f 100644
79--- a/program/localization/en_US/labels.inc
80+++ b/program/localization/en_US/labels.inc
81@@ -158,6 +158,7 @@ $labels['moreactions'] = 'More actions...';
82 $labels['markallread'] = 'Mark all as read';
83 $labels['folders-cur'] = 'Selected folder only';
84 $labels['folders-sub'] = 'Selected folder and its subfolders';
85+$labels['folders-allsubscribed'] = 'All subscribed folders';
86 $labels['folders-all'] = 'All folders';
87 $labels['more'] = 'More';
88 $labels['back'] = 'Back';
89@@ -249,6 +250,7 @@ $labels['namex'] = 'Name';
90 $labels['searchscope'] = 'Scope';
91 $labels['currentfolder'] = 'Current folder';
92 $labels['subfolders'] = 'This and subfolders';
93+$labels['allsubscribedfolders'] = 'All subscribed folders';
94 $labels['allfolders'] = 'All folders';
95 $labels['searchinterval-1W'] = 'older than a week';
96 $labels['searchinterval-1M'] = 'older than a month';
97diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc
98index 6db44f95c..ad83e15d8 100644
99--- a/program/localization/fr_FR/labels.inc
100+++ b/program/localization/fr_FR/labels.inc
101@@ -135,6 +135,7 @@ $labels['moreactions'] = 'Plus d’actions…';
102 $labels['markallread'] = 'Tout marquer comme lu';
103 $labels['folders-cur'] = 'Dossier sélectionné seulement';
104 $labels['folders-sub'] = 'Dossier sélectionné et ses sous-dossiers';
105+$labels['folders-allsubscribed'] = 'Tous les dossiers souscrits';
106 $labels['folders-all'] = 'Tous les dossiers';
107 $labels['more'] = 'Plus';
108 $labels['back'] = 'Retour';
109@@ -221,6 +222,7 @@ $labels['namex'] = 'Nom';
110 $labels['searchscope'] = 'Portée';
111 $labels['currentfolder'] = 'Répertoire actuel';
112 $labels['subfolders'] = 'Ceci et les sous-dossiers';
113+$labels['allsubscribedfolders'] = 'Tous les dossiers souscrits';
114 $labels['allfolders'] = 'Tous les dossiers';
115 $labels['searchinterval-1W'] = 'plus d’une semaine';
116 $labels['searchinterval-1M'] = 'plus d’un mois';
117diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
118index 8e0c642f6..ac79780e0 100644
119--- a/program/steps/mail/func.inc
120+++ b/program/steps/mail/func.inc
121@@ -110,8 +110,8 @@ if (empty($RCMAIL->action) || $RCMAIL->action == 'list') {
122 'copy', 'move', 'quota', 'replyall', 'replylist', 'stillsearching',
123 'flagged', 'unflagged', 'unread', 'deleted', 'replied', 'forwarded',
124 'priority', 'withattachment', 'fileuploaderror', 'mark', 'markallread',
125- 'folders-cur', 'folders-sub', 'folders-all', 'cancel', 'bounce', 'bouncemsg',
126- 'sendingmessage');
127+ 'folders-cur', 'folders-sub', 'folders-allsubscribed', 'folder-all',
128+ 'cancel', 'bounce', 'bouncemsg', 'sendingmessage');
129 }
130 }
131
132diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc
133index f60528835..836a715b0 100644
134--- a/program/steps/mail/search.inc
135+++ b/program/steps/mail/search.inc
136@@ -86,7 +86,7 @@ else if (strlen(trim($str))) {
137 }
138
139 // save search modifiers for the current folder to user prefs
140- $mkey = $scope == 'all' ? '*' : $mbox;
141+ $mkey = ($scope == 'all' || $scope == 'allsubscribed') ? '*' : $mbox;
142 $search_mods = rcmail_search_mods();
143 $search_mods[$mkey] = array_fill_keys(array_keys($subject), 1);
144
145@@ -124,6 +124,10 @@ if (!empty($continue) && isset($_SESSION['search']) && $_SESSION['search_request
146 if ($search_str) {
147 // search all, current or subfolders folders
148 if ($scope == 'all') {
149+ $mboxes = $RCMAIL->storage->list_folders('', '*', 'mail', null, true);
150+ natcasesort($mboxes); // we want natural alphabetic sorting of folders in the result set
151+ }
152+ else if ($scope == 'allsubscribed') {
153 $mboxes = $RCMAIL->storage->list_folders_subscribed('', '*', 'mail', null, true);
154 natcasesort($mboxes); // we want natural alphabetic sorting of folders in the result set
155 }
156@@ -133,7 +137,7 @@ if ($search_str) {
157 array_unshift($mboxes, $mbox);
158 }
159
160- if ($scope != 'all') {
161+ if ($scope != 'all' && $scope != 'allsubscribed') {
162 // Remember current folder, it can change in meantime (plugins)
163 // but we need it to e.g. recognize Sent folder to handle From/To column later
164 $RCMAIL->output->set_env('mailbox', $mbox);
165@@ -194,7 +198,7 @@ else {
166 $count = 0;
167 $OUTPUT->show_message('searchnomatch', 'notice');
168 $OUTPUT->set_env('multifolder_listing', (bool)$result->multi);
169- if ($result->multi && $scope == 'all') {
170+ if ($result->multi && ($scope == 'all' || $scope == 'allsubscribed')) {
171 $OUTPUT->command('select_folder', '');
172 }
173 }
174diff --git a/skins/classic/templates/mail.html b/skins/classic/templates/mail.html
175index 666adf606..23d12a275 100644
176--- a/skins/classic/templates/mail.html
177+++ b/skins/classic/templates/mail.html
178@@ -106,6 +106,7 @@
179 <li><label class="comment"><roundcube:label name="searchscope" /></label></li>
180 <li><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
181 <li><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="subfolders" /></span></label></li>
182+ <li><label><input type="radio" name="s_scope" value="allsubscribed" id="s_scope_allsubscribed" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="allsubscribedfolders" /></span></label></li>
183 <li><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="allfolders" /></span></label></li>
184 </ul>
185 </div>
186diff --git a/skins/elastic/templates/mail.html b/skins/elastic/templates/mail.html
187index 51dbfcd30..4c2281281 100644
188--- a/skins/elastic/templates/mail.html
189+++ b/skins/elastic/templates/mail.html
190@@ -77,6 +77,7 @@
191 <select name="s_scope" id="s_scope">
192 <option value="base"><roundcube:label name="currentfolder" /></option>
193 <option value="sub"><roundcube:label name="subfolders" /></option>
194+ <option value="allsubscribed"><roundcube:label name="allsubscribedfolders" /></option>
195 <option value="all"><roundcube:label name="allfolders" /></option>
196 </select>
197 </div>
198diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html
199index 5ef0bc211..e0e8280ad 100644
200--- a/skins/larry/templates/mail.html
201+++ b/skins/larry/templates/mail.html
202@@ -56,6 +56,7 @@
203 <li role="separator" class="separator"><label><roundcube:label name="searchscope" /></label></li>
204 <li role="menuitem"><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
205 <li role="menuitem"><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="subfolders" /></span></label></li>
206+ <li role="menuitem"><label><input type="radio" name="s_scope" value="allsubscribed" id="s_scope_allsubscribed" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="allsubscribedfolders" /></span></label></li>
207 <li role="menuitem"><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="allfolders" /></span></label></li>
208 </ul>
209 <div class="buttons"><a class="button" href="#" onclick="if (rcmail.command('search')) UI.show_popup('searchmenu',false)"><roundcube:label name="search" /></a></div>
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 @@
1{ varDir ? "/var/lib/roundcubemail"
2, roundcube_config ? "/etc/roundcube/config.php"
3, stdenv, fetchurl, jre, unzip, lib, callPackage }:
4let
5 defaultInstall = ''
6 mkdir -p $out
7 cp -R . $out/
8 cd $out
9 if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then
10 ln -s larry skins/elastic
11 fi
12 '';
13 buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }:
14 stdenv.mkDerivation rec {
15 name = "roundcube-${appName}-${version}";
16 inherit version;
17 phases = "unpackPhase installPhase";
18 inherit installPhase;
19 src = fetchurl { inherit url sha256; };
20 passthru.pluginName = appName;
21 };
22 skinNames = [];
23 allSkins = lib.attrsets.genAttrs skinNames
24 (name: callPackage (./skins + "/${name}") {});
25 pluginNames = [
26 "automatic_addressbook" "carddav" "contextmenu"
27 "contextmenu_folder" "html5_notifier" "ident_switch"
28 "message_highlight" "thunderbird_labels"
29 ];
30 allPlugins = lib.attrsets.genAttrs pluginNames
31 (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; });
32 toPassthru = pkg: plugins: skins: {
33 inherit plugins skins allSkins allPlugins;
34 withSkins = withSkins pkg;
35 withPlugins = withPlugins pkg;
36 };
37 withPlugins = pkg: toPlugins:
38 let
39 plugins = toPlugins allPlugins;
40 toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}";
41 newRoundcube = pkg.overrideAttrs(old: {
42 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
43 passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins;
44 });
45 in newRoundcube;
46 withSkins = pkg: toSkins:
47 let
48 skins = toSkins allSkins;
49 toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}";
50 newRoundcube = pkg.overrideAttrs(old: {
51 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins);
52 passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins);
53 });
54 in newRoundcube;
55 shrinker = fetchurl {
56 url = "https://dl.google.com/closure-compiler/compiler-20200719.zip";
57 sha256 = "0j46y9ack2yq67naca6nfysbmyilwjlkl29dbswidf1lq09yhhj3";
58 };
59 package = stdenv.mkDerivation rec {
60 version = "1.4.4";
61 name = "roundcubemail-${version}";
62 src= fetchurl {
63 url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz";
64 sha256 = "1my726p0wmsn21nbdsjx02h6hnbh8nidzipzdy0gk0qgda1j729b";
65 };
66 patches = [ ./add_all.patch ]; # This patch includes js modification which requires to re-run the jsshrink below
67 buildInputs = [ unzip jre ];
68 buildPhase = ''
69 mkdir -p /tmp
70 unzip -p "${shrinker}" "*.jar" > "/tmp/compiler.jar"
71 ./bin/jsshrink.sh
72 sed -i \
73 -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \
74 config/defaults.inc.php
75 sed -i \
76 -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \
77 config/defaults.inc.php
78 '';
79 installPhase = ''
80 cp -a . $out
81 ln -s ${roundcube_config} $out/config/config.inc.php
82 '';
83 passthru = toPassthru package [] [];
84 };
85in 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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "automatic_addressbook";
4 version = "0.4.3";
5 url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz";
6 sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "carddav";
4 version = "3.0.3";
5 url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2";
6 sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "contextmenu";
4 version = "3.2";
5 url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz";
6 sha256 = "1j7qns42bvgwav8d5n8g16iajyrhydd76hgil8625f3xyjbv4mx0";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "contextmenu_folder";
4 version = "1.3.3";
5 url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz";
6 sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "html5_notifier";
4 version = "v0.6.4";
5 url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz";
6 sha256 = "1w6xkffgxwbahi7acixdh5sgjvsjlfwdq942gkvc64byk8r3bhsj";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "ident_switch";
4 version = "4.2";
5 url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz";
6 sha256 = "0rf2krjsnly4i0mzgsbx09xckr3p9a9dzxf8qq4lkyng1a7dvjkq";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "message_highlight";
4 version = "4.4";
5 url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz";
6 sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j";
7}
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 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "thunderbird_labels";
4 version = "v1.4.2";
5 url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz";
6 sha256 = "00dqqlq6m8a6dwynp6gwfimc10anbs8kh0qdy8xvq2l06hk6jxyc";
7}
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 @@
1{ siteName ? "spip"
2, siteDir ? runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out"
3, environment ? "prod"
4, ldap ? false
5, varDir ? "/var/lib/${siteName}_${environment}"
6, lib, fetchzip, runCommand, stdenv }:
7let
8 app = stdenv.mkDerivation rec {
9 name = "${siteName}-${environment}-spip-${version}";
10 version = "3.2.7";
11 src = fetchzip {
12 url = "https://files.spip.net/spip/archives/SPIP-v${version}.zip";
13 sha256 = "0n4kc95nhn524zbb11bpfjs965pm4v026s3m3q44pl8nyms91r33";
14 };
15 paches = lib.optionals ldap [ ./spip_ldap_patch.patch ];
16 buildPhase = ''
17 rm -rf IMG local tmp config/remove.txt
18 ln -sf ${./spip_mes_options.php} config/mes_options.php
19 echo "Require all denied" > "config/.htaccess"
20 ln -sf ${varDir}/{IMG,local} .
21 '';
22 installPhase = ''
23 cp -a . $out
24 cp -a ${siteDir}/* $out
25 '';
26 passthru = {
27 inherit siteName siteDir environment varDir;
28 webRoot = app;
29 spipConfig = ./spip_mes_options.php;
30 };
31 };
32in 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 @@
1--- old/ecrire/auth/ldap.php 2017-06-08 21:58:17.000000000 +0200
2+++ new/ecrire/auth/ldap.php 2017-06-10 02:54:02.687954143 +0200
3@@ -171,24 +171,41 @@
4 $desc = isset($ldap['attributes']) && $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ;
5
6 $logins = is_array($desc['login']) ? $desc['login'] : array($desc['login']);
7+ if (isset($GLOBALS['ldap_search'])) {
8+ $search_query = str_replace("%user%", $login_search, $GLOBALS['ldap_search']);
9+ $result = @ldap_search($ldap_link, $ldap_base, $search_query, array("dn"));
10+ $info = @ldap_get_entries($ldap_link, $result);
11+ // Ne pas accepter les resultats si plus d'une entree
12+ // (on veut un attribut unique)
13
14- // Tenter une recherche pour essayer de retrouver le DN
15- foreach ($logins as $att) {
16- $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn"));
17- $info = @ldap_get_entries($ldap_link, $result);
18- // Ne pas accepter les resultats si plus d'une entree
19- // (on veut un attribut unique)
20+ if (is_array($info) and $info['count'] == 1) {
21+ $dn = $info[0]['dn'];
22+ if (!$checkpass) {
23+ return $dn;
24+ }
25+ if (@ldap_bind($ldap_link, $dn, $pass)) {
26+ return $dn;
27+ }
28+ }
29+ } else {
30+ // Tenter une recherche pour essayer de retrouver le DN
31+ foreach ($logins as $att) {
32+ $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn"));
33+ $info = @ldap_get_entries($ldap_link, $result);
34+ // Ne pas accepter les resultats si plus d'une entree
35+ // (on veut un attribut unique)
36
37- if (is_array($info) and $info['count'] == 1) {
38- $dn = $info[0]['dn'];
39- if (!$checkpass) {
40- return $dn;
41- }
42- if (@ldap_bind($ldap_link, $dn, $pass)) {
43- return $dn;
44- }
45- }
46- }
47+ if (is_array($info) and $info['count'] == 1) {
48+ $dn = $info[0]['dn'];
49+ if (!$checkpass) {
50+ return $dn;
51+ }
52+ if (@ldap_bind($ldap_link, $dn, $pass)) {
53+ return $dn;
54+ }
55+ }
56+ }
57+ }
58
59 if ($checkpass and !isset($dn)) {
60 // 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 @@
1<?php // /!\ Important: There must be no blank space before &lt;?php or after ?&gt;
2// This file was inspired from the spip contrib website
3// http://www.spip.net/fr_article3811.html
4
5$config_dir = getenv('SPIP_CONFIG_DIR') . '/';
6$var_dir = getenv('SPIP_VAR_DIR') . '/';
7
8$cookie_prefix = str_replace('.', '_', getenv("SPIP_SITE"));
9$table_prefix = 'spip';
10
11spip_initialisation(
12 $config_dir,
13 _DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES,
14 $var_dir . _NOM_TEMPORAIRES_INACCESSIBLES,
15 _DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES
16);
17
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 @@
1{ ttrss_config ? "/etc/ttrss/config.php"
2, varDir ? "/var/lib/ttrss"
3, stdenv, lib, callPackage, sources }:
4let
5 pluginNames = [ "auth_ldap" "af_feedmod" "feediron" "ff_instagram" "tumblr_gdpr_ua" ];
6 allPlugins = lib.attrsets.genAttrs pluginNames
7 (name: callPackage (./plugins + "/${name}") {});
8 toPassthru = pkg: plugins: {
9 inherit plugins allPlugins;
10 withPlugins = withPlugins pkg;
11 };
12 withPlugins = pkg: toPlugins:
13 let
14 plugins = toPlugins allPlugins;
15 toInstallPlugin = n:
16 "ln -sf ${n} $out/plugins/${n.pluginName}";
17 newTtrss = pkg.overrideAttrs(old: {
18 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
19 passthru = toPassthru newTtrss (pkg.plugins ++ plugins);
20 });
21 in newTtrss;
22 package = stdenv.mkDerivation rec {
23 pname = "tt-rss";
24 version = "${sources.tools.ttrss.shortRev}-master";
25 name = "${pname}-${version}";
26 src = sources.tools.ttrss;
27 buildPhase = ''
28 rm -rf lock feed-icons cache
29 ln -sf ${varDir}/{lock,feed-icons,cache} .
30 '';
31 installPhase = ''
32 cp -a . $out
33 ln -s ${ttrss_config} $out/config.php
34 '';
35 passthru = toPassthru package [];
36 };
37in 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 @@
1{ patched ? false, stdenv, fetchFromGitHub, lib }:
2stdenv.mkDerivation ({
3 pname = "ttrss-af_feedmod";
4 version = "0ea2092-master";
5 src = fetchFromGitHub {
6 owner = "mbirth";
7 repo = "ttrss_plugin-af_feedmod";
8 rev = "0ea2092dd34067ecd898802cfca3570023d1ecfe";
9 sha256 = "02ibf47zcrsc2rr45wsix8gxyyf371davj8n8i0gj1zdq95klvnv";
10 fetchSubmodules = true;
11 };
12 patches = lib.optionals patched [ ./type_replace.patch ];
13 installPhase = ''
14 mkdir $out
15 cp init.php $out
16 '';
17 passthru.pluginName = "af_feedmod";
18})
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 @@
1--- a/init.php 2014-06-16 14:21:06.995480038 +0200
2+++ b/init.php 2014-06-16 14:22:00.151027654 +0200
3@@ -147,6 +147,9 @@
4 }
5 }
6 break;
7+ case 'replace':
8+ $article['content'] = preg_replace("/".$config['pattern']."/",$config['replacement'],$article['content']);
9+ break;
10
11 default:
12 // 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 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation ({
3 pname = "ttrss-auth-ldap";
4 version = "4d751b0-master";
5 src = fetchFromGitHub {
6 owner = "hydrian";
7 repo = "TTRSS-Auth-LDAP";
8 rev = "4d751b095c29a8dbe2dc7bb07777742956136e94";
9 sha256 = "0b9fl86acrzpcv41r7pj3bl8b3n72hpkdywzx9zjyfqv5pskxyim";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 mkdir $out
14 cp plugins/auth_ldap/init.php $out
15 '';
16 passthru.pluginName = "auth_ldap";
17})
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 @@
1{ patched ? false, stdenv, fetchFromGitHub, lib }:
2stdenv.mkDerivation ({
3 pname = "ttrss-feediron";
4 version = "407168c-master";
5 src = fetchFromGitHub {
6 owner = "m42e";
7 repo = "ttrss_plugin-feediron";
8 rev = "407168c628880b5ced572cc549db6d50e866d3c8";
9 sha256 = "17b95ifpcph6m03hjd1mhi8gi1hw9yd3fnffmw66fqr5c9l3zd9r";
10 fetchSubmodules = true;
11 };
12 patches = lib.optionals patched [ ./json_reformat.patch ];
13 installPhase = ''
14 mkdir $out
15 cp -a . $out
16 '';
17 passthru.pluginName = "feediron";
18})
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 @@
1diff --git a/init.php b/init.php
2index 3c0f2f9..1aad146 100644
3--- a/init.php
4+++ b/init.php
5@@ -600,10 +600,11 @@ class Feediron extends Plugin implements IHandler
6 return false;
7 }
8
9- $this->host->set($this, 'json_conf', Feediron_Json::format($json_conf));
10+ $new_conf = json_encode(json_decode($json_conf), JSON_PRETTY_PRINT);
11+ $this->host->set($this, 'json_conf', $new_conf);
12 $json_reply['success'] = true;
13 $json_reply['message'] = __('Configuration saved.');
14- $json_reply['json_conf'] = Feediron_Json::format($json_conf);
15+ $json_reply['json_conf'] = $new_conf;
16 echo json_encode($json_reply);
17 }
18
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 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation ({
3 pname = "ttrss-ff_instagram";
4 version = "0366ffb-master";
5 src = fetchFromGitHub {
6 owner = "wltb";
7 repo = "ff_instagram";
8 rev = "0366ffb18c4d490c8fbfba2f5f3367a5af23cfe8";
9 sha256 = "0vvzl6wi6jmrqknsfddvckjgsgfizz1d923d1nyrpzjfn6bda1vk";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 mkdir $out
14 cp -a . $out
15 '';
16 passthru.pluginName = "ff_instagram";
17})
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 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation ({
3 pname = "ttrss-tumblr_gdpr_ua";
4 version = "287c584-master";
5 src = fetchFromGitHub {
6 owner = "hkockerbeck";
7 repo = "ttrss-tumblr-gdpr-ua";
8 rev = "287c584e68845d524f920156bff0b2eaa6f65117";
9 sha256 = "1fviawgcclqky4k4xv1sqzvpb8i74w9f0pclm09m78s8l85wh9py";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 mkdir $out
14 cp -a . $out
15 '';
16 passthru.pluginName = "tumblr_gdpr_ua";
17})
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 @@
1{ varDir ? "/var/lib/wallabag"
2, wallabag_config ? "/etc/wallabag/parameters.yml"
3, ldap ? false
4, composerEnv, fetchurl, lib }:
5composerEnv.buildPackage rec {
6 packages = {
7 "fr3d/ldap-bundle" = {
8 targetDir = "";
9 src = composerEnv.buildZipPackage {
10 name = "fr3d-ldap-bundle-5a8927c11af45fa06331b97221c6da1a4a237475";
11 src = fetchurl {
12 url = https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475;
13 sha256 = "168zkd82j200wd6h0a3lq81g5s2pifg889rv27q2g429nppsbfxc";
14 };
15 };
16 };
17 "zendframework/zend-ldap" = {
18 targetDir = "";
19 src = composerEnv.buildZipPackage {
20 name = "zendframework-zend-ldap-b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49";
21 src = fetchurl {
22 url = https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49;
23 sha256 = "0mn4yqnb5prqhrbbybmw1i2rx7xf4s4wagbdq9qi55fa0vk3jgw9";
24 };
25 };
26 };
27 };
28 noDev = true;
29 doRemoveVendor = false;
30 # Beware when upgrading, I probably messed up with the migrations table
31 # (due to a psql bug in wallabag)
32 version = "2.3.8";
33 name = "wallabag-${version}";
34 src = fetchurl {
35 url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz";
36 sha256 = "1sr62hfk2f2rl5by48dg8yd1gchngjnc850as17wr3w287p1kwsq";
37 };
38 unpackPhase = ''
39 unpackFile "$src"
40 sourceRoot=${version}
41 src=$PWD/${version}
42 '';
43 patches = lib.optionals ldap [ ./ldap.patch ];
44 preInstall = ''
45 export SYMFONY_ENV="prod"
46 '';
47 postInstall = ''
48 rm -rf web/assets var/{cache,logs,sessions} app/config/parameters.yml data
49 ln -sf ${wallabag_config} app/config/parameters.yml
50 ln -sf ${varDir}/var/{cache,logs,sessions} var
51 ln -sf ${varDir}/data data
52 ln -sf ${varDir}/assets web/assets
53 '';
54}
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 @@
1diff --git a/.travis.yml b/.travis.yml
2index 04cea258..56b1f576 100644
3--- a/.travis.yml
4+++ b/.travis.yml
5@@ -58,6 +58,7 @@ install:
6
7 before_script:
8 - PHP=$TRAVIS_PHP_VERSION
9+ - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
10 - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
11 # xdebug isn't enable for PHP 7.1
12 - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi
13diff --git a/app/AppKernel.php b/app/AppKernel.php
14index 40726f05..c4f465dc 100644
15--- a/app/AppKernel.php
16+++ b/app/AppKernel.php
17@@ -42,6 +42,10 @@ class AppKernel extends Kernel
18 new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
19 ];
20
21+ if (class_exists('FR3D\\LdapBundle\\FR3DLdapBundle')) {
22+ $bundles[] = new FR3D\LdapBundle\FR3DLdapBundle();
23+ }
24+
25 if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
26 $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
27 $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
28diff --git a/app/DoctrineMigrations/Version20170710113900.php b/app/DoctrineMigrations/Version20170710113900.php
29new file mode 100644
30index 00000000..7be83110
31--- /dev/null
32+++ b/app/DoctrineMigrations/Version20170710113900.php
33@@ -0,0 +1,54 @@
34+<?php
35+
36+namespace Application\Migrations;
37+
38+use Doctrine\DBAL\Migrations\AbstractMigration;
39+use Doctrine\DBAL\Schema\Schema;
40+use Symfony\Component\DependencyInjection\ContainerAwareInterface;
41+use Symfony\Component\DependencyInjection\ContainerInterface;
42+
43+/**
44+ * Added dn field on wallabag_users
45+ */
46+class Version20170710113900 extends AbstractMigration implements ContainerAwareInterface
47+{
48+ /**
49+ * @var ContainerInterface
50+ */
51+ private $container;
52+
53+ public function setContainer(ContainerInterface $container = null)
54+ {
55+ $this->container = $container;
56+ }
57+
58+ private function getTable($tableName)
59+ {
60+ return $this->container->getParameter('database_table_prefix').$tableName;
61+ }
62+
63+ /**
64+ * @param Schema $schema
65+ */
66+ public function up(Schema $schema)
67+ {
68+ $usersTable = $schema->getTable($this->getTable('user'));
69+
70+ $this->skipIf($usersTable->hasColumn('dn'), 'It seems that you already played this migration.');
71+
72+ $usersTable->addColumn('dn', 'text', [
73+ 'default' => null,
74+ 'notnull' => false,
75+ ]);
76+ }
77+
78+ /**
79+ * @param Schema $schema
80+ */
81+ public function down(Schema $schema)
82+ {
83+ $usersTable = $schema->getTable($this->getTable('user'));
84+ $usersTable->dropColumn('dn');
85+ }
86+}
87+
88diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist
89index 6b0cb8e8..cfd41b69 100644
90--- a/app/config/parameters.yml.dist
91+++ b/app/config/parameters.yml.dist
92@@ -62,3 +62,23 @@ parameters:
93 redis_port: 6379
94 redis_path: null
95 redis_password: null
96+
97+ # ldap configuration
98+ # To enable, you need to require fr3d/ldap-bundle
99+ ldap_enabled: false
100+ ldap_host: localhost
101+ ldap_port: 389
102+ ldap_tls: false
103+ ldap_ssl: false
104+ ldap_bind_requires_dn: true
105+ ldap_base: dc=example,dc=com
106+ ldap_manager_dn: ou=Manager,dc=example,dc=com
107+ ldap_manager_pw: password
108+ ldap_filter: (&(ObjectClass=Person))
109+ # optional (if null: no ldap user is admin)
110+ ldap_admin_filter: (&(memberOf=ou=admins,dc=example,dc=com)(uid=%s))
111+ ldap_username_attribute: uid
112+ ldap_email_attribute: mail
113+ ldap_name_attribute: cn
114+ # optional (default sets user as enabled unconditionally)
115+ ldap_enabled_attribute: ~
116diff --git a/app/config/security.yml b/app/config/security.yml
117index 02afc9ea..48fbb553 100644
118--- a/app/config/security.yml
119+++ b/app/config/security.yml
120@@ -6,6 +6,7 @@ security:
121 ROLE_ADMIN: ROLE_USER
122 ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
123
124+ # /!\ This list is modified in WallabagUserBundle when LDAP is enabled
125 providers:
126 administrators:
127 entity:
128@@ -36,6 +37,7 @@ security:
129 pattern: ^/login$
130 anonymous: ~
131
132+ # /!\ This section is modified in WallabagUserBundle when LDAP is enabled
133 secured_area:
134 pattern: ^/
135 form_login:
136diff --git a/composer.json b/composer.json
137index 0483da1d..e3e47bdc 100644
138--- a/composer.json
139+++ b/composer.json
140@@ -87,7 +87,11 @@
141 "bdunogier/guzzle-site-authenticator": "^1.0.0",
142 "defuse/php-encryption": "^2.1",
143 "html2text/html2text": "^4.1",
144- "sulu/symfony-intl-fix": "^1.0"
145+ "sulu/symfony-intl-fix": "^1.0",
146+ "fr3d/ldap-bundle": "^3.0"
147+ },
148+ "suggest": {
149+ "fr3d/ldap-bundle": "If you want to authenticate via LDAP"
150 },
151 "require-dev": {
152 "doctrine/doctrine-fixtures-bundle": "~2.2",
153diff --git a/composer.lock b/composer.lock
154index b3b0a4c6..8c8a87ee 100644
155--- a/composer.lock
156+++ b/composer.lock
157@@ -1346,6 +1346,65 @@
158 ],
159 "time": "2019-05-09T11:53:40+00:00"
160 },
161+ {
162+ "name": "fr3d/ldap-bundle",
163+ "version": "v3.0.0",
164+ "source": {
165+ "type": "git",
166+ "url": "https://github.com/Maks3w/FR3DLdapBundle.git",
167+ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475"
168+ },
169+ "dist": {
170+ "type": "zip",
171+ "url": "https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475",
172+ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475",
173+ "shasum": ""
174+ },
175+ "require": {
176+ "php": ">=5.5",
177+ "psr/log": "~1.0",
178+ "symfony/config": "2.3 - 3",
179+ "symfony/dependency-injection": "2.3 - 3",
180+ "symfony/polyfill-php56": "^1.1",
181+ "symfony/security": "2.3 - 3",
182+ "symfony/security-bundle": "2.3 - 3",
183+ "zendframework/zend-ldap": "2.5 - 3"
184+ },
185+ "require-dev": {
186+ "fabpot/php-cs-fixer": "1.11.*",
187+ "fr3d/psr3-message-assertions": "0.1.*",
188+ "friendsofsymfony/user-bundle": "~1.3",
189+ "maks3w/phpunit-methods-trait": "^4.6",
190+ "phpunit/phpunit": "^4.6",
191+ "symfony/validator": "2.3 - 3"
192+ },
193+ "suggest": {
194+ "friendsofsymfony/user-bundle": "Integrate authentication and management for DB users, useful for unmanned LDAP servers",
195+ "symfony/validator": "Allow pre-validate for existing users before register new ones"
196+ },
197+ "type": "symfony-bundle",
198+ "autoload": {
199+ "psr-4": {
200+ "FR3D\\LdapBundle\\": ""
201+ }
202+ },
203+ "notification-url": "https://packagist.org/downloads/",
204+ "license": [
205+ "MIT"
206+ ],
207+ "authors": [
208+ {
209+ "name": "Maks3w"
210+ }
211+ ],
212+ "description": "This package provide users and authentication services based on LDAP directories for Symfony2 framework",
213+ "homepage": "https://github.com/Maks3w/FR3DLdapBundle",
214+ "keywords": [
215+ "Authentication",
216+ "ldap"
217+ ],
218+ "time": "2016-02-12T17:45:14+00:00"
219+ },
220 {
221 "name": "friendsofsymfony/jsrouting-bundle",
222 "version": "1.6.3",
223@@ -7069,6 +7128,59 @@
224 "zf2"
225 ],
226 "time": "2018-04-25T15:33:34+00:00"
227+ },
228+ {
229+ "name": "zendframework/zend-ldap",
230+ "version": "2.10.0",
231+ "source": {
232+ "type": "git",
233+ "url": "https://github.com/zendframework/zend-ldap.git",
234+ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49"
235+ },
236+ "dist": {
237+ "type": "zip",
238+ "url": "https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49",
239+ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49",
240+ "shasum": ""
241+ },
242+ "require": {
243+ "ext-ldap": "*",
244+ "php": "^5.6 || ^7.0"
245+ },
246+ "require-dev": {
247+ "php-mock/php-mock-phpunit": "^1.1.2 || ^2.1.1",
248+ "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
249+ "zendframework/zend-coding-standard": "~1.0.0",
250+ "zendframework/zend-config": "^2.5",
251+ "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1",
252+ "zendframework/zend-stdlib": "^2.7 || ^3.0"
253+ },
254+ "suggest": {
255+ "zendframework/zend-eventmanager": "Zend\\EventManager component"
256+ },
257+ "type": "library",
258+ "extra": {
259+ "branch-alias": {
260+ "dev-master": "2.10.x-dev",
261+ "dev-develop": "2.11.x-dev"
262+ }
263+ },
264+ "autoload": {
265+ "psr-4": {
266+ "Zend\\Ldap\\": "src/"
267+ }
268+ },
269+ "notification-url": "https://packagist.org/downloads/",
270+ "license": [
271+ "BSD-3-Clause"
272+ ],
273+ "description": "Provides support for LDAP operations including but not limited to binding, searching and modifying entries in an LDAP directory",
274+ "keywords": [
275+ "ZendFramework",
276+ "ldap",
277+ "zf"
278+ ],
279+ "time": "2018-07-05T05:05:12+00:00"
280 }
281 ],
282 "packages-dev": [
283diff --git a/scripts/install.sh b/scripts/install.sh
284index affa715f..45254212 100755
285--- a/scripts/install.sh
286+++ b/scripts/install.sh
287@@ -37,5 +37,8 @@ fi
288 TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
289
290 git checkout $TAG
291+if [ -n "$LDAP_ENABLED" ]; then
292+ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle
293+fi
294 SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist
295 php bin/console wallabag:install --env=$ENV
296diff --git a/scripts/update.sh b/scripts/update.sh
297index 3ef10439..eeee28d6 100755
298--- a/scripts/update.sh
299+++ b/scripts/update.sh
300@@ -42,6 +42,9 @@ git fetch origin
301 git fetch --tags
302 TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
303 git checkout $TAG --force
304+if [ -n "$LDAP_ENABLED" ]; then
305+ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle
306+fi
307 SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist
308 php bin/console doctrine:migrations:migrate --no-interaction --env=$ENV
309 php bin/console cache:clear --env=$ENV
310diff --git a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php
311index 5ca3482e..904a6af1 100644
312--- a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php
313+++ b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php
314@@ -6,9 +6,34 @@ use Symfony\Component\Config\FileLocator;
315 use Symfony\Component\DependencyInjection\ContainerBuilder;
316 use Symfony\Component\DependencyInjection\Loader;
317 use Symfony\Component\HttpKernel\DependencyInjection\Extension;
318+use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
319
320-class WallabagUserExtension extends Extension
321+class WallabagUserExtension extends Extension implements PrependExtensionInterface
322 {
323+ public function prepend(ContainerBuilder $container)
324+ {
325+ $ldap = $container->getParameter('ldap_enabled');
326+
327+ if ($ldap) {
328+ $container->prependExtensionConfig('security', array(
329+ 'providers' => array(
330+ 'chain_provider' => array(),
331+ ),
332+ ));
333+ $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
334+ $loader->load('ldap.yml');
335+ } elseif ($container->hasExtension('fr3d_ldap')) {
336+ $container->prependExtensionConfig('fr3_d_ldap', array(
337+ 'driver' => array(
338+ 'host' => 'localhost',
339+ ),
340+ 'user' => array(
341+ 'baseDn' => 'dc=example,dc=com',
342+ ),
343+ ));
344+ }
345+ }
346+
347 public function load(array $configs, ContainerBuilder $container)
348 {
349 $configuration = new Configuration();
350@@ -16,6 +41,9 @@ class WallabagUserExtension extends Extension
351
352 $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
353 $loader->load('services.yml');
354+ if ($container->getParameter('ldap_enabled')) {
355+ $loader->load('ldap_services.yml');
356+ }
357 $container->setParameter('wallabag_user.registration_enabled', $config['registration_enabled']);
358 }
359
360diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php
361index 48446e3c..f93c59c7 100644
362--- a/src/Wallabag/UserBundle/Entity/User.php
363+++ b/src/Wallabag/UserBundle/Entity/User.php
364@@ -1,5 +1,15 @@
365 <?php
366
367+// This permits to have the LdapUserInterface even when fr3d/ldap-bundle is not
368+// in the packages
369+namespace FR3D\LdapBundle\Model;
370+
371+interface LdapUserInterface
372+{
373+ public function setDn($dn);
374+ public function getDn();
375+}
376+
377 namespace Wallabag\UserBundle\Entity;
378
379 use Doctrine\Common\Collections\ArrayCollection;
380@@ -16,6 +26,7 @@ use Wallabag\ApiBundle\Entity\Client;
381 use Wallabag\CoreBundle\Entity\Config;
382 use Wallabag\CoreBundle\Entity\Entry;
383 use Wallabag\CoreBundle\Helper\EntityTimestampsTrait;
384+use FR3D\LdapBundle\Model\LdapUserInterface;
385
386 /**
387 * User.
388@@ -28,7 +39,7 @@ use Wallabag\CoreBundle\Helper\EntityTimestampsTrait;
389 * @UniqueEntity("email")
390 * @UniqueEntity("username")
391 */
392-class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterface
393+class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterface, LdapUserInterface
394 {
395 use EntityTimestampsTrait;
396
397@@ -67,6 +78,13 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
398 */
399 protected $email;
400
401+ /**
402+ * @var string
403+ *
404+ * @ORM\Column(name="dn", type="text", nullable=true)
405+ */
406+ protected $dn;
407+
408 /**
409 * @var \DateTime
410 *
411@@ -309,4 +327,33 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
412 return $this->clients->first();
413 }
414 }
415+
416+ /**
417+ * Set dn.
418+ *
419+ * @param string $dn
420+ *
421+ * @return User
422+ */
423+ public function setDn($dn)
424+ {
425+ $this->dn = $dn;
426+
427+ return $this;
428+ }
429+
430+ /**
431+ * Get dn.
432+ *
433+ * @return string
434+ */
435+ public function getDn()
436+ {
437+ return $this->dn;
438+ }
439+
440+ public function isLdapUser()
441+ {
442+ return $this->dn !== null;
443+ }
444 }
445diff --git a/src/Wallabag/UserBundle/LdapHydrator.php b/src/Wallabag/UserBundle/LdapHydrator.php
446new file mode 100644
447index 00000000..cea2450f
448--- /dev/null
449+++ b/src/Wallabag/UserBundle/LdapHydrator.php
450@@ -0,0 +1,103 @@
451+<?php
452+
453+namespace Wallabag\UserBundle;
454+
455+use FR3D\LdapBundle\Hydrator\HydratorInterface;
456+use FOS\UserBundle\FOSUserEvents;
457+use FOS\UserBundle\Event\UserEvent;
458+
459+class LdapHydrator implements HydratorInterface
460+{
461+ private $userManager;
462+ private $eventDispatcher;
463+ private $attributesMap;
464+ private $enabledAttribute;
465+ private $ldapBaseDn;
466+ private $ldapAdminFilter;
467+ private $ldapDriver;
468+
469+ public function __construct(
470+ $user_manager,
471+ $event_dispatcher,
472+ array $attributes_map,
473+ $ldap_base_dn,
474+ $ldap_admin_filter,
475+ $ldap_driver
476+ ) {
477+ $this->userManager = $user_manager;
478+ $this->eventDispatcher = $event_dispatcher;
479+
480+ $this->attributesMap = array(
481+ 'setUsername' => $attributes_map[0],
482+ 'setEmail' => $attributes_map[1],
483+ 'setName' => $attributes_map[2],
484+ );
485+ $this->enabledAttribute = $attributes_map[3];
486+
487+ $this->ldapBaseDn = $ldap_base_dn;
488+ $this->ldapAdminFilter = $ldap_admin_filter;
489+ $this->ldapDriver = $ldap_driver;
490+ }
491+
492+ public function hydrate(array $ldapEntry)
493+ {
494+ $user = $this->userManager->findUserBy(array('dn' => $ldapEntry['dn']));
495+
496+ if (!$user) {
497+ $user = $this->userManager->createUser();
498+ $user->setDn($ldapEntry['dn']);
499+ $user->setPassword('');
500+ $user->setSalt('');
501+ $this->updateUserFields($user, $ldapEntry);
502+
503+ $event = new UserEvent($user);
504+ $this->eventDispatcher->dispatch(FOSUserEvents::USER_CREATED, $event);
505+
506+ $this->userManager->reloadUser($user);
507+ } else {
508+ $this->updateUserFields($user, $ldapEntry);
509+ }
510+
511+ return $user;
512+ }
513+
514+ private function updateUserFields($user, $ldapEntry)
515+ {
516+ foreach ($this->attributesMap as $key => $value) {
517+ if (is_array($ldapEntry[$value])) {
518+ $ldap_value = $ldapEntry[$value][0];
519+ } else {
520+ $ldap_value = $ldapEntry[$value];
521+ }
522+
523+ call_user_func([$user, $key], $ldap_value);
524+ }
525+
526+ if ($this->enabledAttribute !== null) {
527+ $user->setEnabled($ldapEntry[$this->enabledAttribute]);
528+ } else {
529+ $user->setEnabled(true);
530+ }
531+
532+ if ($this->isAdmin($user)) {
533+ $user->addRole('ROLE_SUPER_ADMIN');
534+ } else {
535+ $user->removeRole('ROLE_SUPER_ADMIN');
536+ }
537+
538+ $this->userManager->updateUser($user, true);
539+ }
540+
541+ private function isAdmin($user)
542+ {
543+ if ($this->ldapAdminFilter === null) {
544+ return false;
545+ }
546+
547+ $escaped_username = ldap_escape($user->getUsername(), '', LDAP_ESCAPE_FILTER);
548+ $filter = sprintf($this->ldapAdminFilter, $escaped_username);
549+ $entries = $this->ldapDriver->search($this->ldapBaseDn, $filter);
550+
551+ return $entries['count'] == 1;
552+ }
553+}
554diff --git a/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php
555new file mode 100644
556index 00000000..8a851f12
557--- /dev/null
558+++ b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php
559@@ -0,0 +1,43 @@
560+<?php
561+
562+namespace Wallabag\UserBundle;
563+
564+use FOS\OAuthServerBundle\Storage\OAuthStorage;
565+use OAuth2\Model\IOAuth2Client;
566+use Symfony\Component\Security\Core\Exception\AuthenticationException;
567+
568+class OAuthStorageLdapWrapper extends OAuthStorage
569+{
570+ private $ldapManager;
571+
572+ public function setLdapManager($ldap_manager)
573+ {
574+ $this->ldapManager = $ldap_manager;
575+ }
576+
577+ public function checkUserCredentials(IOAuth2Client $client, $username, $password)
578+ {
579+ try {
580+ $user = $this->userProvider->loadUserByUsername($username);
581+ } catch (AuthenticationException $e) {
582+ return false;
583+ }
584+
585+ if ($user->isLdapUser()) {
586+ return $this->checkLdapUserCredentials($user, $password);
587+ } else {
588+ return parent::checkUserCredentials($client, $username, $password);
589+ }
590+ }
591+
592+ private function checkLdapUserCredentials($user, $password)
593+ {
594+ if ($this->ldapManager->bind($user, $password)) {
595+ return array(
596+ 'data' => $user,
597+ );
598+ } else {
599+ return false;
600+ }
601+ }
602+}
603diff --git a/src/Wallabag/UserBundle/Resources/config/ldap.yml b/src/Wallabag/UserBundle/Resources/config/ldap.yml
604new file mode 100644
605index 00000000..5ec16088
606--- /dev/null
607+++ b/src/Wallabag/UserBundle/Resources/config/ldap.yml
608@@ -0,0 +1,28 @@
609+fr3d_ldap:
610+ service:
611+ user_hydrator: ldap_user_hydrator
612+ driver:
613+ host: "%ldap_host%"
614+ port: "%ldap_port%"
615+ useSsl: "%ldap_ssl%"
616+ useStartTls: "%ldap_tls%"
617+ bindRequiresDn: "%ldap_bind_requires_dn%"
618+ username: "%ldap_manager_dn%"
619+ password: "%ldap_manager_pw%"
620+ user:
621+ baseDn: "%ldap_base%"
622+ filter: "%ldap_filter%"
623+ usernameAttribute: "%ldap_username_attribute%"
624+security:
625+ providers:
626+ chain_provider:
627+ chain:
628+ providers: [ fr3d_ldapbundle, fos_userbundle ]
629+ fr3d_ldapbundle:
630+ id: fr3d_ldap.security.user.provider
631+ firewalls:
632+ secured_area:
633+ fr3d_ldap: ~
634+ form_login:
635+ provider: chain_provider
636+
637diff --git a/src/Wallabag/UserBundle/Resources/config/ldap_services.yml b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml
638new file mode 100644
639index 00000000..b3e3fd8a
640--- /dev/null
641+++ b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml
642@@ -0,0 +1,22 @@
643+services:
644+ fos_oauth_server.server:
645+ class: OAuth2\OAuth2
646+ arguments:
647+ - "@oauth_storage_ldap_wrapper"
648+ - "%fos_oauth_server.server.options%"
649+ oauth_storage_ldap_wrapper:
650+ class: Wallabag\UserBundle\OAuthStorageLdapWrapper
651+ parent: fos_oauth_server.storage
652+ calls:
653+ - [setLdapManager, ["@fr3d_ldap.ldap_manager"]]
654+
655+ ldap_user_hydrator:
656+ class: Wallabag\UserBundle\LdapHydrator
657+ arguments:
658+ - "@fos_user.user_manager"
659+ - "@event_dispatcher"
660+ - [ "%ldap_username_attribute%", "%ldap_email_attribute%", "%ldap_name_attribute%", "%ldap_enabled_attribute%" ]
661+ - "%ldap_base%"
662+ - "%ldap_admin_filter%"
663+ - "@fr3d_ldap.ldap_driver"
664+
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 @@
1{ yourls_config ? "/etc/yourls/config.php", fetchFromGitHub, callPackage, lib, stdenv }:
2let
3 pluginNames = [ "ldap" ];
4 allPlugins = lib.attrsets.genAttrs pluginNames
5 (name: callPackage (./plugins + "/${name}") {});
6 toPassthru = pkg: plugins: {
7 inherit plugins allPlugins;
8 withPlugins = withPlugins pkg;
9 };
10 withPlugins = pkg: toPlugins:
11 let
12 plugins = toPlugins allPlugins;
13 toInstallPlugin = n: "ln -s ${n} $out/user/plugins/${n.pluginName}";
14 newYourls = pkg.overrideAttrs(old: {
15 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
16 passthru = toPassthru newYourls (pkg.plugins ++ plugins);
17 });
18 in newYourls;
19 package = stdenv.mkDerivation (rec {
20 pname = "yourls";
21 version = "1.7.3";
22 src = fetchFromGitHub {
23 owner = "YOURLS";
24 repo = "YOURLS";
25 rev = "077018822d3594229daa8343310d0b40804b9ddc";
26 sha256 = "1av6h619rwqn0yn0kjn2s2h3gmrhmxaaa9hd5ns4ralxgg731imd";
27 fetchSubmodules = true;
28 };
29 installPhase = ''
30 mkdir -p $out
31 cp -a */ *.php $out/
32 cp sample-robots.txt $out/robots.txt
33 ln -sf ${yourls_config} $out/includes/config.php
34 '';
35 passthru = toPassthru package [];
36 });
37in 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 @@
1{ stdenv, fetchFromGitHub }:
2stdenv.mkDerivation (rec {
3 pname = "yourls-ldap-plugin";
4 version = "2a3cb03-master";
5 src = fetchFromGitHub {
6 owner = "k3a";
7 repo = "yourls-ldap-plugin";
8 rev = "2a3cb0334b8a6b81b284a7196e614bbd2b2b1615";
9 sha256 = "0cchbnli77d295lzf7kjmn4dcxj2bmdqa9qc3f8l8qgmp4n5n0gh";
10 fetchSubmodules = true;
11 };
12 installPhase = ''
13 mkdir -p $out
14 cp plugin.php $out
15 '';
16 passthru.pluginName = "ldap";
17})